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>
158 lines
6.0 KiB
Markdown
158 lines
6.0 KiB
Markdown
# 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`.
|