Zum Inhalt

Veröffentlichungs-Checkliste

Ziel

Diese Checkliste fasst die Schritte zur Veröffentlichung einer Webapp und ihrer Dokumentation zusammen.

Sie dient als wiederverwendbare Abschlussprüfung für neue Projekte.

Allgemeine Projektdaten

Punkt Wert
Projektname
Hauptdomain
App-Subdomain
Doku-Subdomain
Serveranbieter
Servername
Öffentliche IPv4
Server-Benutzer
App-Port lokal
Doku-Port lokal

1. Domain und DNS

  • [ ] Hauptdomain festgelegt
  • [ ] Domain gekauft
  • [ ] DNS-Verwaltung gefunden
  • [ ] öffentliche Server-IP bekannt
  • [ ] A-Record für Hauptdomain gesetzt
  • [ ] A-Record für www gesetzt, falls benötigt
  • [ ] A-Record für App-Subdomain gesetzt
  • [ ] A-Record für Doku-Subdomain gesetzt
  • [ ] A-Record für Playbook-Subdomain gesetzt, falls benötigt
  • [ ] DNS mit nslookup geprüft
  • [ ] DNS mit dig geprüft, falls nötig

Prüfbefehle:

nslookup example.com
nslookup app.example.com
nslookup docs.app.example.com

2. Docker und lokale Ports

  • [ ] Portbereich für Projekt festgelegt
  • [ ] App-Port festgelegt
  • [ ] Doku-Port festgelegt
  • [ ] Docker Compose auf lokale Ports umgestellt
  • [ ] Ports verwenden 127.0.0.1
  • [ ] keine Container direkt auf 0.0.0.0:80
  • [ ] docker compose config erfolgreich
  • [ ] Container neu gestartet
  • [ ] Containerstatus geprüft
  • [ ] lokale Ports per curl getestet

Prüfbefehle:

docker compose config
docker compose ps
docker ps --format "table {{.Names}}\t{{.Ports}}"
curl -I http://127.0.0.1:<app-port>
curl -I http://127.0.0.1:<docs-port>

3. Nginx Reverse Proxy

  • [ ] Nginx installiert
  • [ ] Nginx läuft
  • [ ] Nginx ist beim Systemstart aktiviert
  • [ ] Port 80 ist frei beziehungsweise von Nginx belegt
  • [ ] App-Konfiguration unter sites-available erstellt
  • [ ] Doku-Konfiguration unter sites-available erstellt
  • [ ] Playbook-Konfiguration unter sites-available erstellt, falls benötigt
  • [ ] Konfigurationen nach sites-enabled verlinkt
  • [ ] sudo nginx -t erfolgreich
  • [ ] Nginx neu geladen
  • [ ] HTTP öffentlich getestet

Prüfbefehle:

sudo systemctl status nginx
sudo ss -ltnp | grep ':80'
sudo nginx -t
sudo systemctl reload nginx
curl -I http://app.example.com
curl -I http://docs.app.example.com

4. Firewall

  • [ ] UFW ist aktiv, falls verwendet
  • [ ] OpenSSH ist erlaubt
  • [ ] Nginx Full ist erlaubt
  • [ ] HTTP ist von außen erreichbar
  • [ ] HTTPS ist von außen erreichbar

Prüfbefehle:

sudo ufw status verbose

Erwartung:

OpenSSH         ALLOW IN
Nginx Full      ALLOW IN

5. HTTPS mit Certbot

  • [ ] Certbot installiert
  • [ ] Certbot Nginx-Plugin installiert
  • [ ] Zertifikat für App erstellt
  • [ ] Zertifikat für Doku erstellt
  • [ ] Zertifikat für Playbook erstellt, falls benötigt
  • [ ] HTTP-zu-HTTPS-Weiterleitung aktiviert
  • [ ] HTTPS öffentlich getestet
  • [ ] HTTP-Weiterleitung getestet
  • [ ] automatische Erneuerung getestet

Prüfbefehle:

certbot --version
sudo certbot certificates
curl -I https://app.example.com
curl -I https://docs.app.example.com
curl -I http://app.example.com
curl -I http://docs.app.example.com
sudo certbot renew --dry-run

6. Browser-Test

  • [ ] App öffnet im Browser
  • [ ] Dokumentation öffnet im Browser
  • [ ] Playbook öffnet im Browser, falls vorhanden
  • [ ] HTTPS-Schloss wird angezeigt
  • [ ] keine Zertifikatswarnung
  • [ ] richtige Inhalte werden angezeigt
  • [ ] Navigation funktioniert
  • [ ] keine offensichtlichen 404-Fehler

7. Dokumentation

  • [ ] öffentliche URLs dokumentiert
  • [ ] lokale Ports dokumentiert
  • [ ] Docker-Services dokumentiert
  • [ ] Nginx-Weiterleitungen dokumentiert
  • [ ] HTTPS-Status dokumentiert
  • [ ] typische Fehler ergänzt
  • [ ] Checkliste aktualisiert
  • [ ] keine Secrets dokumentiert
  • [ ] keine Tokens dokumentiert
  • [ ] keine Private Keys dokumentiert
  • [ ] keine .env-Dateien mit Secrets dokumentiert

8. Abschlussprüfung

  • [ ] git status geprüft
  • [ ] Änderungen committed
  • [ ] Änderungen gepusht
  • [ ] Container laufen
  • [ ] Nginx läuft
  • [ ] HTTPS funktioniert
  • [ ] Renewal-Test erfolgreich
  • [ ] öffentliche URLs getestet

Prüfbefehle:

git status
docker compose ps
sudo nginx -t
sudo certbot renew --dry-run

Praxisbeispiel Immohai

Punkt Wert
Hauptdomain ohaisoft.com
Playbook https://playbook.ohaisoft.com
Immohai App https://immohai.ohaisoft.com
Immohai Doku https://docs.immohai.ohaisoft.com
Serveranbieter Hetzner Cloud
Hetzner-Projekt AppsOhai
Servername ubuntu-4gb-nbg1-1
Öffentliche IPv4 46.225.28.194
Server-Benutzer fober
Playbook-Port 127.0.0.1:8100
Immohai-App-Port 127.0.0.1:8200
Immohai-Doku-Port 127.0.0.1:8201

Checkliste Praxisbeispiel Immohai

Domain und DNS

  • [x] Domain gekauft: ohaisoft.com
  • [x] A-Record für @ gesetzt
  • [x] A-Record für www gesetzt
  • [x] A-Record für playbook gesetzt
  • [x] A-Record für immohai gesetzt
  • [x] A-Record für docs.immohai gesetzt
  • [x] DNS mit nslookup geprüft

Docker

  • [x] Developer Playbook auf lokalen Port 127.0.0.1:8100 umgestellt
  • [x] Immohai App auf lokalen Port 127.0.0.1:8200 umgestellt
  • [x] Immohai Doku auf lokalen Port 127.0.0.1:8201 umgestellt
  • [x] Docker Compose geprüft
  • [x] Container neu gestartet
  • [x] lokaler Zugriff per curl geprüft

Nginx

  • [x] Nginx installiert
  • [x] Port-80-Konflikt mit altem Container atlas-web gelöst
  • [x] Nginx gestartet
  • [x] Reverse Proxy für playbook.ohaisoft.com eingerichtet
  • [x] Reverse Proxy für immohai.ohaisoft.com eingerichtet
  • [x] Reverse Proxy für docs.immohai.ohaisoft.com eingerichtet
  • [x] Nginx-Konfiguration geprüft
  • [x] HTTP-Zugriff erfolgreich getestet

HTTPS

  • [x] Certbot installiert
  • [x] HTTPS für playbook.ohaisoft.com eingerichtet
  • [x] HTTPS für immohai.ohaisoft.com eingerichtet
  • [x] HTTPS für docs.immohai.ohaisoft.com eingerichtet
  • [x] automatische Zertifikatserneuerung getestet

Öffentliche URLs

  • [x] https://playbook.ohaisoft.com erreichbar
  • [x] https://immohai.ohaisoft.com erreichbar
  • [x] https://docs.immohai.ohaisoft.com erreichbar

Ergebnis

Die Veröffentlichung ist abgeschlossen, wenn:

  • DNS korrekt auf den Server zeigt,
  • Docker-Dienste lokal erreichbar sind,
  • Nginx die öffentlichen Domains korrekt weiterleitet,
  • HTTPS funktioniert,
  • die automatische Zertifikatserneuerung getestet wurde,
  • App und Dokumentation im Browser erreichbar sind,
  • die Dokumentation aktualisiert wurde.

Die Struktur kann für weitere Apps wiederverwendet werden.