Nenhum socket criado por Gunicorn faz com que o nginx elimine o erro 502

3

Seguindo este tutorial , eu pude configurar Django, Gunicorn & nginx dentro de um virtualenv em uma instância do AWS EC2 (executando o Ubuntu 16.04) e, em seguida, continue a criar um arquivo Upstart para "daemonizar" a coisa toda.

Depois de ativar o virtualenv, verifiquei:

  1. O Django funciona - Eu consegui acessar meu projeto Django através da porta 8000 executando o seguinte:

./manage.py runserver 0.0.0.0:8000

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

  1. Gunicorn funciona & é capaz de servir o aplicativo Django - Eu era capaz de acessar o meu aplicativo Django, executando isso da pasta do meu projeto (substituir projectname com o nome do meu projeto real):

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

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

A partir daqui eu criei o seguinte arquivo systemd (quando masterfolder é usado para mostrar a pasta na qual toda a ação ocorre, myuser é o usuário do meu sistema ( ubuntu , já que 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'

Eu encontrei dois problemas:

  1. Nenhum socket está sendo criado - ao verificar os arquivos de log nginx fora e dentro do virtualenv (não totalmente certo porque eles são os mesmos, btw) eu 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-admin cria quando eu executo um startproject :

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

Ao olhar para dentro de masterfolder , de fato, existe nenhum arquivo .sock em todos os , não importa qual seja o nome projectname.sock .

  1. Portanto, apesar do fato de o nginx funcionar, ele lança um 502 -

É assim que meu arquivo etc/nginx/sites-availabe/projectname se parece:

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

É um link simbólico correto, é claro, e depois de cada alteração que eu faço para tentar corrigi-lo eu corro:

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

Sinto que estou sentindo falta de algo básico aqui no entendimento de como toda essa infraestrutura funciona em conjunto. Sinta-se à vontade para apontar erros na minha compreensão do processo, é claro.

    
por t0mgs 17.01.2017 / 17:13

1 resposta

3

Você verificou as permissões do diretório masterfolder ?

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

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

    
por 06.06.2017 / 09:10