# 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 ```text 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 `80` und `443` für Caddy Prüfen: ```bash 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: ```bash git clone /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: ```bash 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 ```bash cd /opt/entscheidomat docker compose up -d --build docker compose ps docker compose logs -f app ``` Lokaler Gesundheitscheck auf dem Server: ```bash 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: ```caddyfile 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: ```bash 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: 1. Stelle SSL/TLS auf **Full (strict)**. 2. Lass Caddy ein gültiges Zertifikat verwalten oder nutze ein korrekt eingerichtetes Cloudflare Origin Certificate. 3. Aktiviere erst nach erfolgreichem Origin-Test den Proxy-Modus (orange Wolke). 4. Lege keine Cache-Regel an, die HTML-Seiten oder `robots.txt`/`sitemap.xml` dauerhaft mit einem 404-Status cached. ## 6. Go-live-Prüfung Nach DNS-Propagation alle folgenden Befehle ausführen: ```bash 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.txt` und `sitemap.xml`: `200` - HTTP und `www`: ein permanenter Redirect auf `https://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 1. Property in Google Search Console und Bing Webmaster Tools bestätigen. 2. `https://entscheidomat.com/sitemap.xml` einreichen. 3. Nach einigen Tagen Coverage, Indexierung und Core Web Vitals prüfen. 4. 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: ```bash 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 ```bash # 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: ```bash 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.txt` - `https://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 ```bash 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