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

158 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.