amazon-web-services - 生成新实例时,AWS Elastic Beanstalk ebextensions 配置不起作用
问题描述
在我的 Laravel 应用程序中,我创建了一个文件夹,它具有在 EC2 实例.ebextensions
中安装主管的配置。
当我第一次部署应用程序并创建实例时,一切正常。主管安装。
但是当实例扩展并生成新的 EC2 时,它不会采用相同的配置。我需要在较新的实例上手动安装主管。
有没有办法让较新的实例从 .ebextensions 获取配置并以与第一次类似的方式运行它?
这是 .ebextensions 文件夹的结构
.ebextensions
- supervisor
- setup.sh
- supervisor_laravel.conf
- supervisord.conf
- supervisor.config
安装程序.sh
#!/bin/bash
echo "Supervisor - starting setup"
. /opt/elasticbeanstalk/deployment/env
if [ ! -f /usr/bin/supervisord ]; then
echo "installing supervisor"
easy_install supervisor
else
echo "supervisor already installed"
fi
if [ ! -d /etc/supervisor ]; then
mkdir /etc/supervisor
echo "create supervisor directory"
fi
if [ ! -d /etc/supervisor/conf.d ]; then
mkdir /etc/supervisor/conf.d
echo "create supervisor configs directory"
fi
. /opt/elasticbeanstalk/deployment/env && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisor/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat .ebextensions/supervisor/supervisor_laravel.conf > /etc/supervisor/conf.d/supervisor_laravel.conf
if ps aux | grep "[/]usr/bin/supervisord"; then
echo "supervisor is running"
else
echo "starting supervisor"
/usr/bin/supervisord
fi
/usr/bin/supervisorctl reread
/usr/bin/supervisorctl update
echo "Supervisor Running!"
yum -y install http://cbs.centos.org/kojifiles/packages/beanstalkd/1.9/3.el7/x86_64/beanstalkd-1.9-3.el7.x86_64.rpm
if ps aux | grep "[/]usr/bin/beanstalkd"; then
echo "beanstalkd is running"
else
echo "starting beanstalkd"
/bin/systemctl start beanstalkd.service
fi
echo "Beanstalkd Running..."
supervisor_laravel.conf
[program:worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /var/www/html/artisan queue:work --tries=3 --timeout=0
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
;user=forge
numprocs=3
redirect_stderr=true
stderr_logfile=/var/log/supervisor_laravel.err.log
stdout_logfile=/var/log/supervisor_laravel.out.log
主管.conf
[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
environment=SYMFONY_ENV=prod
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisor/conf.d/*.conf
[inet_http_server]
port = 9000
username = user
password = pw
主管.config
container_commands:
01_install_supervisor:
command: ".ebextensions/supervisor/setup.sh"
解决方案
我找到了答案。但方式略有不同。
最初,我有 .ebextensions 文件夹中的所有文件,我将一些文件移动到另一个名为“awsconfig”的文件夹(名称无关紧要),并将 setup.sh 文件的一些命令移动到 .platform/ hooks/postdeploy 并将权限作为 chmod +x 授予 setup.sh
重要的
AWS 在执行后清理 .ebextensions 文件夹。我在这里读到
我这样做是因为在较新的实例中安装了主管(在扩展后创建的实例),但配置文件没有被复制,因为较新的实例中没有 .ebextensions 文件夹
为了在部署实例后复制配置文件,我使用了平台挂钩 postdeploy。
您可以在此处阅读有关 platform-hooks-postdeploy 的信息
这是我现在的结构
.ebextensions
- supervisor
- setup.sh
- supervisor.config
.platform
- hooks
- postdeploy
- setup.sh
awsconfig
- supervisor
- supervisor_laravel.conf
- supervisord.conf
这些是 setup.php 文件中的更改,该文件分为不同文件夹中的两个文件
.ebextensions/supervisor/setup.sh
#!/bin/bash
echo "Supervisor - starting setup"
. /opt/elasticbeanstalk/deployment/env
if [ ! -f /usr/bin/supervisord ]; then
echo "installing supervisor"
easy_install supervisor
else
echo "supervisor already installed"
fi
if [ ! -d /etc/supervisor ]; then
mkdir /etc/supervisor
echo "create supervisor directory"
fi
if [ ! -d /etc/supervisor/conf.d ]; then
mkdir /etc/supervisor/conf.d
echo "create supervisor configs directory"
fi
.platform/hooks/postdeploy/setup.sh
#!/bin/bash
. /opt/elasticbeanstalk/deployment/env && cat /var/www/html/awsconfig/supervisor/supervisord.conf > /etc/supervisor/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat /var/www/html/awsconfig/supervisor/supervisord.conf > /etc/supervisord.conf
. /opt/elasticbeanstalk/deployment/env && cat /var/www/html/awsconfig/supervisor/supervisor_laravel.conf > /etc/supervisor/conf.d/supervisor_laravel.conf
if ps aux | grep "[/]usr/bin/supervisord"; then
echo "supervisor is running"
else
echo "starting supervisor"
/usr/bin/supervisord
fi
/usr/bin/supervisorctl reread
/usr/bin/supervisorctl update
echo "Supervisor Running!"
yum -y install http://cbs.centos.org/kojifiles/packages/beanstalkd/1.9/3.el7/x86_64/beanstalkd-1.9-3.el7.x86_64.rpm
if ps aux | grep "[/]usr/bin/beanstalkd"; then
echo "beanstalkd is running"
else
echo "starting beanstalkd"
/bin/systemctl start beanstalkd.service
fi
echo "Beanstalkd Running..."
所有其他文件的内容与我在问题中发布的内容相同。
推荐阅读
- excel - 使用 vlookup vba 代码在多行和多列中填充值
- php - 查找和获取 SQL 值只匹配多列 PHP
- magento - Magento 2 - 在核心文件功能中添加代码行
- c# - 有没有更好的方法来管理对 Reactive C# 中更改对象事件的单个订阅?
- twitter - 使用 egg_mode 连接 Twitter 流返回 401 Unauthorized
- airflow - 如何创建一些复杂的气流分支算子?
- jupyter - Jupyter Lab 扩展@jupyterlab/git 安装问题
- c# - 如何模拟 AbstractValidator
- c++ - 如何为自动售货机构建简单的变更制造商?
- python - HTTP 请求期间发生错误:HTTP 错误 404:未找到 GetOldTweets3