[PYTHON] Der Weg, um die Verbindung zwischen Nginx, Django und Uwsgi zu bekämpfen und ein wenig zu gewinnen

Ich entschied mich ernsthaft für Django und Nginx und schaffte es schließlich zwei Wochen lang, eine Verbindung zum Server herzustellen!

Ich habe mich mit flask, wsgi und apache2 verbunden, aber ich habe Django immer gehasst. Ich habe mich jedoch für Django und Nginx entschieden, weil ich WebSocket einführen wollte.

Selbst jetzt wird es nur angezeigt, wenn ich ** "http://example.com:9000" ** eingebe, aber ich habe den Punkt erreicht, an dem uwsgi im Hintergrund gestartet wird.

Ich werde den Teil, mit dem ich zu kämpfen hatte, unten schreiben

Umgebung

Zunächst einmal ist die Installation des Nginx-Servers verwirrend

Es war gut, bis ich den Nginx-Server startete

$sudo /etc/init.d/nginx restart

Wenn ich es tippte, konnte es manchmal nicht gestartet werden. Ich habe die folgende Anzeige

[....] Restarting nginx (via systemctl): nginx.serviceJob for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.
 failed!

Dies lag an der falschen Konfigurationsdatei in ** / etc / nginx / sites-available / ** in meiner Ubuntu-Umgebung. (Zum Beispiel wurde der Port mit einem anderen Server dupliziert.)

Ich verstehe nicht, wie Uwsgi funktioniert und es ist ein großes Durcheinander

Dies war der Beginn des Leidens. Es fiel mir schwer, unter Uwsgi zu leiden. Vor allem ist es ein Versagen zu glauben, dass etwas mit Klebstoff gemacht werden kann.

Stellen Sie sich uwsgi als Middleware vor, die als Vermittler mit Einstellungen für die Verbindung von Nginx- und Django-Apps fungiert. Wie füge ich meine beschissene INI-Datei ein? Übrigens werde ich auch die Seiten vorstellen, die in uwsgi sehr hilfreich waren. (Englisch)

Dies ist die Site

Unten sind meine INI-Dateien und deren Kommentar.

# open_dashboard_uwsgi.ini file
[uwsgi]
project = open_dashboard
base = /home/user/Python #← Pfad meines Python-Projekts

chdir = %(base)/%(project)
#home = %(base)/Env/%(project)
home = %(base)/env #← Pfad meiner virtuellen Python-Umgebung
module = %(project).wsgi:application

#uid = root
uid = user #← Mein Benutzername
master = true
processes = 2

socket = %(base)/%(project)/%(project).sock #← Versuchen Sie nicht, diese Steckdose selbst herzustellen
chmod-socket = 666
vacuum = true #← Es ist sehr wichtig, dass der Socket automatisch gelöscht wird, wenn der Server abgeschaltet wird.

Auf dieser Grundlage stellen wir den Emperor-Modus ein, bei dem uwsgi im Hintergrund ausgeführt wird (eigentlich ist es ein großartiger Modus, mit dem mehrere Apps gestartet werden können), der jedoch in den meisten Fällen auf den folgenden Fehler stößt.

unix:///home/user/Python/open_dashboard/open_dashboard.sock failed (13: Permission denied)

Das ist ärgerlich, aber Sie können es lösen, indem Sie uid und gid im Kaisermodus als Benutzernamen verwenden. Auch die Protokolldatei ** sudo chown user: user /var/log/uwsgi-emperor.log ** Vergessen Sie nicht, wie einzustellen.

Stellen Sie .bashrc wie folgt ein. (/etc/rc.local scheint gut zu sein, aber vorerst die sichere)

.bashrc


/usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data --daemonize /var/log/uwsgi-emperor.log

Der *** --emperor / etc / uwsgi / vassals *** Teil des obigen Codes ist wie folgt festgelegt.

# create a directory for the vassals
sudo mkdir /etc/uwsgi
sudo mkdir /etc/uwsgi/vassals
# symlink from the default config directory to your config file
sudo ln -s /path/to/your/mysite/mysite_uwsgi.ini /etc/uwsgi/vassals/

Sie können es nicht verstehen, weil Sie es eilig haben, aber vorerst ** Damit ich mich nicht wieder verliere ** Ich habe diesen Artikel geschrieben.

[Ich habe dunkle Tage mit nur 502 Fehlern wie diesem Artikel verbracht](https://www.linode.com/community/questions/222/how-do-i-fix-this-502-bad- Gateway-Fehler-beim-Einrichten-Django-Projekt-auf-Ubuntu)

_ Als nächstes werde ich Docker herausfordern! _

Versionsgeschichte

--2019 / 12/16 Neu erstellt --2020 / 1/1 Es wurde hinzugefügt, wie uwsgi für Python3 erneut installiert und konfiguriert wird, wenn es mit Python3 ausgeführt wird

Recommended Posts

Der Weg, um die Verbindung zwischen Nginx, Django und Uwsgi zu bekämpfen und ein wenig zu gewinnen
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
Django REST Framework Ein wenig nützlich zu wissen.
So richten Sie ein VPN-Gateway ein, um eine Verbindung zwischen Alibaba Cloud und AWS herzustellen
[Django] Test zum Senden einer Datei per POST und Überprüfen des zurückgegebenen Kontexts [TDD]
Von der Einführung von Flask unter CentOS bis zum Service unter Nginx und uWSGI
Visualisierung der Verbindung zwischen Malware und dem Callback-Server
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Übergang zum Update-Bildschirm mit dem Django-Tag
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Der Weg nach Pythonista
Der Weg nach Djangoist
Was ist der Unterschied zwischen symbolischen und harten Links?
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
So generieren Sie eine Abfrage mit dem IN-Operator in Django
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
Eine grobe Zusammenfassung der Unterschiede zwischen Windows und Linux
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Weg zum Assistenten: Schritt 8 (Interpretieren, wie man ein Hacker wird)
Ich möchte Informationen von fstab am ssh-Verbindungsziel abrufen und den Befehl ausführen
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden