Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Install and use Supervisord with AWS Elastic Beanstalk, Symfony 2 and RabbitMq Bundle
  • Place the supervisord.conf under .ebextensions/supervisor/

  • Place the supervisor.config under .ebextensions/

  • Place the data_import_consumer.conf under .ebextensions/supervisor/

[program:data_import_consumer]
process_name= %(process_num)s
command= /usr/bin/php /var/app/current/api/app/console rabbitmq:multiple-consumer -m 30 import_data
autostart=true
autorestart=unexpected
stderr_logfile=/var/log/app/rabbitmq/data_import_consumer.err.log
stdout_logfile=/var/log/app/rabbitmq/data_import_consumer.out.log
numprocs=3
exitcodes=1
startsecs=0
commands:
11install_supervisor:
test : '[ ! /etc/supervisor ] && echo "supervisor not installed"'
command: "easy_install supervisor"
container_commands:
14insert_supervisor_main_config:
command: ". /opt/elasticbeanstalk/support/envvars && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisor/supervisord.conf"
leader_only: true
15insert_supervisor_main_config_to_etc:
command: ". /opt/elasticbeanstalk/support/envvars && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisord.conf"
leader_only: true
16insert_data_import_supervisor_config:
command: ". /opt/elasticbeanstalk/support/envvars && cat .ebextensions/supervisor/data_import_consumer.conf > /etc/supervisor/conf.d/data_import_consumer.conf"
leader_only: true
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/490-supervisor_install.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
if [ ! -f /usr/local/bin/supervisord ]; then
echo "install supervisor and create directories"
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/hooks/appdeploy/post/500-supervisor_update.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
. /opt/elasticbeanstalk/support/envvars
if ps aux | grep -q "[/]usr/local/bin/supervisord"; then
echo "supervisor is running"
else
echo "start supervisor"
/usr/bin/python /usr/local/bin/supervisord --pidfile /var/run/supervisord.pid
fi
supervisorctl reread
supervisorctl update
cd /var/app/current/api
app/console rabbitmq:setup-fabric --env=$SYMFONY_ENV
echo "$(date +'%Y%m%d %T') Check for supervisor update" >> /var/log/directory-hooks-executor.log
[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
@wobeng

This comment has been minimized.

Copy link

wobeng commented Mar 15, 2016

Have you tested this on aws beanstalk? I'm trying to run a script under supervisord but I know aws uses supervisor, wouldn't an install conflict?

@buluxan

This comment has been minimized.

Copy link

buluxan commented Jun 10, 2016

hi thx for sharing , will try it on my elasticbeanstalk

thx u

@mellis3

This comment has been minimized.

Copy link

mellis3 commented Oct 5, 2017

When i try to use this in elastic beanstalk i get this error:

The configuration file __MACOSX/.ebextensions/._supervisor.config in application version XXXXX contains invalid YAML or JSON. YAML exception: Invalid Yaml: unacceptable character '�' (0x0) special characters are not allowed in "", position 0, JSON exception: Invalid JSON: Unexpected character (�) at position 0.. Update the configuration file.

I copied the code from the above code in the RAW format, so shouldn't have had any special characters in it.

Any thoughts?

Thanks!

@StefanieD

This comment has been minimized.

Copy link
Owner Author

StefanieD commented Jan 4, 2018

@mellis3 Sorry for the late answer but unfortunately Github doesn't send notifications for comments here.
Do you use any IDE, maybe the spaces were converted to tabs or something else. The script was working under ubuntu but it's also some time ago.
The only thing I can suggest is to debug it step by step. Comment out some parts and you'll find the wrong character.

@tvillafane

This comment has been minimized.

Copy link

tvillafane commented Jul 22, 2018

With the new supervisor (version 3.0+ I think), the folder structures change. There is no longer a supervisor folder in /etc, so I had to change the following commands as such:
04_insert_supervisor_main_config: command: ". /opt/elasticbeanstalk/support/envvars && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisord.conf" leader_only: true 05_insert_supervisor_main_config_to_etc: command: ". /opt/elasticbeanstalk/support/envvars && cat .ebextensions/supervisor/supervisord.conf > /etc/supervisord.conf" leader_only: true 06_insert_push_listener_supervisor_config: command: ". /opt/elasticbeanstalk/support/envvars && cat .ebextensions/supervisor/push_listener.conf > /etc/supervisor.conf" leader_only: true

Otherwise, everything else worked flawlessly. Thank you for this!

@ghost

This comment has been minimized.

Copy link

ghost commented Jul 27, 2018

@mellis3 You probably figured it out already by now, but maybe this will help someone else. This error is caused because of __MACOSX folders that are created automatically by MacOSX and shouldn't be in the zip you upload to the Elastic Beanstalk. To fix this, try:

zip -d Archive.zip "__MACOSX*"

(where Archive.zip is points to your zip)

@csimpi

This comment has been minimized.

Copy link

csimpi commented Jan 24, 2019

Thank you, this was very useful!

@futoase

This comment has been minimized.

Copy link

futoase commented May 15, 2019

Thank you this gist post!.

@kprosper

This comment has been minimized.

Copy link

kprosper commented Mar 21, 2020

please, how can i stop supervisor on deploy wity symfony ?

@StefanieD

This comment has been minimized.

Copy link
Owner Author

StefanieD commented Mar 21, 2020

@kprosper Maybe you could try to create a pre-deploy file i.e. /opt/elasticbeanstalk/hooks/appdeploy/pre/100-stop-supervisor.sh which stops supervisor.
Like I did it in supervisor.config for updating supervisor.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.