Bereitstellungsarchitektur: Produktionssystem ohne Ausfallzeiten

Dieser Artikel erklärt, wie wir die Website mit automatischen Neustarts und ohne Ausfallzeiten bereitstellen und betreiben.

Das Problem: Manuelle Bereitstellung ist riskant

Traditionelle Bereitstellung erfordert:

  • Manuellen Serverneustart: Verursacht Ausfallzeiten

  • Service-Überwachung: Jemand muss auf Abstürze achten

  • Code-Updates: Erfordert SSH-Zugriff und manuelle Schritte

  • Rollback: Manueller Prozess, falls etwas schiefgeht

Dies skaliert nicht und verursacht Ausfallzeiten während Updates.

Die Lösung: Automatisierte Bereitstellung mit Systemd

Wir verwenden systemd, um die Anwendung zu verwalten (siehe Infrastruktur-Überblick):

  • Auto-Neustart: Startet bei Absturz oder Codeänderung automatisch neu

  • Keine Ausfallzeiten: Sanfte Neustarts der Worker

  • Protokollierung: Zentrale Protokollverwaltung

  • Prozessverwaltung: Handhabt den Lebenszyklus der Worker

Server-Infrastruktur

Produktionsserver

Der Produktionsserver hostet die öffentlich zugängliche Website:

  • Zweck: Öffentliche Website, die Produktkatalog und E-Commerce bereitstellt

  • Modul: Nur "web"

  • Umgebung: Produktion (Gunicorn + systemd)

  • Zugriff: Öffentlich (kein Login erforderlich)

Anwendungsserver

Gunicorn

Gunicorn ist der Produktions-Webserver:

  • Multi-Worker: Mehrere Worker-Prozesse

Systemd-Integration

Systemd verwaltet Gunicorn:

  • Auto-Start: Beim Serverstart

  • Auto-Neustart: Bei Absturz oder Codeänderung

  • Protokollierung: Integration in systemd-Journal

  • Prozessverwaltung: Lebenszyklus der Worker

Konfiguration

Umgebungskonfiguration

Die Konfiguration ist umgebungsspezifisch:

  • Konfigurationsdateien: Umgebungsspezifische Einstellungen

  • JSON-Format: Schlüssel-Wert-Paare

  • Umgebungsvariablen: Geheimnisse und API-Schlüssel

  • Modulaktivierung: Steuert, welche Funktionen geladen werden

Statische Assets

Statische Assets werden von S3 mit CloudFront CDN bereitgestellt:

  • S3-Bucket: Objektspeicher für statische Dateien

  • CloudFront: CDN für globale Asset-Bereitstellung

  • Caching: Lange TTL für statische Inhalte

  • Versionierung: Cache-Busting mit Versionsnummern

Bereitstellungsprozess

Code-Bereitstellung

Code wird über Git bereitgestellt, wobei systemd den Anwendungsdienst verwaltet:

  1. Commit und Push: Änderungen werden ins Git-Repository gepusht
  2. Pull auf Server: Code wird auf den Produktionsserver gezogen
  3. Systemd-Neustart: Der Dienst startet bei Absturz automatisch neu

Konfigurationsbereitstellung

Die Konfiguration wird getrennt vom Code verwaltet:

  1. Konfigurationsdateien: JSON-Konfigurationsdateien in Git
  2. Umgebungsvariablen: Geheimnisse werden aus der Umgebung geladen
  3. Modulaktivierung: Steuert, welche Funktionen geladen werden

Überwachung

Health Checks

Health-Endpunkte überwachen den Serverstatus:

  • Health-Endpunkt: Einfache Gesundheitsprüfung

  • Datenbankprüfung: Datenbankkonnektivität

  • Cache-Prüfung: Cache-Konnektivität

Protokollierung

Protokolle werden an mehreren Orten gespeichert:

  • Gunicorn-Fehlerprotokolle: Anwendungsfehler

  • Gunicorn-Zugriffsprotokolle: HTTP-Anfragen

  • Dienstprotokolle: Systemd-Journal

Zusammenfassung

Die Bereitstellungsarchitektur bietet:

  • Gunicorn: Produktions-WSGI-Server

  • Systemd: Auto-Neustart und Prozessverwaltung

  • Git-Bereitstellung: Code- und Konfigurationsverwaltung

  • S3 + CloudFront: Bereitstellung statischer Assets

  • Health Monitoring: Health-Check-Endpunkte

  • Protokollierung: Fehler- und Zugriffsprotokolle