You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS同一EC2实例部署两个PHP应用并保留持续集成

实现方案:在同一EBS实例部署Symfony3 + OSTicket(子域名访问)

嘿,刚好之前帮朋友处理过类似的场景,给你梳理下落地的具体步骤,确保不影响原Symfony的CI流程,同时让OSTicket通过子域名正常访问:

一、核心思路拆解

因为两个应用共享同一个EC2实例,本质是通过Apache虚拟主机(EBS Linux AMI默认用Apache)实现域名分流:主域名指向原有Symfony应用,子域名指向OSTicket。同时要注意:

  • OSTicket要放在EBS不会自动覆盖的持久化目录(避免Symfony部署时被清空)
  • 保留原Travis-CI部署Symfony的流程,OSTicket单独维护部署(手动或独立CI)

二、具体实施步骤

1. 准备OSTicket环境与代码

  • 先下载OSTicket官方源码,解压后拿到upload和include等核心目录
  • 提前创建OSTicket专用的数据库(可以用实例本地MySQL,或者和Symfony共享RDS,推荐单独库避免冲突):
    -- 登录MySQL执行
    CREATE DATABASE osticket_db CHARACTER SET utf8mb4;
    CREATE USER 'osticket_user'@'localhost' IDENTIFIED BY '你的强密码';
    GRANT ALL PRIVILEGES ON osticket_db.* TO 'osticket_user'@'localhost';
    FLUSH PRIVILEGES;
    

2. 配置EBS持久化目录存放OSTicket

EBS部署Symfony时,会把代码放到/var/app/current,这个目录每次部署都会被替换,所以OSTicket要放到不会被覆盖的目录,比如/var/www/osticket:

  • SSH登录到你的EBS EC2实例
  • 创建目录并设置权限:
    sudo mkdir -p /var/www/osticket
    sudo chown -R apache:apache /var/www/osticket
    sudo chmod -R 755 /var/www/osticket
    
  • 把OSTicket的源码上传到这个目录(用SCP或Git克隆都可以),确保upload目录在/var/www/osticket下

3. 配置Apache虚拟主机(关键)

为了让子域名指向OSTicket,需要添加虚拟主机配置,而且要通过EBS的.ebextensions来管理,避免实例重启或缩放后配置丢失:

  • 在你的Symfony项目根目录下,创建.ebextensions/osticket_vhost.conf文件,内容如下:
    files:
      # 生成OSTicket的虚拟主机配置文件
      "/etc/httpd/conf.d/osticket.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
          <VirtualHost *:80>
              ServerName osticket.yourdomain.com  # 替换成你的子域名
              DocumentRoot /var/www/osticket/upload
              <Directory /var/www/osticket/upload>
                  AllowOverride All
                  Require all granted
              </Directory>
              ErrorLog /var/log/httpd/osticket-error.log
              CustomLog /var/log/httpd/osticket-access.log combined
          </VirtualHost>
    
    container_commands:
      # 确保OSTicket目录存在且权限正确
      01_ensure_osticket_dir:
        command: "mkdir -p /var/www/osticket && chown -R apache:apache /var/www/osticket"
    
  • 提交这个文件到你的Symfony GitHub仓库,下次Travis-CI部署时,EBS会自动配置好虚拟主机

4. 配置DNS解析

到你的域名服务商后台,添加一条A记录:

  • 主机记录:osticket
  • 记录值:你的EC2实例的弹性IP(EIP)地址
  • 等待DNS生效(一般10-30分钟)

5. 完成OSTicket安装

访问http://osticket.yourdomain.com,按照OSTicket的安装向导填写数据库信息(之前创建的库和账号),完成安装:

  • 安装完成后,一定要把/var/www/osticket/include/ost-config.php的权限改成只读,防止被篡改:
    sudo chmod 644 /var/www/osticket/include/ost-config.php
    

三、保留原CI流程的注意事项

  • 原Travis-CI部署Symfony到EBS的流程完全不需要修改,因为Symfony的代码在/var/app/current,OSTicket在/var/www,两者互不干扰
  • 如果OSTicket需要自动化部署,可以单独给它建一个GitHub仓库,配置GitHub Actions或Travis-CI,通过SSH登录到EC2实例拉取代码到/var/www/osticket,示例脚本:
    # SSH登录后执行
    cd /var/www/osticket
    git pull origin main
    chown -R apache:apache .
    chmod -R 755 .
    

四、可选:配置HTTPS(推荐)

如果原Symfony应用用了HTTPS,给OSTicket也配置SSL:

  • 在EC2实例上安装Certbot:
    sudo yum install certbot python2-certbot-apache
    
  • 生成包含主域名和子域名的证书:
    sudo certbot --apache -d yourdomain.com -d osticket.yourdomain.com
    
  • Certbot会自动修改Apache配置,把HTTP重定向到HTTPS,无需手动修改

内容的提问来源于stack exchange,提问作者Pasindu Dilshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:03:15