Ningún socket creado por Gunicorn hace que nginx arroje el error 502

Ningún socket creado por Gunicorn hace que nginx arroje el error 502

Siguienteeste tutorial, Pude configurar Django, Gunicorn y nginxdentro de un entorno virtualen una instancia AWS EC2 (que ejecuta Ubuntu 16.04) y luego proceda a crear un archivo Upstart para "daemonizar" todo.

Después de activar virtualenv, verifiqué que:

  1. Django funciona- Pude acceder a mi proyecto Django a través del puerto 8000 ejecutando lo siguiente:

./manage.py runserver 0.0.0.0:8000

Cuando visité, mydomain.com:8000la página predeterminada de Django me dio la bienvenida.

  1. Gunicorn funciona y es capaz de servir la aplicación Django- Pude acceder a mi aplicación Django ejecutando esto desde la carpeta de mi proyecto (reemplace projectnamecon el nombre real de mi proyecto):

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

Cuando visité mydomain.com:8000esta vez, fui recibido nuevamente por la página de bienvenida, y al agregarla /adminal final de la URL pude ver la pantalla de inicio de sesión.menosel CSS (porque Gunicorn no conoce los archivos CSS estáticos, lo cual está bien por ahora según el tutorial).

A partir de aquí procedí a crear el siguiente archivo systemd (cuando masterfolderse usa para mostrar la carpeta en la que se lleva a cabo toda la acción, myuseres mi usuario del sistema ( ubuntu, ya que esta es una instancia de 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`

Encontré dos problemas:

  1. No se está creando ningún socket- al comprobar los archivos de registro de nginxtanto fuera como dentroel virtualenv (no estoy del todo seguro de por qué son iguales, por cierto) vi el mismo error:

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

Ahora, tenga en cuenta que masterfolderes coherente con la jerarquía de carpetas django-adminque se crea cuando ejecuto un startproject:

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

Cuando se mira hacia adentro masterfolder, de hecho hayningún archivo .sock en absoluto, no importa uno que tenga nombre projectname.sock.

  1. Por lo tanto, a pesar de que nginx funciona, arroja un 502-

Así es como etc/nginx/sites-availabe/projectnamese ve mi archivo:

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;
    }
}

Tiene un enlace simbólico correcto, por supuesto, y después de cada cambio que hago para intentar solucionarlo, ejecuto:

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

Siento que me falta algo básico en la comprensión de cómo funciona toda esta infraestructura en conjunto. Por supuesto, siéntase libre de señalar errores en mi comprensión del proceso.

Respuesta1

¿Has comprobado los permisos del masterfolderdirectorio?

Los permisos deberían ser myuser:www-data.

También hay un error ortográfico en su archivo de configuración de nginx. Espero que sea un error tipográfico :)

información relacionada