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

Никакой сокет, созданный Gunicorn, не приводит к тому, что nginx выдает ошибку 502

Следующий этот учебник, Мне удалось установить Django, Gunicorn и nginx внутри виртуального на экземпляре AWS EC2 (под управлением Ubuntu 16.04), а затем приступить к созданию файла Upstart для «демонизации» всего этого.

После активации virtualenv я проверил, что:

  1. Django работает - Мне удалось получить доступ к моему проекту Django через порт 8000, выполнив следующее:

./manage.py runserver 0.0.0.0:8000

При посещении mydomain.com:8000 Меня приветствовала страница Django по умолчанию.

  1. Gunicorn работает и может обслуживать приложение Django - Мне удалось получить доступ к моему приложению Django, запустив его из папки моего проекта (заменить projectname с моим настоящим названием проекта):

gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application

При посещении mydomain.com:8000 на этот раз меня снова встретила страница приветствия, и при добавлении /admin до конца URL-адреса я смог увидеть экран входа в систему минус CSS (поскольку Gunicorn не знает статических файлов CSS, что, согласно руководству, пока нормально).

Отсюда я приступил к созданию следующего файла systemd (когда masterfolder используется для отображения папки, в которой происходит все действие, myuser мой системный пользователь (ubuntu, поскольку это экземпляр Ubuntu):

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=myuser
Group=www-data
WorkingDirectory=/home/myuser/masterfolder
ExecStart=/home/myuser/masterfolder/myvirtualenv/bin/gunicorn --workers 3 --bind unix:/home/myuser/masterfolder/projectname.sock$

[Install]
WantedBy=multi-user.target`

Я столкнулся с двумя проблемами:

  1. Сокет не создается - при проверке логов nginx снаружи и внутри virtualenv (не совсем уверен, почему они такие же, кстати), я увидел ту же ошибку:

2017/01/17 15:12:43 [crit] 12403#12403: *3 connect() to unix:/home/myuser/masterfolder/projectname.sock failed (2: No such file or directory) while connecting to upstream

Обратите внимание, что masterfolder согласуется с иерархией папок django-admin создает, когда я запускаю startproject:

masterfolder/ ├── manage.py └── projectname ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py

Когда заглядываешь внутрь masterfolder действительно есть нет файла .sock вообще, не говоря уже о том, что называется projectname.sock.

  1. Поэтому, несмотря на то, что nginx работает, он выдает 502 -

Вот как мой etc/nginx/sites-availabe/projectname файл выглядит так:

server {
    listen 80;
    server_name www.mydomain.com mydomain.com MYIPADDRESS;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/masterfolder/projectname;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/myuser/mastefolder/projectname.sock;
    }
}

Конечно, он имеет правильную символическую ссылку, и после каждого изменения, которое я делаю, чтобы попытаться исправить, я запускаю:

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx

Я чувствую, что мне здесь не хватает чего-то базового в понимании того, как вся эта инфраструктура работает вместе. Конечно, не стесняйтесь указывать на ошибки в моем понимании этого процесса.

Вы проверили разрешения masterfolder каталог?

Разрешения должны быть myuser:www-data.

Также в вашем файле конфигурации nginx есть орфографическая ошибка. Надеюсь, это опечатка :)