diff --git a/dockerfile b/dockerfile index c86b592f..cc72454f 100644 --- a/dockerfile +++ b/dockerfile @@ -113,4 +113,8 @@ EXPOSE 8000 VOLUME [ "/data", "/etc/itsm" ] -CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD \ + supervisorctl status || exit 1 + + +CMD [ "/usr/bin/supervisord" ] diff --git a/includes/etc/supervisor/conf.d/gunicorn.conf b/includes/etc/supervisor/conf.d/gunicorn.conf new file mode 100644 index 00000000..0421c0ae --- /dev/null +++ b/includes/etc/supervisor/conf.d/gunicorn.conf @@ -0,0 +1,14 @@ +[program:gunicorn] +priority=1 +startsecs=0 +stopwaitsecs=55 +autostart=true +autorestart=true +stdout_logfile=/var/log/%(program_name)s.log +stderr_logfile=/var/log/%(program_name)s.log +directory=/app +command=gunicorn \ + --access-logfile - \ + --workers 10 \ + --bind unix:/run/gunicorn.sock \ + app.wsgi diff --git a/includes/etc/supervisor/supervisord.conf b/includes/etc/supervisor/supervisord.conf new file mode 100644 index 00000000..6da98d00 --- /dev/null +++ b/includes/etc/supervisor/supervisord.conf @@ -0,0 +1,33 @@ + +[unix_http_server] +file=/var/run/supervisor.sock ; (the path to the socket file) +chmod=0700 ; sockef file mode (default 0700) + +;[inet_http_server] +;port = :9001 +; username = user +; password = 123 + +[supervisord] +logfile=/var/log/supervisord.log +pidfile=/var/run/supervisord.pid +childlogdir=/var/log +nodaemon = true + +; 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 diff --git a/requirements_production.txt b/requirements_production.txt index f85064db..4a418fd9 100644 --- a/requirements_production.txt +++ b/requirements_production.txt @@ -6,3 +6,6 @@ psycopg2==2.9.9 # postgresql16-dev postgresql16-client libpq-dev # Production Web server gunicorn==23.0.0 + +# SupervisorD +supervisor==4.2.5