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

如何在 AWS elasticbeanstalk 上部署 symfony 3 项目

在 AWS Elastic Beanstalk 上启动期间 Grails 4 应用程序停止