.agents/ contains local tooling/skill files that got committed by mistake; .gitignore already had .agent (singular) but not the plural folder actually in use. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Entscheidomat
Entscheidomat ist eine deutschsprachige Next.js-Web-App mit sieben kostenlosen Zufalls-Tools: Ja/Nein-Generator, Münze, Glücksrad, Würfel, Zufallszahl-Generator, Magic 8-Ball und Namen-Auslosung.
Die Anwendung wird als Docker-Container gebaut und hinter einem Reverse Proxy
wie Caddy betrieben. Diese Anleitung beschreibt den kompletten Weg vom
Produktionsserver bis zum sicheren Go-live von entscheidomat.com.
Überblick
Browser
-> Cloudflare DNS / CDN (optional)
-> Caddy (TLS, HTTPS, Redirects)
-> Docker-Container auf Port 3000
-> Next.js-App
Die App selbst enthält keine Datenbank. Eigene Einstellungen der Tools werden im Browser der Nutzenden gespeichert. Umami Cloud wird für anonyme, aggregierte Nutzungsstatistiken geladen.
Voraussetzungen
Auf dem Produktionsserver werden benötigt:
- Linux-Server mit aktuellem Docker und Docker Compose Plugin
- eine Domain, z. B.
entscheidomat.com - Zugriff auf die DNS-Verwaltung, ggf. Cloudflare
- Caddy als Reverse Proxy (oder ein gleichwertiger Proxy)
- offene Ports
80und443für Caddy
Prüfen:
docker --version
docker compose version
caddy version
1. Projekt auf den Server übertragen
Lege auf dem Server ein Verzeichnis für die Anwendung an und übertrage den Projektordner dorthin. Bei einem Git-Repository ist ein Clone am einfachsten:
git clone <DEIN-REPOSITORY-URL> /opt/entscheidomat
cd /opt/entscheidomat
Ohne Git kannst du den Projektordner per rsync oder SFTP übertragen. Nicht
mit übertragen werden müssen node_modules und .next; Docker erzeugt beides
beim Build neu.
2. Produktionsumgebung konfigurieren
Erstelle im Projektordner eine .env-Datei:
APP_PORT=127.0.0.1:3000
Damit ist der App-Port nur lokal auf dem Server erreichbar. Caddy leitet Anfragen intern an die App weiter; Port 3000 muss nicht öffentlich offen sein.
Die
.env-Datei gehört nicht in ein öffentliches Repository. Aktuell werden für die Anwendung keine weiteren Server-Geheimnisse benötigt.
3. App bauen und starten
cd /opt/entscheidomat
docker compose up -d --build
docker compose ps
docker compose logs -f app
Lokaler Gesundheitscheck auf dem Server:
curl -I http://127.0.0.1:3000/
Erwartet wird HTTP/1.1 200 OK.
4. Caddy konfigurieren
Lege eine Caddy-Konfiguration an oder ergänze die bestehende Caddyfile. Der
folgende Aufbau leitet www permanent auf die Hauptdomain und nutzt Caddy für
TLS und Reverse Proxying:
www.entscheidomat.com {
redir https://entscheidomat.com{uri} permanent
}
entscheidomat.com {
encode zstd gzip
reverse_proxy 127.0.0.1:3000
}
Nach dem Ändern die Konfiguration prüfen und neu laden:
caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
Der genaue Pfad kann je nach Caddy-Installation abweichen.
5. DNS und Cloudflare
Lege für die Domain folgende DNS-Einträge an:
| Typ | Name | Ziel |
|---|---|---|
| A | @ |
Öffentliche IPv4-Adresse des Servers |
| CNAME | www |
entscheidomat.com |
Wenn Cloudflare verwendet wird:
- Stelle SSL/TLS auf Full (strict).
- Lass Caddy ein gültiges Zertifikat verwalten oder nutze ein korrekt eingerichtetes Cloudflare Origin Certificate.
- Aktiviere erst nach erfolgreichem Origin-Test den Proxy-Modus (orange Wolke).
- Lege keine Cache-Regel an, die HTML-Seiten oder
robots.txt/sitemap.xmldauerhaft mit einem 404-Status cached.
6. Go-live-Prüfung
Nach DNS-Propagation alle folgenden Befehle ausführen:
curl -I https://entscheidomat.com/
curl -I https://entscheidomat.com/ja-nein-generator
curl -I https://entscheidomat.com/robots.txt
curl -I https://entscheidomat.com/sitemap.xml
curl -I http://entscheidomat.com/
curl -I https://www.entscheidomat.com/
Erwartungen:
- Startseite, Toolseiten,
robots.txtundsitemap.xml:200 - HTTP und
www: ein permanenter Redirect aufhttps://entscheidomat.com - keine Cloudflare- oder Proxy-404-Seiten
Danach im Browser prüfen:
- Canonical URLs
- Titel und Meta-Beschreibungen
- Open-Graph-Vorschau
- alle sieben Toolseiten
- Impressum und Datenschutzerklärung
7. SEO nach dem Launch
- Property in Google Search Console und Bing Webmaster Tools bestätigen.
https://entscheidomat.com/sitemap.xmleinreichen.- Nach einigen Tagen Coverage, Indexierung und Core Web Vitals prüfen.
- Regelmäßig die Umami-Daten und Suchanfragen aus der Search Console auswerten.
Die App erzeugt statisch unter anderem:
/robots.txt/sitemap.xml/opengraph-image/twitter-image
Aktualisierungen deployen
Bei jeder Änderung:
cd /opt/entscheidomat
git pull
docker compose up -d --build
docker compose logs --tail=100 app
Ohne Git zuerst die neuen Dateien übertragen und anschließend nur die letzten zwei Befehle ausführen.
Bei einem Fehler lässt sich der vorherige, funktionierende Stand am einfachsten über den vorherigen Git-Commit und einen erneuten Build wiederherstellen.
Betrieb und Diagnose
# Container-Status
docker compose ps
# Live-Logs
docker compose logs -f app
# Neustart ohne Neubau
docker compose restart app
# Lokalen Container-Check ausführen
docker compose exec app wget --spider -q http://localhost:3000/
Für Caddy:
sudo systemctl status caddy
sudo journalctl -u caddy -f
Richte zusätzlich einen externen Uptime-Monitor für mindestens diese URLs ein:
https://entscheidomat.com/https://entscheidomat.com/robots.txthttps://entscheidomat.com/sitemap.xml
Datenschutz und rechtliche Launch-Checkliste
Vor der öffentlichen Veröffentlichung müssen die Angaben in Impressum und Datenschutzerklärung auf die tatsächliche Konfiguration abgestimmt werden:
- vollständige ladungsfähige Geschäftsanschrift des Einzelunternehmens
- tatsächlicher Name des Hostinganbieters
- Serverstandort Texas, USA, sowie Speicherdauer der Server-Logfiles
- dokumentierte Grundlage für den Datenübertragungsmechanismus in die USA
- Umami Cloud mit gewählter Datenregion EU und die passende Auftragsverarbeitungs-/Datenschutzdokumentation
- Umsatzsteuer-ID oder Wirtschafts-ID nur, falls tatsächlich vorhanden
Die vorhandenen Texte sind ein Pre-Launch-Stand und keine individuelle Rechtsberatung. Vor dem Livegang sollte die finale Fassung rechtlich geprüft werden.
Lokale Entwicklung
npm ci
npm run dev
npm run lint
npm run build
Die lokale App ist anschließend unter http://localhost:3000 erreichbar.
Tech-Stack
- Next.js 16, React 19 und TypeScript
- Tailwind CSS v4
- Docker mit Multi-Stage-Build
- Caddy als Reverse Proxy
- Cloudflare optional für DNS/CDN
- Umami Cloud, Datenregion EU