„python manage.py runserver 0.0.0.0:8000“ wird im Internet mit „DEBUG=True“ angezeigt. Die SQLite-Datenbank in der Produktion. Lädt in das Repository hoch. Drei Fehler, die ein vielversprechendes Django-Projekt in ein bevorstehendes Datenleck verwandeln. Der Mindestweg für eine saubere Bereitstellung ist bekannt – verkürzen Sie ihn jedoch nicht aus Ermüdung.
Django ist in der Produktion nicht komplexer als jedes andere Web-Framework. Es ist vor allem eine Frage der Disziplin: Umgebungen trennen, Dateien auslagern und niemals verwechseln, was lokal funktioniert hat, mit dem, was für die Öffentlichkeit akzeptabel ist.
Minimale Reise in sieben Schritten
| Schritt | Befehl/Aktion | Häufig vergessen |
|---|---|---|
| Produkteinstellungen | Modul „settings/produktion.py“, „DEBUG=False“ | Festgeschriebener geheimer Schlüssel |
| Grundlegend | PostgreSQL oder MySQL | SQLite in Produktion |
| Statisch | collectstatic → nginx/CDN | Statisch bereitgestellt von Django |
| Medien | Objektspeicher oder dediziertes Volume | Medien in Git |
| WSGI | Gunicorn + Steckdose oder Port | Runserver |
| Proxy | Nginx TLS + Header | Keine HTTPS-Umleitung |
| Migration | „migrieren“ mit Backup | ohne Test-Rollback migrieren |
Django in der Produktion bedeutet, nicht mehr das zu tun, was vor Ort praktisch war.
Stapeltyp
Internet → Nginx (TLS, statisch) → Gunicorn (Arbeiter) → Django
↓
PostgreSQL
↓
Redis (optionaler Cache/Sellerie)
Gunicorn-Worker: Regel „(2 × CPU) + 1“ als Ausgangspunkt – je nach Speicher und umfangreichen Abfragen anpassen.
Variablen und Geheimnisse
Setzen Sie „DJANGO_SETTINGS_MODULE“ auf die Produktionskonfiguration. Verwenden Sie einen eindeutigen „SECRET_KEY“ pro Umgebung. Listen Sie explizit „ALLOWED_HOSTS“ auf – kein „*“-Platzhalter. Konfigurieren Sie das E-Mail-Backend (SMTP oder Transaktions-API). Fügen Sie „CSRF_TRUSTED_ORIGINS“ hinzu, wenn Sie mehrere Domains bedienen. Fügen Sie die Variablen über den Host oder eine Datei außerhalb des Repositorys ein.
Sellerie und asynchrone Aufgaben
Wenn Sie E-Mails senden, Exporte starten oder schwere Webhooks verarbeiten, planen Sie einen Redis- oder RabbitMQ-Broker, einen überwachten Worker, die Überwachung fehlgeschlagener Aufgaben und eine Trennung von Web-Worker und Batch-Worker ein, wenn die Auslastung dies rechtfertigt.
Ohne Celery blockiert ein CSV-Export von zehntausend Zeilen einen Gunicorn-Arbeiter für die Dauer der Verarbeitung – andere Besucher warten. Bei Celery gibt die HTTP-Anfrage sofort eine Aufgaben-ID zurück; Der Batch-Worker arbeitet im Hintergrund. Es ist am ersten Tag nicht zwingend erforderlich, aber die Planung von Redis von Anfang an kostet weniger als ein Refactoring unter Last.
Hosting: Kriterien für Django
Ein glaubwürdiger Django-Host ermöglicht mindestens: Python 3.x mit Virtualenv oder Container, zugängliches PostgreSQL (idealerweise verwaltet), SSH- oder Git-Bereitstellung und bei Bedarf genügend RAM für Gunicorn- und Celery-Worker. Vermeiden Sie Mandantenfähigkeit ohne WSGI-Zugriff – Sie haben keine Kontrolle über Gunicorn oder Umgebungsvariablen.
Python PaaS (alwaysdata, Clever Cloud, Platform.sh) vereinfacht die erste Bereitstellung durch die Kapselung von Gunicorn, TLS und manchmal verwaltetem PostgreSQL. Ein VPS erfordert mehr anfänglichen Einrichtungsaufwand, bietet aber mehr Kontrolle – Architekturauswahl, keine intrinsische Qualität.
Checkliste nach der Bereitstellung
Überprüfen Sie nach der Inbetriebnahme: erzwungene HTTPS-Umleitung, Sicherheitsheader (HSTS). Diese Checkliste dauert 30 Minuten – sie vermeidet Vorfälle, die über das Wochenende andauern.
Der Gipfel: Django Prod ist von Natur aus langweilig
Informationen zur Kultur langer Prozesse finden Sie unter Hosting von Node.js – die Proxy-plus-Worker-Prinzipien sind ähnlich.
Entscheide dich und gehe ohne blinden Fleck voran
Erstellen Sie ein separates Einstellungsprodukt-Modul und verbieten Sie „DEBUG=True“ in der Produktion. Upgrade auf PostgreSQL mit regelmäßig getesteten Backups. Konfigurieren Sie Nginx plus Gunicorn unter systemd oder gleichwertig. Collectstatic in die Bereitstellungspipeline integrieren. Überwachen Sie 5xx-Fehler und den Speicherplatz auf der Medienplatte. Durchsuchen Sie Python-Hosts im Verzeichnis.
Häufig gestellte Fragen
Kann Django ohne Gunicorn laufen?
Nicht in Produktion – Gunicorn, uWSGI oder ASGI hinter einem Reverse-Proxy. Der integrierte Entwicklungsserver ist nicht für den öffentlichen Datenverkehr konzipiert.
Wo sollen statische Aufladung und Medien bereitgestellt werden?
Statisch über Nginx oder CDN nach Collectstatic; Medien über Objektspeicher oder dediziertes Backup-Volume.
Sollte Sellerie von Anfang an benötigt werden?
Von asynchronen Aufgaben – andernfalls verschieben Sie sie mit geplantem Redis, wenn Sie wissen, dass es passiert.
Welcher Host für eine erste Django-App?
PaaS Python oder VPS mit verwaltetem PostgreSQL. Vermeiden Sie Multi-Tenanting ohne WSGI-Kontrolle.
Ein Django in der Produktion kann nicht an seiner URL erkannt werden – es kann daran erkannt werden, dass „runserver“ in „ps aux“ fehlt.
