Einführung
Django ist ein leistungsstarkes Webframework, mit dem Sie Ihre Python-Anwendung oder -Website auf den Markt bringen können. Django enthält einen vereinfachten Entwicklungsserver zum Testen Ihres Codes vor Ort, aber für alles, was auch nur geringfügig mit der Produktion zu tun hat, ist ein sicherer und leistungsfähigerer Webserver erforderlich.
In diesem Handbuch wird gezeigt, wie einige Komponenten unter CentOS 7 installiert und konfiguriert werden, um Django-Anwendungen zu unterstützen und zu bedienen. Wir werden den uWSGI-Anwendungscontainerserver für die Schnittstelle mit unseren Anwendungen konfigurieren. Wir werden dann Nginx so einrichten, dass es den Proxy für uWSGI umkehrt und uns Zugriff auf seine Sicherheits- und Leistungsfunktionen gewährt, um unsere Apps bereitzustellen.
Voraussetzungen und Ziele
Um dieses Handbuch zu vervollständigen, sollten Sie eine neue CentOS 7-Serverinstanz mit einem Nicht-Root-Benutzer mit konfigurierten "+ sudo +" - Berechtigungen haben. Informationen zum Einrichten finden Sie in unserem initial server setup guide.
Wir werden Django in zwei verschiedenen virtuellen Umgebungen installieren. Auf diese Weise können Ihre Projekte und deren Anforderungen separat behandelt werden. Wir werden zwei Beispielprojekte erstellen, damit wir die Schritte in einer Umgebung mit mehreren Projekten ausführen können.
Sobald wir unsere Anwendungen haben, werden wir den uWSGI-Anwendungsserver installieren und konfigurieren. Dies wird als Schnittstelle zu unseren Anwendungen dienen, die Client-Anforderungen über HTTP in Python-Aufrufe übersetzen, die unsere Anwendung verarbeiten kann. Wir werden dann Nginx vor uWSGI einrichten, um die Vorteile seiner hochleistungsfähigen Verbindungsbehandlungsmechanismen und seiner einfach zu implementierenden Sicherheitsfunktionen zu nutzen.
Lass uns anfangen.
Installieren und konfigurieren Sie VirtualEnv und VirtualEnvWrapper
Wir werden unsere Django-Projekte in ihrer eigenen virtuellen Umgebung installieren, um die jeweiligen Anforderungen zu isolieren. Dazu installieren wir "+ virtualenv ", mit dem virtuelle Python-Umgebungen erstellt werden können, und " virtualenvwrapper ", mit dem der " virtualenv +" - Workflow um einige Verbesserungen der Benutzerfreundlichkeit erweitert wird.
Wir werden diese beiden Komponenten mit + pip +
, dem Python-Paketmanager, installieren. Um "+ pip +" zu erhalten, müssen wir zuerst das EPEL-Repository aktivieren. Wir können dies leicht tun, indem wir Folgendes eingeben:
sudo yum install epel-release
Sobald EPEL aktiviert ist, können wir + pip +
installieren, indem wir Folgendes eingeben:
sudo yum install python-pip
Nachdem Sie "+ pip " installiert haben, können wir " virtualenv " und " virtualenvwrapper +" global installieren, indem wir Folgendes eingeben:
sudo pip install virtualenv virtualenvwrapper
Wenn diese Komponenten installiert sind, können wir unsere Shell jetzt mit den Informationen konfigurieren, die für die Arbeit mit dem Skript "+ virtualenvwrapper " erforderlich sind. Unsere virtuellen Umgebungen werden alle in einem Verzeichnis in unserem Home-Ordner mit dem Namen " Env " abgelegt, um einen einfachen Zugriff zu ermöglichen. Dies wird durch eine Umgebungsvariable namens " WORKON_HOME +" konfiguriert. Wir können dies zu unserem Shell-Initialisierungsskript hinzufügen und das Wrapper-Skript für die virtuelle Umgebung als Quelle verwenden.
Um Ihrem Shell-Initialisierungsskript die entsprechenden Zeilen hinzuzufügen, müssen Sie die folgenden Befehle ausführen:
echo "export WORKON_HOME=~/Env" >> ~/.bashrc
echo "source /usr/bin/virtualenvwrapper.sh" >> ~/.bashrc
Versorgen Sie nun Ihr Shell-Initialisierungsskript mit einer Quelle, damit Sie diese Funktionalität in Ihrer aktuellen Sitzung verwenden können:
source ~/.bashrc
Sie sollten jetzt ein Verzeichnis mit dem Namen "+ Env +" in Ihrem Home-Ordner haben, das Informationen zur virtuellen Umgebung enthält.
Erstellen Sie Django-Projekte
Nachdem wir unsere Tools für die virtuelle Umgebung haben, werden wir zwei virtuelle Umgebungen erstellen, jeweils Django installieren und zwei Projekte starten.
Erstellen Sie das erste Projekt
Wir können auf einfache Weise eine virtuelle Umgebung erstellen, indem wir einige Befehle verwenden, die uns das Skript "+ virtualenvwrapper +" zur Verfügung stellt.
Erstellen Sie Ihre erste virtuelle Umgebung mit dem Namen Ihrer ersten Site oder Ihres ersten Projekts, indem Sie Folgendes eingeben:
mkvirtualenv
Dadurch wird eine virtuelle Umgebung erstellt, Python und "+ pip " darin installiert und die Umgebung aktiviert. Ihre Eingabeaufforderung ändert sich und zeigt an, dass Sie jetzt in Ihrer neuen virtuellen Umgebung arbeiten. Es sieht ungefähr so aus: ` () @: ~ $ `. Der Wert in Klammern ist der Name Ihrer virtuellen Umgebung. Jegliche über " pip +" installierte Software wird nun in der virtuellen Umgebung anstatt auf dem globalen System installiert. Dies ermöglicht es uns, unsere Pakete auf Projektbasis zu isolieren.
Unser erster Schritt wird sein, Django selbst zu installieren. Wir können dazu "+ pip" ohne "+ sudo" verwenden, da wir dies lokal in unserer virtuellen Umgebung installieren:
pip install django
Mit Django können wir unser erstes Beispielprojekt erstellen, indem wir Folgendes eingeben:
cd ~
django-admin.py startproject
Dadurch wird ein Verzeichnis mit dem Namen "++" in Ihrem Ausgangsverzeichnis erstellt. Darin befindet sich ein Verwaltungsskript, mit dem verschiedene Aspekte des Projekts behandelt werden, und ein anderes Verzeichnis mit demselben Namen, in dem der eigentliche Projektcode gespeichert ist.
Wechseln Sie in das Verzeichnis der ersten Ebene, damit Sie mit dem Einrichten der Mindestanforderungen für unser Beispielprojekt beginnen können.
cd ~/
Beginnen Sie mit der Migration der Datenbank, um die von unserem Projekt verwendete SQLite-Datenbank zu initialisieren. Sie können auf Wunsch eine alternative Datenbank für Ihre Anwendung einrichten. Dies liegt jedoch außerhalb des Geltungsbereichs dieses Handbuchs:
./manage.py migrate
Sie sollten jetzt eine Datenbankdatei mit dem Namen "+ db.sqlite3 +" in Ihrem Projektverzeichnis haben. Jetzt können wir einen Administrator erstellen, indem wir Folgendes eingeben:
./manage.py createsuperuser
Sie müssen einen Benutzernamen auswählen, eine Kontakt-E-Mail-Adresse angeben und anschließend ein Passwort auswählen und bestätigen.
Öffnen Sie als Nächstes die Einstellungsdatei für das Projekt mit Ihrem Texteditor:
nano /settings.py
Da wir Nginx für die Bereitstellung unserer Site einrichten, müssen wir ein Verzeichnis konfigurieren, in dem die statischen Ressourcen unserer Site gespeichert werden. Auf diese Weise kann Nginx diese direkt bedienen, was sich positiv auf die Leistung auswirkt. Wir werden Django anweisen, diese in einem Verzeichnis mit dem Namen "+ static +" im Basisverzeichnis unseres Projekts abzulegen. Fügen Sie diese Zeile am Ende der Datei hinzu, um dieses Verhalten zu konfigurieren:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Sammeln Sie nun die statischen Elemente unserer Website und platzieren Sie sie in diesem Verzeichnis, indem Sie Folgendes eingeben:
./manage.py collectstatic
Sie können "yes" eingeben, um die Aktion zu bestätigen und den statischen Inhalt zu erfassen. Es wird ein neues Verzeichnis mit dem Namen "+ static +" in Ihrem Projektverzeichnis geben.
Mit all dem können wir unser Projekt testen, indem wir den Entwicklungsserver vorübergehend starten. Art:
./manage.py runserver 0.0.0.0:8080
Dadurch wird der Entwicklungsserver an Port "+ 8080 " gestartet. Besuchen Sie den Domainnamen oder die IP-Adresse Ihres Servers, gefolgt von " 8080 +" in Ihrem Browser:
http://:8080
Sie sollten eine Seite sehen, die so aussieht:
image: https://assets.digitalocean.com/articles/django_uwsgi_nginx_1404/sample_site.png [Django-Beispielsite]
Fügen Sie "+ / admin +" am Ende der URL in der Adressleiste Ihres Browsers ein und Sie werden zur Anmeldeseite des Administrators weitergeleitet:
Bild: https://assets.digitalocean.com/articles/django_uwsgi_nginx_1404/admin_login.png [Django-Administratoranmeldung]
Melden Sie sich mit den Administratoranmeldeinformationen, die Sie mit dem Befehl "+ createduperuser +" ausgewählt haben, beim Server an. Sie haben dann Zugriff auf die Administrationsoberfläche:
Bild: https://assets.digitalocean.com/articles/django_uwsgi_nginx_1404/admin_interface.png [Django-Administrationsoberfläche]
Beenden Sie nach dem Testen dieser Funktion den Entwicklungsserver, indem Sie STRG-C in Ihr Terminal eingeben. Wir können jetzt mit unserem zweiten Projekt fortfahren.
Erstellen Sie das zweite Projekt
Das zweite Projekt wird genauso wie das erste erstellt. Wir werden die Erklärung in diesem Abschnitt abkürzen, da Sie dies bereits einmal ausgeführt haben.
Wechseln Sie zurück in Ihr Ausgangsverzeichnis und erstellen Sie eine zweite virtuelle Umgebung für Ihr neues Projekt. Installieren Sie Django in dieser neuen Umgebung, sobald es aktiviert ist:
cd ~
mkvirtualenv
pip install django
Die neue Umgebung wird erstellt und in geändert, wobei Ihre vorherige virtuelle Umgebung verlassen wird. Diese Django-Instanz ist völlig unabhängig von der anderen, die Sie konfiguriert haben. Auf diese Weise können Sie sie unabhängig verwalten und bei Bedarf anpassen.
Erstellen Sie das zweite Projekt und verschieben Sie es in das Projektverzeichnis:
django-admin.py startproject
cd ~/
Initialisieren Sie die Datenbank und erstellen Sie einen Administrator:
./manage.py migrate
./manage.py createsuperuser
Öffnen Sie die Einstellungsdatei:
nano /settings.py
Fügen Sie den Speicherort für die statischen Dateien wie im vorherigen Projekt hinzu:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
Speichern und schließen Sie die Datei. Sammeln Sie nun die statischen Elemente in diesem Verzeichnis, indem Sie Folgendes eingeben:
./manage.py collectstatic
Starten Sie abschließend den Entwicklungsserver, um die Site zu testen:
./manage.py runserver 0.0.0.0:8080
Sie sollten die reguläre Site unter folgender Adresse überprüfen:
http://:8080
Melden Sie sich auch auf der Admin-Site an:
http://:8080/admin
Wenn Sie bestätigt haben, dass alles wie erwartet funktioniert, geben Sie STRG-C in Ihr Terminal ein, um den Entwicklungsserver zu stoppen.
Sichern aus der virtuellen Umgebung
Da wir nun mit dem Django-Teil des Handbuchs fertig sind, können wir unsere zweite virtuelle Umgebung deaktivieren:
deactivate
Wenn Sie erneut an einer Ihrer Django-Sites arbeiten müssen, sollten Sie deren jeweilige Umgebungen reaktivieren. Sie können dies mit dem Befehl + workon +
tun:
workon
Or:
workon
Deaktivieren Sie erneut, wenn Sie mit der Arbeit an Ihren Websites fertig sind:
deactivate
Einrichten des uWSGI-Anwendungsservers
Nachdem wir zwei Django-Projekte eingerichtet und einsatzbereit haben, können wir uWSGI konfigurieren. uWSGI ist ein Anwendungsserver, der über eine Standardschnittstelle namens WSGI mit Anwendungen kommunizieren kann. Weitere Informationen hierzu finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-set-up-uwsgi-and-nginx-to-serve-python-apps-on-ubuntu-14-04 # Definitionen und Konzepte [dieser Abschnitt] unseres Handbuchs zum Einrichten von uWSGI und Nginx unter Ubuntu 14.04.
UWSGI installieren
Im Gegensatz zu der oben verlinkten Anleitung installieren wir in diesem Lernprogramm uWSGI global. Dies führt zu weniger Reibungsverlusten bei der Bearbeitung mehrerer Django-Projekte. Bevor wir uWSGI installieren können, benötigen wir die Python-Entwicklungsdateien, auf die sich die Software stützt. Wir brauchen auch einen Compiler. Wir können beides mit + yum +
bekommen:
sudo yum install python-devel gcc
Nachdem die Entwicklungsdateien verfügbar sind, können wir uWSGI global über "+ pip +" installieren, indem wir Folgendes eingeben:
sudo pip install uwsgi
Wir können diesen Anwendungsserver schnell testen, indem wir ihm die Informationen für eine unserer Sites übergeben. Zum Beispiel können wir sagen, dass es unserem ersten Projekt dienen soll, indem wir Folgendes eingeben:
uwsgi --http :8080 --home /home//Env/ --chdir /home// -w .wsgi
Hier haben wir uWSGI angewiesen, unsere virtuelle Umgebung in unserem Verzeichnis "+ ~ / Env " zu verwenden, in das Verzeichnis unseres Projekts zu wechseln und die in unserem inneren Verzeichnis "+" gespeicherte Datei "+ wsgi.py " zu verwenden die Datei zu dienen. Zu unserer Demonstration haben wir ihn angewiesen, HTTP auf dem Port " 8080 " bereitzustellen. Wenn Sie in Ihrem Browser den Domain-Namen oder die IP-Adresse des Servers aufrufen, gefolgt von ": 8080 ", wird Ihre Site erneut angezeigt (die statischen Elemente in der " / admin +" - Oberfläche funktionieren noch nicht). Wenn Sie mit dem Testen dieser Funktionalität fertig sind, geben Sie im Terminal STRG-C ein.
Konfigurationsdateien erstellen
Das Ausführen von uWSGI über die Befehlszeile ist zum Testen hilfreich, für eine tatsächliche Bereitstellung jedoch nicht besonders hilfreich. Stattdessen führen wir uWSGI im „Emperor-Modus“ aus, der es einem Master-Prozess ermöglicht, separate Anwendungen automatisch anhand einer Reihe von Konfigurationsdateien zu verwalten.
Erstellen Sie ein Verzeichnis, in dem Ihre Konfigurationsdateien gespeichert werden. Da dies ein globaler Prozess ist, erstellen wir ein Verzeichnis mit dem Namen "+ / etc / uwsgi / sites", in dem Ihre Konfigurationsdateien gespeichert werden. Wechseln Sie in das Verzeichnis, nachdem Sie es erstellt haben:
sudo mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites
In diesem Verzeichnis werden wir unsere Konfigurationsdateien ablegen. Für jedes von uns betreute Projekt benötigen wir eine Konfigurationsdatei. Der uWSGI-Prozess kann Konfigurationsdateien in einer Vielzahl von Formaten verarbeiten, wir werden jedoch aufgrund ihrer Einfachheit "+ .ini +" - Dateien verwenden.
Erstellen Sie eine Datei für Ihr erstes Projekt und öffnen Sie sie in Ihrem Texteditor:
sudo nano .ini
Im Inneren müssen wir mit der Abschnittsüberschrift "+ [uwsgi] " beginnen. Alle unsere Informationen werden unter dieser Überschrift angezeigt. Wir werden auch Variablen verwenden, um die Wiederverwendbarkeit unserer Konfigurationsdatei zu verbessern. Setzen Sie nach dem Header eine Variable mit dem Namen " project " und dem Namen Ihres ersten Projekts. Setzen Sie eine andere Variable mit Ihrem normalen Benutzernamen, der die Projektdateien besitzt. Fügen Sie eine Variable mit dem Namen " base +" hinzu, die Ihren Benutzernamen verwendet, um den Pfad zum Ausgangsverzeichnis Ihres Benutzers festzulegen:
[uwsgi]
project =
username =
base = /home/%(username)
Als nächstes müssen wir uWSGI so konfigurieren, dass es unser Projekt korrekt handhabt. Wir müssen in das Root-Projektverzeichnis wechseln, indem wir die Option + chdir +
setzen. Wir können die zuvor festgelegte Einstellung für das Basisverzeichnis und den Projektnamen mithilfe der Syntax +% () +
kombinieren. Dies wird durch den Wert der Variablen ersetzt, wenn die Konfiguration gelesen wird.
In ähnlicher Weise geben wir die virtuelle Umgebung für unser Projekt an. Durch Einstellen des Moduls können wir genau angeben, wie die Schnittstelle zu unserem Projekt hergestellt werden soll (durch Importieren der "Anwendung", die aus der Datei "+ wsgi.py +" in unserem Projektverzeichnis aufgerufen werden kann). Die Konfiguration dieser Elemente sieht folgendermaßen aus:
[uwsgi]
project =
username =
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
Wir wollen einen Masterprozess mit 5 Arbeitern erstellen. Wir können dies tun, indem wir Folgendes hinzufügen:
[uwsgi]
project =
username =
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
Als nächstes müssen wir festlegen, wie uWSGI auf Verbindungen wartet. In unserem Test von uWSGI verwendeten wir HTTP und einen Netzwerkport. Da wir Nginx jedoch als Reverse-Proxy verwenden werden, haben wir bessere Optionen.
Anstatt einen Netzwerkport zu verwenden, können wir einen Unix-Socket verwenden, da alle Komponenten auf einem einzelnen Server ausgeführt werden. Dies ist sicherer und bietet eine bessere Leistung. Dieser Socket verwendet kein HTTP, sondern implementiert stattdessen das uWSGI-Protokoll "+ uwsgi ", ein schnelles Binärprotokoll für die Kommunikation mit anderen Servern. Nginx kann nativ Proxys mit dem " uwsgi +" - Protokoll erstellen, daher ist dies unsere beste Wahl.
Wir müssen den Benutzer festlegen, der den Prozess ausführen wird. Wir werden auch die Berechtigungen und den Besitz des Sockets ändern, da wir dem Webserver Schreibzugriff gewähren. Der Socket selbst wird im Verzeichnis "+ / run / uwsgi " abgelegt (wir erstellen dieses Verzeichnis in Kürze), in dem sowohl uWSGI als auch Nginx darauf zugreifen können. Wir setzen die Option " vacuum +", damit die Socket-Datei automatisch bereinigt wird, wenn der Dienst beendet wird:
[uwsgi]
project =
username =
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 660
vacuum = true
Damit ist die uWSGI-Konfiguration unseres ersten Projekts abgeschlossen. Speichern und schließen Sie die Datei.
Das Einrichten der Datei mit Variablen hat den Vorteil, dass die Wiederverwendung unglaublich einfach ist. Kopieren Sie die Konfigurationsdatei Ihres ersten Projekts, um sie als Grundlage für Ihre zweite Konfigurationsdatei zu verwenden:
sudo cp /etc/uwsgi/sites/.ini /etc/uwsgi/sites/.ini
Öffnen Sie die zweite Konfigurationsdatei mit Ihrem Texteditor:
sudo nano /etc/uwsgi/sites/.ini
Wir müssen nur einen einzelnen Wert in dieser Datei ändern, damit es für unser zweites Projekt funktioniert. Ändern Sie die Variable "+ project +" mit dem Namen, den Sie für Ihr zweites Projekt verwendet haben:
[uwsgi]
project =
username =
base = /home/%(username)
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 660
vacuum = true
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Ihr zweites Projekt sollte jetzt fertig sein.
Erstellen Sie eine Systemd Unit-Datei für uWSGI
Wir haben jetzt die Konfigurationsdateien, die wir für unsere Django-Projekte benötigen, aber wir haben den Prozess noch nicht automatisiert. Als Nächstes erstellen wir eine Systemd-Unit-Datei, um uWSGI beim Booten automatisch zu starten.
Wir erstellen die Unit-Datei im Verzeichnis "+ / etc / systemd / system ", in dem vom Benutzer erstellte Unit-Dateien gespeichert werden. Wir rufen Ihre Datei " uwsgi.service" auf:
sudo nano /etc/systemd/system/uwsgi.service
Beginnen Sie mit dem Abschnitt "+ [Unit] +", in dem Metadaten angegeben werden. Hier geben wir einfach eine Beschreibung unseres Service:
[Unit]
Description=uWSGI Emperor service
Als nächstes öffnen wir den Abschnitt "+ [Service] ". Wir werden die Direktive " ExecStartPre " verwenden, um die Teile einzurichten, die wir zum Ausführen unseres Servers benötigen. Dadurch wird sichergestellt, dass das Verzeichnis " / run / uwsgi " erstellt wird und dass es unserem normalen Benutzer mit der Nginx-Gruppe als Gruppeneigentümer gehört. Beide ` mkdir ` mit dem ` -p ` Flag und dem ` chown +` Befehl geben erfolgreich zurück, auch wenn sie bereits existieren. Das wollen wir.
Für den eigentlichen Startbefehl, der in der Direktive "+ ExecStart " angegeben ist, verweisen wir auf die ausführbare Datei " uwsgi ". Wir werden es anweisen, im "Emperor-Modus" zu laufen, damit es mehrere Anwendungen mit den Dateien verwalten kann, die es in " / etc / uwsgi / sites +" findet. Wir werden auch die Teile hinzufügen, die Systemd benötigt, um den Prozess korrekt zu verwalten. Diese stammen aus der uWSGI-Dokumentation here:
[Unit]
Description=uWSGI Emperor service
[Service]
ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown :nginx /run/uwsgi'
ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
Jetzt müssen wir nur noch den Abschnitt + [Install] +
hinzufügen. Auf diese Weise können wir festlegen, wann der Dienst automatisch gestartet werden soll. Wir werden unseren Service an den Multi-User-Systemstatus binden. Immer wenn das System für mehrere Benutzer eingerichtet ist (normaler Betriebszustand), wird unser Service aktiviert:
[Unit]
Description=uWSGI Emperor service
[Service]
ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown :nginx /run/uwsgi'
ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]
WantedBy=multi-user.target
Wenn Sie damit fertig sind, speichern und schließen Sie die Datei.
Der Dienst kann zu diesem Zeitpunkt nicht erfolgreich gestartet werden, da der Benutzer "+ nginx +" verfügbar ist. Wir müssen warten, bis der uWSGI-Dienst nach der Installation von Nginx gestartet wird.
Installieren und konfigurieren Sie Nginx als Reverse Proxy
Nachdem uWSGI konfiguriert und einsatzbereit ist, können wir jetzt Nginx als unseren Reverse-Proxy installieren und konfigurieren. Dies kann mit + yum +
heruntergeladen und installiert werden:
sudo yum install nginx
Sobald Nginx installiert ist, können wir die Hauptkonfigurationsdatei bearbeiten:
sudo nano /etc/nginx/nginx.conf
In dieser Datei erstellen wir neben dem vorhandenen Serverblock einen zusätzlichen Serverblock für jede unserer Sites:
http {
. . .
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
server_name localhost;
. . .
Die von uns erstellten Blöcke enthalten die Konfiguration für unsere uWSGI-Sites. Wir werden uns jetzt mit den Anweisungen befassen, die wir im ersten Serverblock benötigen.
Zuerst müssen wir dem Serverblock mitteilen, auf welche Portnummer und welchen Domainnamen er antworten soll. Wir gehen davon aus, dass Sie für jede Ihrer Websites einen Domainnamen haben:
server {
listen 80;
server_name .com www..com;
}
Als Nächstes werden wir Nginx mitteilen, dass wir uns keine Sorgen über ein fehlendes Favicon machen müssen. Anschließend geben wir das Verzeichnis an, in dem die statischen Ressourcen unserer ersten Site erfasst wurden, als diese Dateien angefordert wurden. Nginx kann sie direkt aus diesem Verzeichnis an den Client übergeben:
server {
listen 80;
server_name .com www..com;
location = favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home//firstsite;
}
}
Als Nächstes erstellen wir einen Catch-All-Location-Block, der alle zusätzlichen Abfragen direkt an uWSGI weiterleitet. Wir werden die in der Datei "+ / etc / nginx / uwsgi_params " enthaltenen " uwsgi +" -Parameter einbeziehen und den Datenverkehr an den vom uWSGI-Server eingerichteten Socket übergeben:
server {
listen 80;
server_name .com www..com;
location = favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home//firstsite;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/firstsite.sock;
}
}
Damit ist unser erster Serverblock fertig.
Der zweite Serverblock für unsere andere Site ist fast derselbe. Sie können den soeben erstellten Serverblock kopieren und einfügen, um loszulegen. Sie müssen den Domänennamen, auf den die Site antworten soll, den Speicherort der statischen Dateien der Site und die Socket-Datei der Site ändern:
server {
listen 80;
server_name .com www..com;
location = favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home//;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/.sock;
}
}
Wenn Sie mit diesem Schritt fertig sind, speichern und schließen Sie die Datei.
Überprüfen Sie die Syntax der Nginx-Datei, um sicherzustellen, dass Sie keine Fehler haben:
sudo nginx -t
Wenn keine Fehler gemeldet werden, befindet sich unsere Datei in gutem Zustand.
Wir haben eine zusätzliche Aufgabe zu erledigen, damit unsere Websites ordnungsgemäß funktionieren. Da Nginx die statischen Dateien direkt verarbeitet, muss es auf die entsprechenden Verzeichnisse zugreifen können. Wir müssen ihm ausführbare Berechtigungen für unser Home-Verzeichnis geben. Dies ist das einzige fehlende Berechtigungsbit.
Der sicherste Weg, dies zu tun, ist das Hinzufügen des Nginx-Benutzers zu unserer eigenen Benutzergruppe. Anschließend können wir den Gruppenbesitzern unseres Ausgangsverzeichnisses die ausführbare Berechtigung hinzufügen, sodass Nginx gerade genug Zugriff hat, um die Dateien bereitzustellen:
sudo usermod -a -G nginx
chmod 710 /home/
Jetzt können wir den Nginx-Server und den uWSGI-Prozess starten:
sudo systemctl start nginx
sudo systemctl start uwsgi
Sie sollten nun in der Lage sein, Ihre beiden Projekte zu erreichen, indem Sie zu ihren jeweiligen Domain-Namen gehen. Sowohl die öffentliche als auch die Verwaltungsschnittstelle sollten wie erwartet funktionieren.
Wenn dies gut funktioniert, können Sie beide Dienste so konfigurieren, dass sie beim Booten automatisch gestartet werden, indem Sie Folgendes eingeben:
sudo systemctl enable nginx
sudo systemctl enable uwsgi
Fazit
In diesem Handbuch haben wir zwei Django-Projekte in jeweils eigenen virtuellen Umgebungen eingerichtet. Wir haben uWSGI so konfiguriert, dass jedes Projekt unabhängig von der jeweils konfigurierten virtuellen Umgebung bereitgestellt wird. Anschließend haben wir Nginx so eingerichtet, dass es als Reverse-Proxy für die Verarbeitung von Clientverbindungen fungiert und je nach Clientanforderung das richtige Projekt bereitstellt.
Django vereinfacht das Erstellen von Projekten und Anwendungen, indem es viele der gemeinsamen Elemente bereitstellt, sodass Sie sich auf die einzigartigen Elemente konzentrieren können. Indem Sie die in diesem Artikel beschriebene allgemeine Toolkette nutzen, können Sie die von Ihnen erstellten Anwendungen problemlos von einem einzelnen Server aus bereitstellen.