Symfony 4 在 AWS Elastic Beanstalk 上运行
Posted
技术标签:
【中文标题】Symfony 4 在 AWS Elastic Beanstalk 上运行【英文标题】:Symfony 4 running on AWS Elastic Beanstalk 【发布时间】:2019-03-14 07:47:27 【问题描述】:我最近在 Symfony 4 中完成了一个 API,我想将它部署在 AWS 的 Elastic Beanstalk 上进行生产测试。但是,除了能够访问 index.php Symfony default page 中的默认 Symfony 4 问候语
我无法路由到任何其他逻辑。例如,当尝试使用在本地环境中工作的 /note/view note/view on local
我在 EB 环境中遇到“未定义的索引 /note/view 不存在”。几乎就像我的 routes.yaml 没有加载一样。
任何建议将不胜感激!提前致谢!
【问题讨论】:
【参考方案1】:确保您的 public
目录中有 .htaccess
文件(至少在您的 EC2 实例上 - EB 创建的实例上)
您的本地可能不需要它(如 nginx),但是 EB PHP 自带 apache 开箱即用。您需要确保您的代码也可以在 apache 上运行。
只是为了测试这个理论,访问由 EB 创建的 EC2 实例(如果您不知道如何,请参阅下文);
cd /var/app/current/public
~ nano .htaccess
将下面的内容粘贴到文件中;
`
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
请注意,这只是 apache 的基本重写,以测试该理论。您可以根据项目的需要向该文件添加更多内容。
重启apache;sudo service httpd restart
测试一下!
您可以使用cd /var/www/html/public
替代cd /var/app/current/public
,因为它是/var/app/current/public
的符号链接
如何访问 EB 生成的 EC2 实例
转到 AWS 控制台 -> Elastic Beanstalk -> 您的应用程序 -> 您的环境 进入环境仪表板后,点击左侧的“配置” 找到“安全”框并点击“修改”。 在“虚拟机权限”下选择您的“EC2 密钥对”并保存。 转到 EC2 -> Instances 并找到您的 EC2 实例的公共 DNS (IPv4) 并使用它通过您的 EC2 密钥对(pem 文件)进行访问您需要一点时间才能登录。
PS 当然,EBS 背后的主要思想之一是您不需要通过 SSH 连接到您的实例。然而,这只是为了测试理论,有时对于 AWS,您需要采用跟踪和错误方式。我不知道这个应用程序的设置,也不知道 EBS 的整个设置及其工作流程。如果这可以解决您的问题,您只需将 .htaccess
包含到您的项目中即可。
【讨论】:
以上是关于Symfony 4 在 AWS Elastic Beanstalk 上运行的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS 上的 symfony 2.8 应用程序中更改根目录 - Elastic Beanstalk
使用 Amazon Elastic Beanstalk 部署 symfony2.1 应用程序
AWS Elastic Beanstalk——rails 部署问题
将 Symfony 4 应用程序部署到 AWS Elasticbeanstalk