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

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

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

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

  1. Джанго работает- Мне удалось получить доступ к моему проекту 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

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

решение1

Вы проверили права доступа к masterfolderкаталогу?

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

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

Связанный контент