diff --git a/.gitignore b/.gitignore index ca9dd12298..d5e58e8c87 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,4 @@ local/ awx/lib/.deps_built awx/lib/site-packages venv/* +use_dev_supervisor.txt diff --git a/Makefile b/Makefile index 6d55edc698..836f96da9c 100644 --- a/Makefile +++ b/Makefile @@ -378,6 +378,12 @@ server: server_noattach servercc: server_noattach tmux -2 -CC attach-session -t tower +supervisor: + @if [ "$(VENV_BASE)" ]; then \ + . $(VENV_BASE)/tower/bin/activate; \ + fi; \ + supervisord --configuration /supervisor.conf --pidfile=/tmp/supervisor_pid + # Alternate approach to tmux to run all development tasks specified in # Procfile. https://youtu.be/OPMgaibszjk honcho: diff --git a/tools/docker-compose/Dockerfile b/tools/docker-compose/Dockerfile index 19b699ab36..4a78226a3a 100644 --- a/tools/docker-compose/Dockerfile +++ b/tools/docker-compose/Dockerfile @@ -19,6 +19,7 @@ RUN mkdir -p /etc/tower RUN mkdir -p /data/db ADD tools/docker-compose/license /etc/tower/license RUN pip2 install honcho +RUN pip2 install supervisor RUN curl -LO https://github.com/Yelp/dumb-init/releases/download/v1.1.3/dumb-init_1.1.3_amd64 && chmod +x ./dumb-init_1.1.3_amd64 && mv ./dumb-init_1.1.3_amd64 /usr/bin/dumb-init ADD tools/docker-compose/ansible-tower.egg-link /tmp/ansible-tower.egg-link ADD tools/docker-compose/tower-manage /usr/local/bin/tower-manage diff --git a/tools/docker-compose/start_development.sh b/tools/docker-compose/start_development.sh index ee94888431..9814a9344c 100755 --- a/tools/docker-compose/start_development.sh +++ b/tools/docker-compose/start_development.sh @@ -25,6 +25,7 @@ fi cp -nR /tmp/ansible_tower.egg-info /tower_devel/ || true cp /tmp/ansible-tower.egg-link /venv/tower/lib/python2.7/site-packages/ansible-tower.egg-link +yes | cp -rf /tower_devel/tools/docker-compose/supervisor.conf /supervisor.conf # Tower bootstrapping make version_file @@ -35,4 +36,9 @@ mkdir -p /tower_devel/awx/public/static mkdir -p /tower_devel/awx/ui/static # Start the service -make honcho + +if [ -f "/tower_devel/tools/docker-compose/use_dev_supervisor.txt" ]; then + make supervisor +else + make honcho +fi diff --git a/tools/docker-compose/supervisor.conf b/tools/docker-compose/supervisor.conf new file mode 100644 index 0000000000..aab7d8aeb7 --- /dev/null +++ b/tools/docker-compose/supervisor.conf @@ -0,0 +1,81 @@ +[supervisord] +umask = 022 +minfds = 4096 +nodaemon=true + +[program:celeryd] +command = python manage.py celeryd -l DEBUG -B --autoreload --autoscale=20,3 --schedule=/celerybeat-schedule -Q projects,jobs,default,scheduler,broadcast_all,%(ENV_HOSTNAME)s -n celery@%(ENV_HOSTNAME)s +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[program:receiver] +command = python manage.py run_callback_receiver +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[program:runworker] +command = python manage.py runworker --only-channels websocket.* +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[program:uwsgi] +command = make uwsgi +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[program:daphne] +command = daphne -b 0.0.0.0 -p 8051 awx.asgi:channel_layer +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[program:factcacher] +command = python manage.py run_fact_cache_receiver +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[program:nginx] +command = nginx -g "daemon off;" +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[program:flower] +command = make flower +autostart = true +autorestart = true +redirect_stderr=true +stdout_logfile=/dev/fd/1 +stdout_logfile_maxbytes=0 + +[group:tower-processes] +programs=celeryd,receiver,runworker,uwsgi,daphne,factcacher,nginx,flower +priority=5 + +[unix_http_server] +file=/tmp/supervisor.sock + +[supervisorctl] +serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface