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:

Django Deployment Checklist

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:

../_images/deployment_diagramm.png

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 = False

  • sichere 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.