diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..ef207c3 --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,202 @@ +# Docker Deployment Guide für Unraid + +Diese Anleitung beschreibt die Deployment von WrestleDesk auf einem Unraid-Server mit Docker Compose. **Nginx Proxy Manager läuft bereits zentral.** + +## Voraussetzungen + +- Unraid Server mit Docker Compose Plugin +- Domain (z.B. rce.playman.top) mit DNS A-Record auf Unraid-IP +- Nginx Proxy Manager läuft bereits (Port 81 für Admin-UI) + +## Schnellstart + +### 1. Repository klonen + +```bash +cd /mnt/user/appdata/ +mkdir wrestledesk && cd wrestledesk +git clone http://192.168.101.42:3023/PlayMan/WrestleDesk.git . +git checkout feature/pwa # Wichtig: PWA Branch verwenden +``` + +### 2. Umgebungsvariablen konfigurieren + +```bash +cp .env.example .env +nano .env # Oder dein bevorzugter Editor +``` + +**Wichtige Werte in .env ändern:** + +```env +# Backend +SECRET_KEY=dein-sehr-langer-zufälliger-schlüssel-mindestens-50-zeichen +DATABASE_URL=sqlite:///db.sqlite3 +``` + +**Tipp für SECRET_KEY:** +```bash +openssl rand -base64 50 +``` + +### 3. Docker Container starten + +```bash +docker-compose up -d --build +``` + +Das erste Bauen kann 5-10 Minuten dauern. + +### 4. Im Nginx Proxy Manager konfigurieren + +1. Öffne deinen Nginx Proxy Manager (normalerweise `http://deine-unraid-ip:81`) +2. **Proxy Hosts** → **Add Proxy Host** + +**Einstellungen für Frontend:** +- **Domain Names:** `rce.playman.top` +- **Scheme:** `http` +- **Forward Hostname / IP:** `deine-unraid-ip` +- **Forward Port:** `3000` +- **Block Common Exploits:** ✅ Aktivieren + +**Einstellungen für Backend (API):** +- **Domain Names:** `rce.playman.top` +- **Scheme:** `http` +- **Forward Hostname / IP:** `deine-unraid-ip` +- **Forward Port:** `8000` +- **Advanced Tab** → **Custom Locations**: + - Location: `/api/v1` + - Forward Hostname: `deine-unraid-ip` + - Forward Port: `8000` + +**SSL Tab:** +- **SSL Certificate:** `Request a new SSL Certificate` +- **Force SSL:** ✅ Aktivieren +- **HTTP/2 Support:** ✅ Aktivieren +- **Save** + +### 5. DNS einrichten + +In deinem Domain-Provider: +- **Type:** A +- **Name:** rce (oder @ für Root) +- **Value:** Deine Unraid Server IP +- **TTL:** 300 + +### 6. Fertig! + +Nach wenigen Minuten sollte WrestleDesk erreichbar sein unter: +- **https://rce.playman.top** + +## Wartung + +### Updates durchführen + +```bash +cd /mnt/user/appdata/wrestledesk +git pull origin feature/pwa # Oder main +docker-compose down +docker-compose up -d --build +``` + +### Logs ansehen + +```bash +# Alle Services +docker-compose logs -f + +# Nur Frontend +docker-compose logs -f frontend + +# Nur Backend +docker-compose logs -f backend +``` + +### Backup + +```bash +# Datenbank + Media Backup erstellen +cd /mnt/user/appdata/wrestledesk +tar czf backup-$(date +%Y%m%d).tar.gz backend/db.sqlite3 backend/media/ + +# Backup zu Unraid Array verschieben +mv backup-*.tar.gz /mnt/user/backups/wrestledesk/ +``` + +### Container stoppen + +```bash +docker-compose down +``` + +## Port-Belegung + +| Service | Port | Beschreibung | +|---------|------|--------------| +| Frontend | 3000 | Next.js App | +| Backend | 8000 | Django API | + +**Wichtig:** Diese Ports müssen von außen NICHT erreichbar sein - nur über Nginx Proxy Manager! + +## Fehlerbehebung + +### Frontend zeigt "Backend not reachable" + +Prüfe ob die API-URL korrekt ist: +```bash +docker-compose exec frontend env | grep API_URL +# Sollte zeigen: NEXT_PUBLIC_API_URL=https://rce.playman.top/api/v1 +``` + +### CORS Fehler im Browser + +Backend .env prüfen: +```bash +docker-compose exec backend env | grep CORS +# Sollte zeigen: CORS_ALLOWED_ORIGINS=https://rce.playman.top +``` + +### Container starten nicht + +```bash +# Prüfen was den Port blockiert +netstat -tlnp | grep -E '(:3000|:8000)' + +# Oder: Container logs prüfen +docker-compose logs --tail 50 +``` + +### SSL Zertifikat wird nicht erstellt + +- Prüfe ob Port 80 und 443 von außen erreichbar sind +- Prüfe DNS A-Record (sollte auf Unraid-IP zeigen) +- Warte 24h nach DNS-Änderungen +- Versuche "Renew" im Nginx Proxy Manager + +## Sicherheitshinweise + +1. **Ändere das Nginx Proxy Manager Passwort** nach dem ersten Login +2. **Verwende ein starkes SECRET_KEY** in .env (min. 50 Zeichen) +3. **Aktiviere "Block Common Exploits"** im Nginx Proxy Manager +4. **Halte Docker Images aktuell:** `docker-compose pull && docker-compose up -d` +5. **Backup regelmäßig durchführen** + +## Architektur + +``` +Internet + ↓ +Nginx Proxy Manager (auf Unraid, zentral) + ↓ (Reverse Proxy) +┌──────────────┐ ┌──────────────┐ +│ Frontend │←──→│ Backend │ +│ Port 3000 │ │ Port 8000 │ +└──────────────┘ └──────────────┘ +``` + +## Support + +Bei Problemen: +1. Logs prüfen: `docker-compose logs` +2. Container Status: `docker-compose ps` +3. Netzwerk prüfen: `docker network ls` diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..a95e70b --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,23 @@ +FROM python:3.11-slim + +WORKDIR /app + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ENV DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + libpq-dev \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . + +RUN mkdir -p /app/media /app/staticfiles + +EXPOSE 8000 + +CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "--threads", "2", "--timeout", "60", "wrestleDesk.wsgi:application"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..06a7168 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3.8' + +services: + backend: + build: ./backend + container_name: wrestledesk-backend + restart: unless-stopped + ports: + - '10002:8000' + volumes: + - ./backend/media:/app/media + - ./backend/staticfiles:/app/staticfiles + environment: + - SECRET_KEY=${SECRET_KEY} + - DEBUG=False + - ALLOWED_HOSTS=localhost,127.0.0.1,rce.playman.top,nginx-proxy-manager + - CORS_ALLOWED_ORIGINS=https://rce.playman.top + - DATABASE_URL=${DATABASE_URL} + networks: + - wrestledesk-network + + frontend: + build: ./frontend + container_name: wrestledesk-frontend + restart: unless-stopped + ports: + - '10001:3000' + environment: + - NEXT_PUBLIC_API_URL=https://rce.playman.top/api/v1 + - NODE_ENV=production + networks: + - wrestledesk-network + +networks: + wrestledesk-network: + driver: bridge diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..c54b596 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,26 @@ +FROM node:20-alpine AS builder + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci + +COPY . . +RUN npm run build + +FROM node:20-alpine AS runner + +WORKDIR /app + +ENV NODE_ENV=production + +COPY --from=builder /app/.next/standalone ./ +COPY --from=builder /app/.next/static ./.next/static +COPY --from=builder /app/public ./public + +EXPOSE 3000 + +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +CMD ["node", "server.js"]