502 Bad Gateway Nginx + Flask + Gunicorn (2: нет такого файла или каталога)

Я пытаюсь подключить свое приложение Flask к Nginx и Gunicorn на основе этого руководства: Как обслуживать приложения Flask с помощью Gunicorn и Nginx в Ubuntu 14.04.

Я получаю ошибку 502 Bad Gateway var / log / nginx

2017/10/16 21:17:04 [crit] 11284#0: *8 connect() to unix:/home/myproject/myproject.sock failed (2: No such file or directory) while connecting to upstream, client: <myIP>, server: <myIP>, request: "GET / HTTP/1.1", upstream: "http://unix:/home/myproject/myproject.sock:/", host: "<myIP>"

Похоже, что Nginx не смог найти файл myproject.sock, и я не знаю, почему мой сценарий выскочки не создал его на основе учебника. Любое руководство приветствуется.

Ниже мои файлы:

/home/myproject/myproject.py

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    application.run(host='0.0.0.0')

/home/myproject/wsgi.py

from myproject import application

if __name__ == "__main__":
    application.run()

/etc/init/myproject.conf

примечание: я выполнил команду cd и exec в файле ниже в целях тестирования, и она отлично работает.

description "Gunicorn application server running myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid www-data
setgid www-data

script
        cd /home/myproject
        exec gunicorn --bind unix:myproject.sock -m 007 wsgi
end script

/ etc / nginx / sites-available - это символическая ссылка на сайты с поддержкой

server {
    listen 80;
    server_name <myIPaddressHere>;
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/myproject/myproject.sock;
    }
}

Я предпринял шаги по отладке:

(1) Я проверил, что скрипт выскочки запущен

$ sudo status myproject
myproject start/running, process 22476

(2) Nginx запущен

(3) Странно, я не вижу свой myproject.sock

# netstat -lpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11279/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1304/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      11279/nginx
tcp6       0      0 :::22                   :::*                    LISTEN      1304/sshd
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     SEQPACKET  LISTENING     7190     386/systemd-udevd   /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     8774     1120/acpid          /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     6541     1/init              @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     8339     859/dbus-daemon     /var/run/dbus/system_bus_socket

person LLL    schedule 16.10.2017    source источник
comment
Глядя на комментарии на странице документа, похоже, что небольшое изменение в строке запуска gunicorn помогло некоторым людям: exec gunicorn --bind unix:myproject.sock -m 007 wsgi:app   -  person gammazero    schedule 17.10.2017


Ответы (1)


[Решено] Мой наставник указал на это.
www-data / www-data не может писать на /home/myproject/

Либо напишите в tmp, либо выберите пользователя / группу с дополнительными разрешениями.

Я решил написать /tmp

description "Gunicorn application server running myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid www-data
setgid www-data

script
        cd /home/myproject
        exec gunicorn --bind unix:/tmp/myproject.sock -m 007 wsgi
end script

А файл Nginx выглядит так:

server {
    listen 80;
    server_name <ip>;
    location / {
        include proxy_params;
        proxy_pass http://unix:/tmp/myproject.sock;
    }
}
person LLL    schedule 17.10.2017
comment
нашел это в 2020 году, следуя аналогичному руководству ›digitalocean.com/community/tutorials/ и digitalocean.com/community/tutorials/ попробовал аналогичные инструкции по настройке для blah.sock, не видя .sock сгенерирован, удалось заставить это работать под uswgi (не работает под gunicorn) файл конфигурации .service имеет ExecStart = / home / ubuntu / .virtualenvs / bmtenv / bin / gunicorn --workers 3 --bind unix: / tmp /basic_server.sock -m 007 wsgi: приложение - person CodingMatters; 16.10.2020