Nenhum soquete criado pelo Gunicorn faz com que o nginx gere o erro 502

Nenhum soquete criado pelo Gunicorn faz com que o nginx gere o erro 502

Seguindoeste tutorial, consegui configurar Django, Gunicorn e nginxdentro de um virtualenvem uma instância AWS EC2 (executando o Ubuntu 16.04) e, em seguida, prossiga para criar um arquivo Upstart para "daemonizar" tudo.

Depois de ativar o virtualenv, verifiquei isso:

  1. Django funciona- Consegui acessar meu projeto Django pela porta 8000 executando o seguinte:

./manage.py runserver 0.0.0.0:8000

Ao visitar mydomain.com:8000fui recebido pela página padrão do Django.

  1. Gunicorn funciona e é capaz de servir o aplicativo Django- Consegui acessar meu aplicativo Django executando-o na pasta do meu projeto (substitua projectnamepelo nome real do meu projeto):

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

Ao visitar mydomain.com:8000desta vez fui saudado novamente pela página de boas-vindas, e ao anexar /adminao final da URL consegui ver a tela de loginmenoso CSS (porque o Gunicorn não tem conhecimento dos arquivos CSS estáticos, o que está OK por enquanto, de acordo com o tutorial).

A partir daqui comecei a criar o seguinte arquivo systemd (quando masterfolderé usado para mostrar a pasta na qual toda a ação ocorre, myuseré o meu usuário do sistema ( ubuntu, pois esta é uma instância do 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`

Encontrei dois problemas:

  1. Nenhum soquete está sendo criado- ao verificar os arquivos de log do nginxfora como dentroo virtualenv (não tenho certeza por que eles são iguais, aliás) vi o mesmo erro:

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

Agora, observe que masterfolderé consistente com a hierarquia de pastas django-admincriada quando executo um startproject:

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

Ao olhar para dentro masterfolder, há de fatonenhum arquivo .sock, não importa aquele que tenha nome projectname.sock.

  1. Portanto, apesar do nginx funcionar, ele gera um erro 502-

Esta é a etc/nginx/sites-availabe/projectnameaparência do meu arquivo:

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

O link simbólico está correto, é claro, e após cada alteração que faço para tentar corrigi-lo, executo:

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

Sinto como se estivesse faltando algo básico na compreensão de como toda essa infraestrutura funciona em conjunto. Sinta-se à vontade para apontar erros na minha compreensão do processo, é claro.

Responder1

Você verificou as permissões do masterfolderdiretório?

As permissões devem ser myuser:www-data.

Também há um erro de ortografia no arquivo de configuração do nginx. Espero que seja um erro de digitação :)

informação relacionada