Deployment
In diesem Kapitel werfen wir einen Überblick darauf, wie eine Django-Anwendung in Produktion betrieben wird. Ziel ist es, die wichtigsten Konzepte und Werkzeuge zu verstehen – nicht, ein vollständiges Deployment Schritt für Schritt umzusetzen.
Django selbst stellt eine offizielle Checkliste für den Produktivbetrieb bereit:
Grundprinzip
Ein typisches Deployment besteht aus mehreren Komponenten:
Anwendung (Django)
WSGI-Server (z. B. Gunicorn)
Webserver / Reverse Proxy (z. B. Nginx)
Datenbank
statische Dateien (z. B. WhiteNoise oder CDN)
Der grundlegende Ablauf:
Git und Versionskontrolle
Der Code sollte immer versioniert werden, typischerweise mit git und einem Remote-Repository wie GitHub oder einem privaten Git-Server.
Wichtig:
reproduzierbare Builds
Zusammenarbeit im Team
saubere Historie
Codequalität mit Pre-Commit Hooks
Bevor Code ins Repository gelangt, sollte er automatisiert geprüft werden. Dafür eignen sich sogenannte Pre-Commit-Hooks.
Das Tool pre-commit ermöglicht es, solche Hooks einfach zu konfigurieren und in verschiedenen Projekten wiederzuverwenden.
Diese werden vor jedem Commit ausgeführt und können z. B.:
Code formatieren
Linter ausführen
Tests starten
Beispiel:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- repo: local
hooks:
- id: django-test
name: django-test
entry: python manage.py test
language: system
pass_filenames: false
CI/CD (Continuous Integration / Deployment)
Moderne Projekte nutzen automatisierte Pipelines.
Typischer Ablauf:
Code wird gepusht
Tests laufen automatisch
Build wird erstellt
Deployment wird angestoßen
Tools:
GitHub Actions
GitLab CI
Jenkins
Bemerkung
Für Einsteiger reicht es, das Konzept zu verstehen. Die konkrete Umsetzung folgt meist projektspezifischen Anforderungen.
Containerisierung mit Docker
Mit Docker wird die Anwendung in einem Container verpackt. Dadurch läuft sie überall identisch:
lokale Entwicklung
Staging
Produktion
Beispiel (vereinfacht):
services:
app:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
env_file:
- .env
Vorteile:
reproduzierbare Umgebung
einfache Skalierung
klare Trennung von Abhängigkeiten
Produktions-Server
Der Django-Entwicklungsserver (runserver) ist nicht für den Produktivbetrieb geeignet.
Stattdessen wird typischerweise folgende Architektur verwendet:
Nginx als Reverse Proxy
Gunicorn/Uvicorn oder Daphne als WSGI-Server
Django als Anwendung
Ablauf:
Nginx nimmt Requests entgegen
leitet sie an Gunicorn weiter
Gunicorn führt Django-Code aus
Start von Gunicorn bzw. uvicorn:
gunicorn event_manager.wsgi:application
# oder
uvicorn event_manager.asgi:application
Sicherheit prüfen
Vor dem Deployment sollte Django auf typische Sicherheitsprobleme geprüft werden:
python manage.py check --deploy
Typische Punkte:
DEBUG = Falsesichere Cookies
HTTPS
korrekte
ALLOWED_HOSTS
Deployment-Strategien
Es gibt verschiedene Wege, eine Anwendung zu betreiben:
Eigener Server
volle Kontrolle
mehr Aufwand (Setup, Sicherheit, Updates)
Platform as a Service (PaaS)
Einfacher einstieg über dienste wie Heroku, PythonAnywhere oder Render:
Infrastruktur wird bereitgestellt
Fokus auf Anwendung
weniger Konfigurationsaufwand
Fehlerüberwachung
In produktiven Systemen sollten Fehler zentral erfasst werden.
Typische Tools:
Sentry
Rollbar
Diese helfen dabei:
Fehler zu analysieren
Probleme früh zu erkennen
Stabilität zu verbessern
Monitoring
Neben der Fehlerüberwachung ist auch das kontinuierliche Monitoring der Anwendung wichtig. Dabei werden Kennzahlen wie Antwortzeiten, Auslastung, Speicherverbrauch oder Anzahl der Requests erfasst. Ziel ist es, Probleme frühzeitig zu erkennen, Engpässe zu identifizieren und die Stabilität des Systems sicherzustellen.
Typische Tools:
Prometheus (Metriken sammeln)
Grafana (Visualisierung und Dashboards)
Loki (Log-Aggregation)
Zusammenfassung
Deployment umfasst deutlich mehr als nur das Starten der Anwendung. Es geht um:
Infrastruktur
Sicherheit
Automatisierung
Skalierbarkeit
In diesem Buch betrachten wir nur die Grundlagen. Die praktische Umsetzung hängt stark vom jeweiligen Projekt und der gewählten Infrastruktur ab.