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
wwwgesetzt, 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
nslookupgeprüft - [ ] DNS mit
diggeprü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 configerfolgreich - [ ] Container neu gestartet
- [ ] Containerstatus geprüft
- [ ] lokale Ports per
curlgetestet
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
80ist frei beziehungsweise von Nginx belegt - [ ] App-Konfiguration unter
sites-availableerstellt - [ ] Doku-Konfiguration unter
sites-availableerstellt - [ ] Playbook-Konfiguration unter
sites-availableerstellt, falls benötigt - [ ] Konfigurationen nach
sites-enabledverlinkt - [ ]
sudo nginx -terfolgreich - [ ] 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 statusgeprü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
wwwgesetzt - [x] A-Record für
playbookgesetzt - [x] A-Record für
immohaigesetzt - [x] A-Record für
docs.immohaigesetzt - [x] DNS mit
nslookupgeprüft
Docker¶
- [x] Developer Playbook auf lokalen Port
127.0.0.1:8100umgestellt - [x] Immohai App auf lokalen Port
127.0.0.1:8200umgestellt - [x] Immohai Doku auf lokalen Port
127.0.0.1:8201umgestellt - [x] Docker Compose geprüft
- [x] Container neu gestartet
- [x] lokaler Zugriff per
curlgeprüft
Nginx¶
- [x] Nginx installiert
- [x] Port-80-Konflikt mit altem Container
atlas-webgelöst - [x] Nginx gestartet
- [x] Reverse Proxy für
playbook.ohaisoft.comeingerichtet - [x] Reverse Proxy für
immohai.ohaisoft.comeingerichtet - [x] Reverse Proxy für
docs.immohai.ohaisoft.comeingerichtet - [x] Nginx-Konfiguration geprüft
- [x] HTTP-Zugriff erfolgreich getestet
HTTPS¶
- [x] Certbot installiert
- [x] HTTPS für
playbook.ohaisoft.comeingerichtet - [x] HTTPS für
immohai.ohaisoft.comeingerichtet - [x] HTTPS für
docs.immohai.ohaisoft.comeingerichtet - [x] automatische Zertifikatserneuerung getestet
Öffentliche URLs¶
- [x]
https://playbook.ohaisoft.comerreichbar - [x]
https://immohai.ohaisoft.comerreichbar - [x]
https://docs.immohai.ohaisoft.comerreichbar
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.