【问题标题】:Run Elastic Beanstalk commands after deploy部署后运行 Elastic Beanstalk 命令
【发布时间】:2018-04-16 00:25:46
【问题描述】:

我在 AWS 上部署 Symfony 应用程序。我为此使用 Elastic Beanstalk。 在部署过程之后,我想运行一些 symfony 命令:清除缓存、更新数据库、...

所以我在 .config 里面创建了 .ebextention

commands:
  01updateComposer:
    command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update 1.0.0-alpha11
  cache:
    command: sudo php /var/www/html/bin/console cahce:clear --env=prod

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /root

但它接缝我的cache 命令不起作用或它在错误的时刻起作用。

有人可以帮帮我吗?

更新: 实际上我更新了配置文件。 我现在在 /tmp 中看到 end.txt、collect.txt、dump.txt。他们没事。 但我没有现场修改。例如没有资产。看起来命令在错误的时刻运行。

commands:
  01updateComposer:
    command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update 1.0.0-alpha11
  collect:
    command: sudo php /var/www/html/bin/console collect --nb=1 --env=prod >> /tmp/collect.txt
  assetic:
    command: sudo php /var/www/html/bin/console assets:install --symlink --env=prod >> /tmp/dump.txt
  dump:
    command: sudo php /var/www/html/bin/console assetic:dump --env=prod >> /tmp/dump.txt
  end:
    command: touch /tmp/end.txt

option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /root

我也尝试使用 container_commands 而不是命令。这确实帮助了我。

P.s.我只有一个实例 EC2。所以这不可能是错误的实例。

【问题讨论】:

标签: symfony amazon-web-services command amazon-elastic-beanstalk


【解决方案1】:

如果您查看您的 /var/log/eb-activity.log 文件,您会看到所有内容的执行顺序。特别是您会看到部署中的某个时刻,其中整个项目被移动文件夹:

[2021-03-05T19:24:43.872Z] INFO  [17486] - [Application update app-1ee2-210305_192347@12/AppDeployStage1/AppDeployEnactHook/01_flip.sh] : Completed activity. Result:
  ++ /opt/elasticbeanstalk/bin/get-config container -k app_staging_dir
  + EB_APP_STAGING_DIR=/var/app/ondeck
  ++ /opt/elasticbeanstalk/bin/get-config container -k app_deploy_dir
  + EB_APP_DEPLOY_DIR=/var/app/current
  + '[' -d /var/app/current ']'
  + mv /var/app/current /var/app/current.old
  + mv /var/app/ondeck /var/app/current
  + nohup rm -rf /var/app/current.old

某些命令(如php artisan view:cache)需要在项目被移动之后运行,否则它们将无法正常运行。

为此,您可以使用 Elastic Beanstalk custom platform hooks(注意:仅适用于 Amazon Linux,不适用于基于新 nginx 的 Amazon Linux 2)。

在您后来的一个.config 文件中,您可以简单地添加如下内容:

files:
   "/opt/elasticbeanstalk/hooks/appdeploy/post/99_z_post_deploy.sh":
      mode: "000755"
      owner: root
      group: root
      content: |
        #!/usr/bin/env bash
        echo "Running post.sh script"
        # Turn on maintenance mode
        #php /var/app/current/artisan down || true

        # Run database migrations
        php /var/app/current/artisan migrate --force

这将在“appdeploy”阶段的“post”阶段执行"/opt/elasticbeanstalk/hooks/appdeploy/post/99_z_post_deploy.sh" 行下的所有命令。而 99_ 会将其带到最后(所有内容都按字母顺序执行)。

您可以再次查看您的eb-activity.log 文件以查看它的执行位置。上面的示例将执行 shell 脚本“post.sh”。

对于 Amazon Linux 2,您需要使用 Application deployment platform hooks

这有点晚了,但希望它有所帮助。这也是我在写这个答案时发现的一个不错的指南:How To Use the Appdeploy Filesystem Hook。它可能会有所帮助。

【讨论】:

    【解决方案2】:

    我在日志记录方面遇到了类似的问题,我认为您需要将其放在 container_commands 部分,而不是 commands 部分。

    container_commands:
      01updateComposer:
        command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update 1.0.0-alpha11
      02collect:
        command: sudo php /var/www/html/bin/console collect --nb=1 --env=prod >> /tmp/collect.txt
      03assetic:
        command: sudo php /var/www/html/bin/console assets:install --symlink --env=prod >> /tmp/dump.txt
      04dump:
        command: sudo php /var/www/html/bin/console assetic:dump --env=prod >> /tmp/dump.txt
      05end:
        command: touch /tmp/end.txt
    
    option_settings:
      - namespace: aws:elasticbeanstalk:application:environment
        option_name: COMPOSER_HOME
        value: /root
    

    您可以查看有关我的问题和解决方案的更多详细信息here

    【讨论】:

    • 命令按字母顺序执行,因此您上面的命令会以错误的方式执行。见上文
    • Ahhhhh @Tom,这可能会对我有所帮助。我会在一个小时内尝试,谢谢。
    • 不,这没有帮助,我认为默认情况下,symfony 的弹性豆茎会在部署结束时开始清除缓存。我找不到任何解决方案。大概等我 AWS 技能再强一点的时候再回到这个问题。
    猜你喜欢
    • 2018-08-24
    • 2017-04-07
    • 2016-06-10
    • 1970-01-01
    • 2015-04-19
    • 2019-01-18
    • 2014-11-09
    • 2017-05-30
    • 2015-07-31
    相关资源
    最近更新 更多