Назад | Перейти на главную страницу

Ошибка при настройке пушки

Я слежу за этим руководство для развертывания моего проекта 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.