feat(docker): update ports to 10001 (frontend) and 10002 (backend)
This commit is contained in:
+202
@@ -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`
|
||||||
@@ -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"]
|
||||||
@@ -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
|
||||||
@@ -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"]
|
||||||
Reference in New Issue
Block a user