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>
This commit is contained in:
Markus
2026-08-19 22:54:49 +02:00
co-authored by Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
parent 232770afe7
commit 2b24334bfa
153 changed files with 5621 additions and 176 deletions
+157
View File
@@ -0,0 +1,157 @@
# 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:
```bash
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)
```bash
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`:
```bash
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:
```bash
# 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:
```bash
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
```bash
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:
```bash
cat > .env <<'EOF'
NEXTJS_HOST_PORT=8080
N8N_HOST_PORT=8679
EOF
```
Dann wie gewohnt starten:
```bash
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:
```bash
NEXTJS_HOST_PORT=8080 docker compose up -d --build
```
## 5. Datenbank-Migration einmalig ausführen
```bash
docker compose exec nextjs npx prisma migrate deploy
```
## 6. Prüfen, ob alles läuft
```bash
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
```bash
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
```bash
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`.