部署后运行Elastic Beanstalk命令

时间:2017-11-03 09:59:20

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

我在AWS上部署Symfony应用程序。我使用Elastic Beanstalk。 在部署过程之后,我想运行一些symfony命令:clear cache,update db,...

所以我在

中使用.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实例。所以这不可能是实例。

2 个答案:

答案 0 :(得分:2)

我遇到了类似的日志记录问题,我认为你需要将它放在container_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

答案 1 :(得分:0)

如果您查看您的 /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。它可能会有所帮助。