在 AWS 上的 symfony 2.8 应用程序中更改根目录 - Elastic Beanstalk

Posted

技术标签:

【中文标题】在 AWS 上的 symfony 2.8 应用程序中更改根目录 - Elastic Beanstalk【英文标题】:Change Root in a symfony 2.8 App on AWS - Elastic Beanstalk 【发布时间】:2016-03-17 07:34:31 【问题描述】:

这里需要一些指示!

我已成功将我的应用程序部署到 Amazon Web Services 上的弹性 beanstalk 上,但我的根目录有问题,基本上是它运行的 /web,我如何更改它以便应用程序直接运行网址?

我之前尝试过将 symphony 应用程序部署到 azure 并使用 web.config 文件。我可以在这里做同样的事情吗?

Azure 的 web.config 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
  <rules>
    <clear />
    <rule name="BlockAccessToPublic" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="URL" pattern="/web/*" />
      </conditions>
      <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You do not have permission to view this directory or page using the credentials that you supplied." />
    </rule>
    <rule name="RewriteAssetsToPublic" stopProcessing="true">
      <match url="^(.*)(\.css|\.js|\.jpg|\.png|\.gif)$" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      </conditions>
      <action type="Rewrite" url="web/R:0" />
    </rule>
    <rule name="RewriteRequestsToPublic" stopProcessing="true">
      <match url="^(.*)$" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      </conditions>
      <action type="Rewrite" url="web/app.php/R:0" />
    </rule>
  </rules>
</rewrite>

任何建议都会很棒,所以提前感谢您的帮助! :)

【问题讨论】:

【参考方案1】:

我的理解是,您的应用程序当前正在从 http://myproject.elasticbeanstalk.com/web/ 提供服务,而您想要删除 /web 而不是直接从 http://myproject.elasticbeanstalk.com/ 提供服务。

您需要为您的环境更新document_root。有几种方法可以做到这一点:

AWS 控制面板

快速简单的解决方案是从 EB 控制台本身更改 document_root

步骤:

    登录 AWS 并转到 Elastic Beanstalk 控制面板 单击要编辑的环境 从左侧菜单中,点击配置Web Tier 下,单击 软件配置 面板上的齿轮图标 在Container Options下有一个Document Root的输入选项 将此值更改为/web 点击页面底部的应用

完成!您的环境应该开始更新。

项目配置/CLI

或者,您可以在项目的.ebextensionsoption_settings 下的.config 文件中定义此步骤,然后从命令行更新。

以下是我部署到 EB 的 Symfony2 项目的示例,其中包含 document_root 的值:

commands:
  01_update_composer:
    command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /root
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: document_root
    value: /web
  - namespace: aws:elasticbeanstalk:container:php:phpini
    option_name: composer_options
    value: --optimize-autoloader

下次为您的环境运行 eb deploy 时,您的环境应该使用任何新设置进行更新。

您也可以使用eb setenv 通过命令行更新此设置,这对于通过命令行为您的环境设置envvars 很有用,但我还没有尝试使用document_root,所以YMMV。

希望这会有所帮助:)

【讨论】:

以上是关于在 AWS 上的 symfony 2.8 应用程序中更改根目录 - Elastic Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 更新 2.8 到 3.4

Symfony 2.8:ResourceInterface::isFresh() 自 2.8 起已弃用

Symfony 2.8 Twig_Error_Runtime Sonata 管理包

XmlFileLoader.php 第 281 行中的 symfony 2.8 InvalidArgumentException

自 Symfony2 更新到 2.8 以来覆盖注册表单(SonataUserBundle)

Symfony 2.8 动态 ChoiceType 选项