Erstellen eines Linux-Systemd-Dienstes zur Bereitstellung einer Django-Website mit Nginx
Veröffentlicht am
- informatik
- Programmiertools
- Linux
- Django
- Nginx

Inhaltsverzeichnis
- Zusammenfassung
- Einleitung
- Systemarchitektur
- Einrichtung der Umgebung
- Erstellen des Django-Systemd-Dienstes
- Nginx-Konfiguration
- Starten und Aktivieren des Dienstes
- Sicherheit und Berechtigungen
- Fazit
- Referenzen
1. Zusammenfassung
Dieser Artikel bietet eine vollständige Anleitung zur Bereitstellung einer Django-Webanwendung hinter einem Nginx-Server auf einem Linux-System unter Verwendung von systemd, um die Django-Anwendung als persistenten Hintergrunddienst zu verwalten. Dieser Ansatz gewährleistet einen automatischen Start, eine verbesserte Prozessüberwachung und eine bessere Protokollierungsintegration, insbesondere für produktionsreife Umgebungen.
2. Einleitung
Django ist ein hochmodernes Python-Web-Framework, das weitgehend für die schnelle Webentwicklung eingesetzt wird. Für den Produktiveinsatz ist es üblich, einen Reverse-Proxy wie Nginx vor einem WSGI-Server wie Gunicorn zu betreiben. Durch das Erstellen eines systemd-Dienstes für Django wird die Anwendung einfacher zu verwalten, robuster und kann beim Systemstart automatisch ausgeführt werden.
3. Systemarchitektur
Client ⟶ Nginx (Reverse Proxy) ⟶ Gunicorn (WSGI-Server) ⟶ Django-Anwendung
- Betriebssystem: Linux (Debian, Ubuntu usw.)
- Webserver: Nginx
- App-Server: Gunicorn
- Anwendung: Django
4. Einrichtung der Umgebung
1. Erforderliche Pakete installieren:
sudo apt update
sudo apt install python3 python3-pip python3-venv nginx
2. Django-Projekt einrichten:
mkdir ~/myproject
cd ~/myproject
python3 -m venv venv
source venv/bin/activate
pip install django gunicorn
django-admin startproject myproject .
3. Gunicorn manuell testen:
gunicorn --bind 127.0.0.1:8000 myproject.wsgi:application
5. Erstellen des Django-Systemd-Dienstes
1. Gunicorn-Dienstdatei anlegen:
sudo nano /etc/systemd/system/myproject.service
2. Die folgende Konfiguration einfügen und bearbeiten:
[Unit]
Description=Gunicorn daemon for Django project
After=network.target
[Service]
User=yourusername
Group=www-data
WorkingDirectory=/home/yourusername/myproject
ExecStart=/home/yourusername/myproject/venv/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
6. Nginx-Konfiguration
1. Neue Nginx-Konfiguration anlegen:
sudo nano /etc/nginx/sites-available/myproject
2. Den folgenden Server-Block hinzufügen:
server {
listen 80;
server_name your_domain.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/yourusername/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
3. Website aktivieren und Nginx neu starten:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
7. Starten und Aktivieren des Dienstes
Starten und aktivieren Sie den systemd-Dienst, damit er beim Systemstart automatisch geladen wird:
sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject
8. Sicherheit und Berechtigungen
- Stellen Sie sicher, dass die Dateiberechtigungen für
/run/gunicorn.sockNginx den Zugriff erlauben. - Verwenden Sie optional
ufwoder firewalld zur Portbeschränkung. - Verwenden Sie Let's Encrypt für HTTPS über Certbot:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain.com
9. Fazit
Die Bereitstellung von Django mit systemd, Gunicorn und Nginx bietet ein robustes, produktionsreifes Deployment-Muster. Diese Architektur gewährleistet:
- Einen zuverlässigen und wartungsfreundlichen Lebenszyklus des Dienstes
- Hochperformante Verarbeitung von Anfragen und Reverse-Proxying über Nginx
- Eine sichere und skalierbare Produktionsumgebung
Solche Praktiken sind unerlässlich für den professionellen Einsatz von Webdiensten in modernen Linux-basierten Hosting-Umgebungen.
Kommentare 0
Noch keine Kommentare.
Kommentar schreiben