Files
MarkusandDevin <158243242+devin-ai-integration[bot]@users.noreply.github.com> 2b24334bfa Initial upload of BB-Apartment 2026 website.
Adds the complete Next.js website including i18n routing, house and
apartment pages, Beds24 v2 integration for live availability/pricing,
Stripe checkout, contact forms, Docker setup and deployment docs.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-08-19 22:54:49 +02:00

6.0 KiB
Raw Permalink Blame History

Deployment-Anleitung (Docker)

Diese Anleitung beschreibt, wie die BB-Apartment-Website auf einem eigenen Server per Docker deployt wird. Das Projekt bringt bereits ein fertiges Dockerfile und docker-compose.yml mit.

1. Voraussetzungen auf dem Server

Docker & Docker Compose installieren (falls noch nicht vorhanden), z. B. auf Debian/Ubuntu:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

2. Code auf den Server bringen

Git ist nicht zwingend erforderlich – es gibt mehrere gleichwertige Wege:

Option A: Mit Git (am einfachsten für spätere Updates)

git clone <dein-repo-url> bb-apartment-website
cd bb-apartment-website

Updates später einfach per git pull (siehe Abschnitt "Updates einspielen").

Option B: Ohne Git – Dateien direkt kopieren (rsync/scp)

Von deinem lokalen Rechner aus, z. B. per rsync:

rsync -avz --exclude 'node_modules' --exclude '.next' --exclude '.git' \
  ./bb-apartment-website/ \
  user@dein-server:/pfad/zu/bb-apartment-website/

Alternativ per scp oder einem SFTP-Programm (z. B. FileZilla) den kompletten Ordner hochladen. .env.local am besten separat/sicher übertragen oder direkt auf dem Server neu anlegen (Schritt 3), statt sie mitzukopieren.

Option C: Docker-Image lokal bauen und übertragen

Falls der Server gar keinen Zugriff auf den Quellcode/Registry haben soll:

# Lokal bauen und als Datei exportieren
docker build -t bb-apartment-website .
docker save bb-apartment-website | gzip > bb-apartment.tar.gz

# Auf den Server kopieren und laden
scp bb-apartment.tar.gz user@dein-server:/tmp/
ssh user@dein-server "gunzip -c /tmp/bb-apartment.tar.gz | docker load"

Auf dem Server dann in Schritt 4 docker compose up -d ohne --build verwenden, da das Image schon vorhanden ist (ggf. image: bb-apartment-website statt build: im docker-compose.yml für den nextjs-Service eintragen).

Option D: Docker Registry (Docker Hub, GitHub Container Registry, ...)

Lokal bauen → Image in eine Registry pushen → auf dem Server nur pullen. Praktisch bei häufigeren Updates über mehrere Server hinweg, aber etwas mehr initiales Setup (Registry-Zugang einrichten).


Für die restliche Anleitung wird der einfachste Fall (Git) angenommen – bei den anderen Optionen einfach git pull in Schritt "Updates einspielen" durch dein jeweiliges Kopier-/Pull-Verfahren ersetzen.

3. .env.local mit echten Werten anlegen

Diese Datei liegt nicht im Git-Repo (enthält Secrets). Auf dem Server einmalig erstellen:

cp .env.local.example .env.local
nano .env.local   # alle Platzhalter durch echte Werte ersetzen

Wichtig einzutragen:

  • Beds24: BEDS24_REFRESH_TOKEN_HERDWEG und BEDS24_REFRESH_TOKEN_SCHOENAICHER (je Haus ein eigener Zugang, siehe README für die Anleitung zum Beschaffen des Tokens)
  • Stripe: Account-IDs, Secret Keys und Webhook-Secrets für beide Häuser
  • Datenbank: DATABASE_URL / POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB
  • SMTP: Zugangsdaten für den Versand der Kontaktformular-Mails
  • NEXT_PUBLIC_BASE_URL: die echte Domain, z. B. https://www.bb-apartment.de
  • N8N_*: Zugangsdaten für die n8n-Automatisierung (Buchungsbestätigungen etc.)

4. Container bauen und starten

docker compose up -d --build

Das startet automatisch:

  • Next.js (Port 3000) – die eigentliche Website
  • PostgreSQL – Datenbank für Buchungen
  • n8n (Port 5678) – Automatisierungen

Falls Port 3000 (oder 5678) auf dem Server schon belegt ist

Der Container selbst lauscht intern immer auf Port 3000 (bzw. 5678 bei n8n) — nur der Host-Port (die linke Seite von "3000:3000" in docker-compose.yml) muss angepasst werden. Das ist bereits über Umgebungsvariablen konfigurierbar.

Wichtig: Docker Compose liest diese Variablen für die ports:-Zuordnung aus einer Datei namens .env (nicht .env.local!) im selben Ordner wie docker-compose.yml, oder aus der Shell-Umgebung. Eine Datei .env mit folgendem Inhalt anlegen:

cat > .env <<'EOF'
NEXTJS_HOST_PORT=8080
N8N_HOST_PORT=8679
EOF

Dann wie gewohnt starten:

docker compose up -d --build

Die Website ist danach unter http://localhost:8080 erreichbar (bzw. dem von dir gewählten Port). Der Reverse Proxy (siehe Schritt 7) muss dann auf diesen Port statt auf 3000 zeigen.

Alternativ – ohne .env-Datei – geht es auch einmalig inline:

NEXTJS_HOST_PORT=8080 docker compose up -d --build

5. Datenbank-Migration einmalig ausführen

docker compose exec nextjs npx prisma migrate deploy

6. Prüfen, ob alles läuft

docker compose ps
docker compose logs -f nextjs
curl http://localhost:3000   # bzw. der Port aus deiner .env, falls angepasst

7. Reverse Proxy (Domain + HTTPS)

Das Compose-Setup exponiert Next.js nur auf einem HTTP-Port (Standard 3000) ohne SSL. Für die echte Domain braucht es einen Reverse Proxy (nginx, Caddy o. ä.) davor, der z. B. www.bb-apartment.de → localhost:3000 (bzw. den gewählten Host-Port) weiterleitet und das SSL-Zertifikat (Let's Encrypt) terminiert.

Updates einspielen

git pull
docker compose up -d --build           # bei Bedarf gezielt nur einen Service: docker compose up -d --build nextjs
docker compose exec nextjs npx prisma migrate deploy   # nur falls sich das DB-Schema geändert hat

Fehlersuche

docker compose logs -f nextjs      # Next.js-Logs live verfolgen
docker compose logs -f postgres    # Datenbank-Logs
docker compose restart nextjs      # Einzelnen Service neu starten
docker compose down                # Alles stoppen (Daten in Volumes bleiben erhalten)

Hinweise zu Beds24-Rate-Limits

Die Website cached Beds24-Anfragen serverseitig (5 Minuten bis 1 Stunde, je nach Endpunkt), um innerhalb der Beds24-Anfragelimits zu bleiben. Nach Änderungen in Beds24 (z. B. Mindestaufenthalt, Preise) kann es daher bis zu einer Stunde dauern, bis diese auf der Website sichtbar sind. Details siehe Kommentare in src/lib/beds24.ts.