2026-08-06 10:36:10 +02:00
2026-07-23 21:59:15 +02:00
2026-08-06 10:36:10 +02:00
2026-08-06 10:36:10 +02:00
2026-07-23 21:59:15 +02:00
2026-07-26 23:20:26 +02:00
2026-08-05 20:17:01 +02:00
2026-08-05 19:33:11 +02:00
2026-08-06 10:36:10 +02:00
2026-08-03 10:27:15 +02:00
2026-07-23 21:59:15 +02:00
2026-07-23 21:59:15 +02:00
2026-07-23 21:59:15 +02:00
2026-08-02 00:06:11 +02:00
2026-07-23 21:59:15 +02:00
2026-07-23 21:59:15 +02:00
2026-07-24 16:33:44 +02:00
2026-07-23 15:47:43 -05:00
2026-07-23 21:59:15 +02:00
2026-07-23 21:59:15 +02:00
2026-07-23 21:59:15 +02:00
2026-08-05 20:17:01 +02:00
2026-07-23 21:59:15 +02:00
2026-07-23 21:59:15 +02:00
2026-08-02 00:06:11 +02:00
2026-07-23 21:59:15 +02:00
2026-07-24 16:33:44 +02:00
2026-07-23 21:59:15 +02:00
2026-07-26 23:20:26 +02:00
2026-08-05 19:33:11 +02:00
2026-07-23 21:59:15 +02:00
2026-07-24 16:33:44 +02:00
2026-07-23 21:59:15 +02:00
2026-07-23 21:59:15 +02:00

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 80 und 443 fü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:

  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:

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:

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.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

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
Description
No description provided
Readme 6 MiB
Languages
TypeScript 97.3%
CSS 2.3%
Dockerfile 0.2%
JavaScript 0.2%