将Symfony 4应用部署至AWS Elastic Beanstalk遇问题求助
嘿,你这情况明显踩了两个核心坑:平台环境不兼容和部署配置缺失,我来一步步帮你理顺解决:
1. 先搞定最致命的问题:平台完全不对
你当前的EB环境用的是Tomcat 8 + Java 8的平台,但你的应用是PHP写的Symfony啊!Tomcat是跑Java程序的,根本不认识PHP代码,这就是首次部署后全页面404的根源——服务器压根没在处理你的PHP请求。
因为你没有控制台权限,要么找环境管理员把平台换成对应PHP版本的(比如arn:aws:elasticbeanstalk:us-east-2::platform/PHP 7.1 running on 64bit Amazon Linux/2.7.7,和你当前环境的Amazon Linux版本匹配),要么试试用EB CLI修改平台:
eb config set platform "arn:aws:elasticbeanstalk:us-east-2::platform/PHP 7.1 running on 64bit Amazon Linux/2.7.7"
2. 切换PHP平台后,修复部署配置
平台换对了,接下来解决composer.phar: command not found的问题,同时配置Symfony的运行环境,按下面的步骤来:
2.1 先让服务器装上Composer
在项目根目录新建.ebextensions文件夹,然后创建01_composer_setup.config文件,内容如下:
commands: # 检查是否已安装Composer,没有就装 01_install_composer: command: | cd /tmp curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer test: '[ ! -f /usr/local/bin/composer ]' container_commands: # 部署时安装项目依赖(你本地删了vendor,所以必须在服务器装) 01_install_deps: command: composer install --no-dev --optimize-autoloader cwd: /var/app/staging
2.2 配置Apache指向Symfony的入口目录
Symfony的入口文件在public文件夹,但EB默认的PHP平台文档根是/var/app/current,所以得改Apache配置,新建02_apache_docroot.config:
files: "/etc/httpd/conf.d/symfony.conf": mode: "000644" owner: root group: root content: | <Directory /var/app/current/public> AllowOverride All Require all granted </Directory> DocumentRoot /var/app/current/public container_commands: # 重启Apache让配置生效 01_restart_apache: command: sudo service httpd restart
这个配置会让Apache把请求导向Symfony的public目录,同时允许.htaccess生效(Symfony靠这个处理路由)。
2.3 配置Symfony的环境变量(必须项)
Symfony需要APP_ENV和APP_SECRET这些环境变量才能正常运行,你可以新建03_env_vars.config来设置:
option_settings: - namespace: aws:elasticbeanstalk:application:environment option_name: APP_ENV value: prod - namespace: aws:elasticbeanstalk:application:environment option_name: APP_SECRET value: 你的项目实际密钥
记得把你的项目实际密钥换成你Symfony项目里的真实密钥。
3. 最后调整部署流程
- 确保你的master分支里没有
vendor、var/cache、var/logs这些不需要提交的文件(用.gitignore管控好)。 - 用EB CLI重新部署:
eb deploy
4. 万一还有问题的排查点
- 要是还是404,用
eb logs看Apache的日志,确认文档根是不是真的改成public了。 - 要是Composer装依赖失败,检查服务器能不能访问getcomposer.org,或者在composer命令里加国内镜像:
composer install --no-dev --optimize-autoloader --repo-url=https://packagist.phpcomposer.com
内容的提问来源于stack exchange,提问作者yevg

