Zum Hauptinhalt springen

Erstellen eines Linux-Systemd-Dienstes zur Bereitstellung einer Django-Website mit Nginx

Veröffentlicht am

  • informatik
  • Programmiertools
  • Linux
  • Django
  • Nginx

Inhaltsverzeichnis

  1. Zusammenfassung
  2. Einleitung
  3. Systemarchitektur
  4. Einrichtung der Umgebung
  5. Erstellen des Django-Systemd-Dienstes
  6. Nginx-Konfiguration
  7. Starten und Aktivieren des Dienstes
  8. Sicherheit und Berechtigungen
  9. Fazit
  10. 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:

Pakete installieren
sudo apt update
sudo apt install python3 python3-pip python3-venv nginx

2. Django-Projekt einrichten:

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 testen
gunicorn --bind 127.0.0.1:8000 myproject.wsgi:application

5. Erstellen des Django-Systemd-Dienstes

1. Gunicorn-Dienstdatei anlegen:

systemd-Dienstdatei erstellen
sudo nano /etc/systemd/system/myproject.service

2. Die folgende Konfiguration einfügen und bearbeiten:

/etc/systemd/system/myproject.service
[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:

Nginx-Konfiguration erstellen
sudo nano /etc/nginx/sites-available/myproject

2. Den folgenden Server-Block hinzufügen:

/etc/nginx/sites-available/myproject
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:

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:

Dienst starten und aktivieren
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.sock Nginx den Zugriff erlauben.
  • Verwenden Sie optional ufw oder firewalld zur Portbeschränkung.
  • Verwenden Sie Let's Encrypt für HTTPS über Certbot:
SSL mit Certbot einrichten
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.

10. Referenzen

Kommentare 0

Noch keine Kommentare.

Kommentar schreiben