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:
- Commit und Push: Änderungen werden ins Git-Repository gepusht
- Pull auf Server: Code wird auf den Produktionsserver gezogen
- Systemd-Neustart: Der Dienst startet bei Absturz automatisch neu
Konfigurationsbereitstellung
Die Konfiguration wird getrennt vom Code verwaltet:
- Konfigurationsdateien: JSON-Konfigurationsdateien in Git
- Umgebungsvariablen: Geheimnisse werden aus der Umgebung geladen
- 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