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:
- 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:8000
fui recebido pela página padrão do Django.
- Gunicorn funciona e é capaz de servir o aplicativo Django- Consegui acessar meu aplicativo Django executando-o na pasta do meu projeto (substitua
projectname
pelo nome real do meu projeto):
gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application
Ao visitar mydomain.com:8000
desta vez fui saudado novamente pela página de boas-vindas, e ao anexar /admin
ao 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:
- 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-admin
criada 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
.
- Portanto, apesar do nginx funcionar, ele gera um erro 502-
Esta é a etc/nginx/sites-availabe/projectname
aparê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 masterfolder
diretó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 :)