Die erstmalige Bereitstellung von Django in einer Produktionsumgebung kann eine entmutigende Aufgabe sein. Entwickler starten oft eine Linux-Instanz in der Cloud für ihre Produktionsumgebung.
In diesem Tutorial zeigen wir Ihnen, wie Sie Django in der Produktion mit einer neuen Ubuntu-Instanz starten.
Wir gehen davon aus, dass Ihre gesamte Bearbeitung auf dem Server erfolgt und Sie die Befehle als root ausführen.
Für dieses Tutorial verwenden wir Ubuntu 18.04.2 LTS
Erstellen eines Benutzers für das Projekt
Wir erstellen einen neuen Nutzer, django, zum Ausführen unserer Anwendung. Dies bietet einen kleinen Sicherheitsvorteil.
So erstellen Sie den neuen Benutzer:
useradd -m djangoDas -m flagge
erstellt ein neues Home-Verzeichnis: /home/django.
Einrichten der Python-Umgebung
Das Wichtigste zuerst: Aktualisieren Sie Ihre Paketlisten mit apt-get-Update
Ubuntu 18.04 wird mit Python 3 ausgeliefert.6, aber es wird nicht mit pip ausgeliefert, das Sie benötigen, um Ihre Abhängigkeiten zu installieren.
apt-get install python3-pipJetzt, da wir pip haben, erstellen wir eine virtuelle Umgebung. Virtuelle Umgebungen helfen, Konflikte mit von Linux verwendeten Python-Paketen zu vermeiden.
pip3 installiere virtualenvcd /home/django
virtuelle Umgebung
Jetzt haben Sie ein virtuelles Python 3 erstellt.6 Umgebung in der /home/django/env
Ordner, der mit dem folgenden Befehl aktiviert werden kann: Jetzt, da wir pip haben, erstellen wir eine virtuelle Umgebung. Virtuelle Umgebungen helfen, Konflikte mit von Linux verwendeten Python-Paketen zu vermeiden.
Das Django-Projekt einrichten
Für dieses Tutorial erstellen wir ein temporäres Django-Projekt. Wenn Sie Ihren eigenen Code bereitstellen, müssen Sie ihn stattdessen auf den Server hochladen. Wir arbeiten im Home-Verzeichnis /home/django.Das Django-Projekt einrichten
Lassen Sie uns das Django-Projekt erstellen:
cd /home/djangosource env/bin/activate
pip install django
django-admin startproject Tutorial
Überprüfen Sie, ob die Dinge funktionieren, indem Sie Folgendes ausführen:
CD-TutorialPython verwalten.py Runserver 0server.0.0.0:80
Unsere Ubuntu-Instanz läuft mit 178.128.229.34, also verbinden wir uns mit http://178.128.229.34.Überprüfen Sie, ob die Dinge funktionieren, indem Sie Folgendes ausführen:
Sie werden wahrscheinlich so etwas sehen:
Um dies zu beheben, bearbeiten wir /home/django/tutorial/tutorial/einstellungen.py
. Finden ALLOWED_HOSTS = []
und stellen Sie es ein auf:
'178.128.229.34' # Ersetzen Sie dies durch die IP-Adresse Ihres Servers
oder der Domainname, den Sie für die Verbindung verwenden
]
Kehren wir nun zu http://178 . zurück.128.229.34:
Groß! Wir sind online!
Einrichten von PostgreSQL, der Datenbank
Django verwendet standardmäßig eine SQLite3-Datenbank. Leider erlaubt SQLite3 keine gleichzeitigen Schreibvorgänge. Wenn Ihre Website immer nur einen Benutzer hat, der Daten bearbeitet und der Rest der Besucher nur Seiten liest, dann könnte dies angemessen sein. Aber wenn mehrere Personen gleichzeitig Daten bearbeiten, möchten Sie wahrscheinlich ein anderes Backend verwenden different.
Häufige Optionen sind PostgreSQL und Mysql. Wir verwenden PostgreSQL für dieses TutorialSQL.
Beginnen Sie mit der Installation von PostgreSQL:
apt-get install postgresqlStarten Sie dann psql, eine Datenbank-Shell. Standardmäßig kann sich nur der Postgres-Nutzer mit der Datenbank verbinden, sodass wir uns zuerst als dieser Nutzer authentifizieren müssen:
su - postgrespsql
Als nächstes benötigen wir eine Datenbank und einen Benutzer, um auf diese Datenbank zuzugreifen:
Datenbank-Tutorial erstellen;Benutzer tutorial_user mit verschlüsseltem Passwort 'tutorial_password' erstellen;
Gewähren Sie alle Berechtigungen für das Datenbank-Tutorial an tutorial_user;
Geben Sie jetzt Exit ein oder drücken Sie zweimal Strg-D: einmal, um psql zu beenden, und einmal, um sich von der Postgresuser-Shell abzumelden.
Groß! Jetzt haben wir unsere Datenbank und den Benutzer eingerichtet. Lassen Sie uns überprüfen, ob wir uns in unsere Datenbank einloggen können.
Wir versuchen, eine Datenbank-Shell zu öffnen, und melden uns diesmal mit dem von uns erstellten Benutzer bei der Datenbank an, die wir erstellt haben:
psql -Ututorial_user -dtutorial -h127.0.0.1 -WGeben Sie an der Eingabeaufforderung das von uns erstellte Passwort ein: Tutorial_Passwort.
Wenn Sie eine Datenbank-Shell sehen, waren Sie erfolgreich. Wenn Sie Fehler sehen, müssen Sie zurückgehen und herausfinden, was nicht stimmt.
Verbinden von Django mit der Datenbank
Um Django mit der Datenbank zu verbinden, müssen wir zuerst den Python PostgreSQL-Adapter installieren:
pip installiere psycopg2-binaryDann lass uns aufmachen /home/django/tutorial/tutorial/einstellungen.py
und konfigurieren Sie die Verbindung.
Finden Sie Ihre aktuelle Datenbankverbindung; Wenn Sie es nicht geändert haben, könnte es etwa so aussehen:
DATENBANKEN ='Standard':
'MOTOR': 'django.db.Back-Ends.sqlite3',
'NAME': os.Pfad.join(BASE_DIR, 'db.sqlite3'),
Um eine Verbindung zu PostgreSQL herzustellen, ersetzen wir es durch Folgendes:
DATENBANKEN ='Standard':
'MOTOR': 'django.db.Back-Ends.postgresql_psycopg2',
'NAME': 'Anleitung',
'BENUTZER': 'tutorial_user',
'PASSWORT': 'tutorial_password',
'GAST': '127.0.0.1',
'HAFEN': '5432',
Testen wir die Verbindung:
cd /home/django/tutorialPython verwalten.py Runserver 0server.0.0.0:80
Sie sollten Ihre Website wieder besuchen können (für uns unter http://178.128.229.34/, aber ersetzen Sie das durch Ihre IP oder Ihren Hostnamen).
Wenn alles gut ist, können wir weitermachen.
Einrichten von nginx, dem Webserver
Wenn du rennst Python verwalten.py-Runserver
, Sie verwenden den Entwicklungsserver von Djangogo. Das ist großartig für die lokale Entwicklung, aber wie bei SQLite3 ist es nicht wirklich für die Produktion geeignet.
Übliche Optionen für Produktions-Webserver sind nginx und Apache. Für dieses Tutorial verwenden wir nginx.
Installieren Sie nginx wie folgt:
apt-get install nginxWenn jetzt alles gut funktioniert hat, sollte nginx auf Port 80 laufen. Schauen Sie sich Ihre Website an; Das solltest du sehen:
Großartig, also nginx ist einsatzbereit! Als nächstes müssen wir es konfigurieren, um mit Django zu kommunizieren. Öffnen Sie die nginx-Konfigurationsdatei unter /etc/nginx/sites-available/default. Lassen Sie uns die Datei durch Folgendes ersetzen:
Upstream-DjangoServer 127.0.0.1:8000;
Server
hören 80;
Lage /
try_files $uri @send_to_django;
Standort @send_to_django
proxy_set_header-Host $http_host;
proxy_redirect aus;
proxy_pass http://django;
Testen Sie die Konfigurationsdatei, indem Sie nginx -t . ausführen. Wenn alles in Ordnung ist, können wir neu laden, indem wir nginx -s reload ausführen.
Wenn Sie nun Ihre Website besuchen, sehen Sie Folgendes:
Wenn Sie dies sehen, bedeutet dies, dass nginx die Anfrage nicht an den Upstream-Prozess weitergeben konnte. Momentan liegt es daran, dass die Anfrage an 127 weitergeleitet wird.0.0.1:8000 aber es gibt keinen Prozess, der an dieser Adresse lauscht.
Starten wir den Django-Entwicklungsserver und versuchen Sie es erneut:
cd /home/django/tutorialPython verwalten.py-Runserver 127.0.0.1:8000
und besuche wieder deine Website. Sie sollten Ihre Django-Anwendung sehen.
Django auf Gunicorn montieren
Denken Sie daran, dass wir unseren Django-Entwicklungsserver nicht in der Produktion verwenden möchten. Stattdessen verwenden wir einen Web Server Gateway Interface (WSGI)-Server, um Django auszuführen. Nginx leitet die Anfrage an den WSGI-Server weiter, auf dem Django ausgeführt wird.
Übliche Optionen für einen WSGI-Server sind Gunicorn und uWSGI. Für dieses Tutorial verwenden wir Gunicorn.
Lassen Sie uns Gunicorn installieren:
pip installiere gunicornAls nächstes können wir gunicorn wie folgt starten:
cd /home/django/tutorialGunicorn-Tutorial.wsgi
Jetzt sollten Sie in der Lage sein, Ihre Website zu besuchen und zu sehen, dass Ihre Anwendung ordnungsgemäß ausgeführt wird.
Gunicorn als Service betreiben
Es gibt ein paar Probleme beim Ausführen von gunicorn wie folgt:
- Wenn wir die SSH-Sitzung schließen, wird der Gunicorn-Prozess gestoppt.
- Wenn der Server neu startet, startet der Gunicorn-Prozess nicht.
- Der Prozess läuft als root. Wenn Hacker einen Exploit im Code unserer App finden, können sie Befehle als root ausführen. Wir wollen das nicht; aber deshalb haben wir den djangouser erstellt!
Um diese Probleme zu lösen, werden wir Gunicorn als Systemdienst ausführen.
cd /home/djangomkdir bin
cd /home/django/bin
Start-Server berühren.Sch
Im Startserver.Sch:
cd /home/djangosource env/bin/activate
CD-Tutorial
Gunicorn-Tutorial.wsgi
Jetzt können Sie das Skript testen:
cd /home/django/binbash start-server.Sch
# Besuchen Sie Ihre Website, sie sollte laufen
Jetzt erstellen wir den Systemdienst für Gunicorn. /etc/systemd/system/gunicorn erstellen.Dienst wie folgt:
[Einheit]Description=Gunicorn
Nach=Netzwerk.Ziel
[Bedienung]
Typ=einfach
Benutzer=django
ExecStart=/home/django/bin/start-server.Sch
Neustart=bei Fehler
[Installieren]
WantedBy=Mehrbenutzer.Ziel
Jetzt aktivieren wir den Dienst und starten ihn
systemctl aktivieren gunicornsystemctl start gunicorn
Sie sollten Ihre Website im Moment sehen können.
Wir können Gunicorn wie folgt ausschalten:
systemctl stop gunicornUnd Sie sollten ein 502 Bad Gateway sehen.
Lassen Sie uns abschließend den Boot-Zyklus überprüfen:
systemctl start gunicornjetzt neustarten
Wenn Ihr Computer wieder online ist, sollten Sie sehen, dass Ihre Website aktiv ist.
Statische Dateien
Wenn Sie das Django-Admin-Panel auf Ihrer Website unter /admin/ (bei uns ist es http://178.128.229.34/admin/), werden Sie feststellen, dass statische Dateien nicht richtig geladen werden.
Wir müssen einen neuen Ordner für statische Dateien erstellen:
cd /home/djangomkdir statisch
Dann teilen wir Django mit, dass dort die statischen Dateien abgelegt werden sollen, indem wir /home/django/tutorial/tutorial/settings . bearbeiten.py, und fügt hinzu:
STATIC_ROOT = '/home/django/static/'Jetzt können wir die statischen Dateien sammeln:
cd /home/djangosource env/bin/activate
CD-Tutorial
Python verwalten.py Collectstatic
Schließlich müssen wir nginx anweisen, diese statischen Dateien bereitzustellen.
Öffnen wir /etc/nginx/sites-available/default und fügen Sie Folgendes direkt über Ihrem Standort/Block hinzu:
Standort /statisch/root /home/django;
try_files $uri =404;
Die ganze Datei sollte nun so aussehen:
Upstream-DjangoServer 127.0.0.1:8000;
Server
hören 80;
Standort /statisch/
root /home/django;
try_files $uri =404;
Lage /
try_files $uri @send_to_django;
Standort @send_to_django
proxy_set_header-Host $http_host;
proxy_redirect aus;
proxy_pass http://django;
Wir können die Datei mit nginx -s reload neu laden
Und voila! Ihre statischen Dateien funktionieren jetzt vollständig.
Fazit
Zu diesem Zeitpunkt funktioniert Ihre Django-App ordnungsgemäß. Wenn Sie spezielle Anforderungen haben, müssen Sie möglicherweise einen Cache wie Redis oder eine Nachrichtenwarteschlange wie Rabbit MQ einrichten. Möglicherweise möchten Sie auch eine kontinuierliche Bereitstellung einrichten, da das Bereitstellungsverfahren eine Weile dauern kann.
Ein weiterer wichtiger Schritt besteht darin, die entsprechenden Schritte zu unternehmen, um Ihren Ubuntu-Computer zu sichern. Andernfalls könnte sich Ihr Server schlecht benehmen server!
Viel Glück!