Я использую веб-приложение Symfony 4.4 на AWS Elasti c Beanstalk. У меня очень большая подпрограмма генерации PDF, которую я передал Symfony messenger.
Работа локально (Ubuntu 18.04) под управлением bin/console messenger:consume
прекрасно работает. Это также работает, если я sh ввел экземпляр EC2 и запустил его как ec2-user
после выполнения sudo chmod 777 -R /var/www/html/var/
(в противном случае консольные комманды не могут записать в папку var)
Я настроил следующее .ebextesion
файл, который успешно устанавливает супервизор, добавляет файлы конфигурации и запускает процесс. [Это видно из многочисленных онлайн-источников, нет, я ДЕЙСТВИТЕЛЬНО не знаю, что делаю, я думаю, что это немного грязно]
files:
"/tmp/messenger-consume.conf":
mode: "000644"
owner: root
group: root
content: |
[program:messenger-consume]
command=php /var/www/html/bin/console messenger:consume async --time-limit=1800 --memory-limit=340M --sleep=30
user=webapp
numprocs=1
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)02d
"/tmp/supervisord.conf":
mode: "000644"
owner: root
group: root
content: |
; supervisor config file
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)
[supervisord]
user=root
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf
; Change according to your configurations
commands:
01_01_install_supervisord:
command: |
sudo easy_install supervisor
sudo mkdir -p /etc/supervisor/conf.d/
sudo mkdir -p /var/log/supervisor
sudo touch /var/log/supervisor/supervisord.log
ignoreErrors: true
container_commands:
01_01_copy_supervisor_configuration_files:
command: |
sudo mv /tmp/supervisord.conf /etc/supervisord.conf
sudo mv /tmp/messenger-consume.conf /etc/supervisor/conf.d/messenger-consume.conf
ignoreErrors: true
02_01_start_supervisord:
command: |
sudo /usr/local/bin/supervisord -c /etc/supervisord.conf
sudo /usr/local/bin/supervisorctl reread
sudo /usr/local/bin/supervisorctl update
sudo /usr/local/bin/supervisorctl restart all
sudo /usr/local/bin/supervisorctl start messenger-consume:*
ignoreErrors: true
У меня когда-либо будет успех, только если supervisord
запускается как root.
Если я запускаю мою "программу" messenger-consume
как ec2-user
, я получаю те же ошибки при попытке записи в папку web var.
, если я запускаю messenger-consume
как webapp
работает нормально. Так что это маршрут, который я выбрал.
Во всех случаях при выполнении messenger-consume
с root
, ec2-user
или webapp
переменные окружения php оказываются пустыми. Переменные требуются для подключения к базе данных и некоторых других служб, которые я использую.
Если я заполняю файл .env
пользователем RDS, хостом, паролем и т. Д. c, это работает. Наличие учетных данных безопасности в файле .env
- плохая идея, оно находится в репозитории git, а также вызывает проблемы с производительностью. [или так я прочитал, это просто плохая идея]
Есть ли способ предоставить переменные окружения для Symfony без файла .env
? Или как я могу заполнить его на лету (может быть, через другой файл .ebextension, который будет читать php env vars и записывать файл?), И если у меня есть файл .env
и мои php env vars, будет это все еще вызывает проблемы с производительностью?
Я открыт для любых предложений о том, как сделать эту работу. (Symfony 4 мессенджер + AWS EB)