如何在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
相关产品推荐
相关产品推荐

