Остановка сервиса Gunicorn под управлением супервизора с помощью docker
Я использую supervisor, nginx и gunicorn для развертывания проекта Django с помощью Docker.
Я запускаю docker-compose up
для сборки проекта и образа nginx.
Просматривая другие подобные вопросы, рекомендуется использовать абсолютный путь, например /home/ubuntu/... Но поскольку я использую контейнеры docker для запуска проекта, я копирую проект в /app с помощью COPY . /app/
. Я запутался, что писать в директории в файле супервизора.
Ниже приведена моя конфигурация супервизора.
[supervisord]
nodaemon=true
[program:gunicorn]
command=gunicorn trade_calls.wsgi:application --bind 0.0.0.0:8000
directory=/app
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/gunicorn.err.log
stdout_logfile=/var/log/gunicorn.out.log
[program:nginx]
command=nginx -g "daemon off;"
autostart=true
autorestart=true
stderr_logfile=/var/log/nginx.err.log
stdout_logfile=/var/log/nginx.out.log
Ошибка, с которой я столкнулся:
docker-compose logs -f web
web-1 | 2024-06-26 21:41:45,768 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
web-1 | 2024-06-26 21:41:45,771 INFO supervisord started with pid 1
web-1 | 2024-06-26 21:41:46,775 INFO spawned: 'gunicorn' with pid 7
web-1 | 2024-06-26 21:41:46,779 INFO spawned: 'nginx' with pid 8
web-1 | 2024-06-26 21:41:47,365 WARN exited: gunicorn (exit status 3; not expected)
web-1 | 2024-06-26 21:41:48,368 INFO spawned: 'gunicorn' with pid 11
web-1 | 2024-06-26 21:41:48,368 INFO success: nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
web-1 | 2024-06-26 21:41:50,031 INFO success: gunicorn entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
web-1 | 2024-06-26 21:41:50,031 WARN exited: gunicorn (exit status 1; not expected)
web-1 | 2024-06-26 21:41:51,034 INFO spawned: 'gunicorn' with pid 15
web-1 | 2024-06-26 21:41:51,612 WARN exited: gunicorn (exit status 3; not expected)
web-1 | 2024-06-26 21:41:52,615 INFO spawned: 'gunicorn' with pid 17
web-1 | 2024-06-26 21:41:53,181 WARN exited: gunicorn (exit status 3; not expected)
web-1 | 2024-06-26 21:41:55,185 INFO spawned: 'gunicorn' with pid 19
web-1 | 2024-06-26 21:41:55,753 WARN exited: gunicorn (exit status 3; not expected)
web-1 | 2024-06-26 21:41:58,758 INFO spawned: 'gunicorn' with pid 21
web-1 | 2024-06-26 21:41:59,320 WARN exited: gunicorn (exit status 3; not expected)
web-1 | 2024-06-26 21:42:00,321 INFO gave up: gunicorn entered FATAL state, too many start retries too quickly
Поскольку я разместил Dockerfile и другие файлы, включая supervisor conf, вне корневого проекта django.
Gunicorn не смог найти wsgi.
Пришлось указать directory=/app/trade_calls
, который является корнем проекта django.