我在AWS上部署Symfony应用程序。我使用Elastic Beanstalk。 在部署过程之后,我想运行一些symfony命令:clear cache,update db,...
所以我在
中使用.config创建.ebextentioncommands:
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实例。所以这不可能是实例。
答案 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。它可能会有所帮助。