Я слежу за этим руководство для развертывания моего проекта django в Digital Ocean. Я пытаюсь настроить Gunicorn.
Структура моего проекта выглядит примерно так:
На моем settings.py
я использую DEBUG=False
Я создаю gunicorn.socket и gunicorn.service.
/etc/systemd/system/gunicorn.socket
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
/etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=someuser
Group=www-data
WorkingDirectory=/home/someuser/myproject
ExecStart=/home/someuser/myproject/myprojectenv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
Myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Запускаю и включаю сокет Gunicorn:
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket
Проверьте статус процесса, чтобы узнать, удалось ли ему запустить:
sudo systemctl status gunicorn.socket
Это то, что я получаю, а затем возвращается в командную строку.
Failed to dump process list, ignoring: No such file or directory
● gunicorn.socket - gunicorn socket
Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor preset: enabled)
Active: active (listening) since Sat 2019-05-04 23:12:03 UTC; 13s ago
Listen: /run/gunicorn.sock (Stream)
CGroup: /system.slice/gunicorn.socket
May 04 23:12:03 myproject systemd[1]: Listening on gunicorn socket.
Затем я проверяю наличие файла gunicorn.sock в каталоге / run:
file /run/gunicorn.sock
/run/gunicorn.sock: socket
Кажется, что файла или каталога не существует, но более подробной информации он не предоставляет. Gunicorn.sock, кажется, существует.
Я решил просмотреть весь учебник и посмотреть, что произойдет:
Это журнал сокета Gunicorn:
$ sudo journalctl -u gunicorn.socket
-- Logs begin at Fri 2019-05-03 21:38:51 UTC, end at Tue 2019-05-07 20:05:36 UTC. --
May 07 20:04:42 myproject systemd[1]: Listening on gunicorn socket.
Тестирование активации сокета
$ sudo systemctl status gunicorn
gunicorn.service - gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Чтобы протестировать механизм активации сокета, мы можем отправить соединение с сокетом через curl, набрав:
$ curl --unix-socket /run/gunicorn.sock localhost
запустив это, перейдя на myip: 8000, учебник говорит, что я должен видеть вывод HTML из моего приложения в терминале, чего не происходит.
Через какое-то время ничего не происходит, я вхожу в терминал:
<h1>Bad Request (400)</h1>
Чтобы убедиться, что служба Gunicorn запущена:
$ sudo systemctl status gunicorn
gunicorn.service - gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2019-05-07 20:06:15 UTC; 1min 5s ago
Main PID: 1884 (gunicorn)
Tasks: 4 (limit: 1152)
CGroup: /system.slice/gunicorn.service
1884 /home/someuser/myproject/myprojectenv/bin/python3 /home/someuser/myproject/myprojectenv/bin/gunicorn --access-
1915 /home/someuser/myproject/myprojectenv/bin/python3 /home/someuser/myproject/myprojectenv/bin/gunicorn --access-
1916 /home/someuser/myproject/myprojectenv/bin/python3 /home/someuser/myproject/myprojectenv/bin/gunicorn --access-
1917 /home/someuser/myproject/myprojectenv/bin/python3 /home/someuser/myproject/myprojectenv/bin/gunicorn --access-
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1904] [INFO] Booting worker with pid: 1904
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1905] [INFO] Booting worker with pid: 1905
May 07 20:06:46 myproject gunicorn[1884]: [2019-05-07 20:06:46 +0000] [1884] [CRITICAL] WORKER TIMEOUT (pid:1902)
May 07 20:06:46 myproject gunicorn[1884]: [2019-05-07 20:06:46 +0000] [1884] [CRITICAL] WORKER TIMEOUT (pid:1904)
May 07 20:06:46 myproject gunicorn[1884]: [2019-05-07 20:06:46 +0000] [1884] [CRITICAL] WORKER TIMEOUT (pid:1905)
May 07 20:06:47 myproject gunicorn[1884]: [2019-05-07 20:06:47 +0000] [1915] [INFO] Booting worker with pid: 1915
May 07 20:06:47 myproject gunicorn[1884]: [2019-05-07 20:06:47 +0000] [1916] [INFO] Booting worker with pid: 1916
May 07 20:06:47 myproject gunicorn[1884]: [2019-05-07 20:06:47 +0000] [1917] [INFO] Booting worker with pid: 1917
May 07 20:07:02 myproject gunicorn[1884]: - - [07/May/2019:20:07:02 +0000] "GET / HTTP/1.1" 400 26 "-" "curl/7.58.0"
May 07 20:07:10 myproject gunicorn[1884]: - - [07/May/2019:20:07:10 +0000] "GET / HTTP/1.1" 400 26 "-" "curl/7.58.0"
Проверка журналов стрельбы:
$ sudo journalctl -u gunicorn
-- Logs begin at Fri 2019-05-03 21:38:51 UTC, end at Tue 2019-05-07 20:07:58 UTC. --
May 07 20:06:15 myproject systemd[1]: Started gunicorn daemon.
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1884] [INFO] Starting gunicorn 19.9.0
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1884] [INFO] Listening at: unix:/run/gunicorn.sock (1884)
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1884] [INFO] Using worker: sync
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1902] [INFO] Booting worker with pid: 1902
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1904] [INFO] Booting worker with pid: 1904
May 07 20:06:16 myproject gunicorn[1884]: [2019-05-07 20:06:16 +0000] [1905] [INFO] Booting worker with pid: 1905
May 07 20:06:46 myproject gunicorn[1884]: [2019-05-07 20:06:46 +0000] [1884] [CRITICAL] WORKER TIMEOUT (pid:1902)
May 07 20:06:46 myproject gunicorn[1884]: [2019-05-07 20:06:46 +0000] [1884] [CRITICAL] WORKER TIMEOUT (pid:1904)
May 07 20:06:46 myproject gunicorn[1884]: [2019-05-07 20:06:46 +0000] [1884] [CRITICAL] WORKER TIMEOUT (pid:1905)
May 07 20:06:47 myproject gunicorn[1884]: [2019-05-07 20:06:47 +0000] [1915] [INFO] Booting worker with pid: 1915
May 07 20:06:47 myproject gunicorn[1884]: [2019-05-07 20:06:47 +0000] [1916] [INFO] Booting worker with pid: 1916
May 07 20:06:47 myproject gunicorn[1884]: [2019-05-07 20:06:47 +0000] [1917] [INFO] Booting worker with pid: 1917
May 07 20:07:02 myproject gunicorn[1884]: - - [07/May/2019:20:07:02 +0000] "GET / HTTP/1.1" 400 26 "-" "curl/7.58.0"
May 07 20:07:10 myproject gunicorn[1884]: - - [07/May/2019:20:07:10 +0000] "GET / HTTP/1.1" 400 26 "-" "curl/7.58.0"
После этого идет настройка nginx:
$ sudo nano /etc/nginx/sites-available/Myproject
server {
listen 80;
server_name xxx.xxx.xxx.xxx;
location = /favicon.ico { access_log off; log_not_found off; }
location /staticfiles/ {
root /home/someuser/myproject ;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Включите файл, связав его с каталогом сайтов:
$ sudo ln -s /etc/nginx/sites-available/Myproject /etc/nginx/sites-enabled
Проверьте конфигурацию Nginx на наличие синтаксических ошибок, набрав:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Если ошибок нет, перезапустите Nginx, набрав:
$ sudo systemctl restart nginx
Наконец, нам нужно открыть наш брандмауэр для обычного трафика через порт 80. Поскольку нам больше не нужен доступ к серверу разработки, мы также можем удалить правило открытия порта 8000:
$ sudo ufw delete allow 8000
Rule deleted
Rule deleted (v6)
$ sudo ufw allow 'Nginx Full'
Rule added
Rule added (v6)
Теперь вы должны иметь возможность перейти в домен или IP-адрес вашего сервера, чтобы просмотреть свое приложение.
Собирается xxx.xxx.xxx.xxx:8000
, Я понимаю, что этот сайт недоступен, слишком долго отвечал.
При всем этом у меня settings.py
, У меня есть это:
ALLOWED_HOSTS = ["xxx.xxx.xxx.xxx"] # my droplet's ip
Я знаком с Python, но не с серверами и развертыванием, поэтому я здесь в растерянности.
Несколько месяцев назад я успешно выполнил аналогичный учебник для Ubuntu 16.04, но теперь продолжаю сталкиваться с проблемами.
Кажется, появляются какие-либо странные символы, потому что я копирую и вставляю вывод из терминала PyCharm.