Gefolgtdieses Tutorial, ich konnte Django, Gunicorn und nginx einrichteninnerhalb einer virtuellen Umgebungauf einer AWS EC2-Instanz (mit Ubuntu 16.04) und fahren Sie dann mit der Erstellung einer Upstart-Datei fort, um das Ganze zu „daemonisieren“.
Nachdem ich die virtuelle Umgebung aktiviert hatte, habe ich Folgendes überprüft:
- Django funktioniert- Ich konnte über Port 8000 auf mein Django-Projekt zugreifen, indem ich Folgendes ausführte:
./manage.py runserver 0.0.0.0:8000
Bei meinem Besuch mydomain.com:8000
wurde ich von der Standard-Django-Seite begrüßt.
- Gunicorn funktioniert und kann die Django-App bedienen– Ich konnte auf meine Django-App zugreifen, indem ich dies aus dem Ordner meines Projekts ausführte (ersetzen Sie es
projectname
durch meinen tatsächlichen Projektnamen):
gunicorn --bind 0.0.0.0:8000 projectname.wsgi:application
Bei meinem mydomain.com:8000
nächsten Besuch wurde ich wieder von der Willkommensseite begrüßt und als ich /admin
am Ende der URL anfügte, konnte ich den Anmeldebildschirm sehenMinusdas CSS (weil Gunicorn die statischen CSS-Dateien nicht kennt, was laut Tutorial vorerst in Ordnung ist).
Von hier aus habe ich mit der Erstellung der folgenden systemd-Datei begonnen (wobei masterfolder
verwendet wird, um den Ordner anzuzeigen, in dem die gesamte Aktion stattfindet; dies myuser
ist mein Systembenutzer ( ubuntu
, da dies eine Ubuntu-Instanz ist):
[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`
Ich bin auf zwei Probleme gestoßen:
- Es wird kein Socket erstellt- beim Überprüfen der Nginx-Protokolldateienaußen wie innenin der virtuellen Umgebung (ich bin mir übrigens nicht ganz sicher, warum sie gleich sind) habe ich den gleichen Fehler gesehen:
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
Beachten Sie nun, dass dies masterfolder
mit der Ordnerhierarchie übereinstimmt, django-admin
die erstellt wird, wenn ich Folgendes ausführe startproject
:
masterfolder/ ├── manage.py └── projectname ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
Wenn man hineinschaut, masterfolder
gibt es tatsächlichüberhaupt keine .sock-Datei, ganz zu schweigen von einem mit dem Namen projectname.sock
.
- Daher wirft nginx trotz der Tatsache, dass es funktioniert, einen 502-
So etc/nginx/sites-availabe/projectname
sieht meine Datei aus:
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;
}
}
Es ist natürlich korrekt als symbolischer Link verknüpft und nach jeder Änderung, die ich vornehme, um das Problem zu beheben, führe ich Folgendes aus:
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx
Ich habe das Gefühl, dass mir hier etwas Grundlegendes fehlt, wenn es darum geht, wie diese gesamte Infrastruktur zusammenarbeitet. Sie können mich natürlich gerne auf Fehler in meinem Verständnis des Prozesses hinweisen.
Antwort1
Haben Sie die Berechtigungen des masterfolder
Verzeichnisses überprüft?
Die Berechtigungen sollten sein myuser:www-data
.
Außerdem ist in Ihrer Nginx-Konfigurationsdatei ein Rechtschreibfehler. Ich hoffe, das ist ein Tippfehler:)