Docker Deployment
docker-compose.yml
Das Projekt stellt eine docker-compose.yml bereit, die alle drei Services orchestriert.
Services
yaml
services:
db: # PostgreSQL 16
bot: # Backend (Bot + API)
dashboard: # Next.js FrontendSchnellstart
bash
# 1. .env konfigurieren
cp .env.example .env
# Werte anpassen (DISCORD_TOKEN, ADMIN_PASSWORD_HASH, etc.)
# 2. Starten
docker-compose up -d
# 3. Logs pruefen
docker-compose logs -f bot
docker-compose logs -f dashboardPostgreSQL Service
yaml
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: schedule_bot
POSTGRES_USER: schedule_bot_user
POSTGRES_PASSWORD: ${DB_PASSWORD:-changeme}
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: pg_isready -U schedule_bot_user -d schedule_bot
interval: 5s
timeout: 5s
retries: 5DB_PASSWORD
Setze unbedingt ein sicheres Passwort in der .env:
env
DB_PASSWORD=ein_sicheres_passwortBot Service
yaml
bot:
build: .
depends_on:
db:
condition: service_healthy
environment:
DATABASE_URL: postgresql://schedule_bot_user:${DB_PASSWORD}@db:5432/schedule_bot
DISCORD_TOKEN: ${DISCORD_TOKEN}
# ... weitere Variablen
ports:
- "3001:3001"
restart: unless-stoppedDockerfile (Multi-Stage)
Builder Stage:
- Node 20 Slim + OpenSSL
npm ci --ignore-scripts- Prisma Client generieren
- TypeScript kompilieren
Runner Stage:
- Nur Production Dependencies
- Prisma Schema + Generated Client kopieren
- Kompilierten Code kopieren
- Start: Migrationen +
node dist/index.js
Dashboard Service
yaml
dashboard:
build: ./dashboard
depends_on:
- bot
build_args:
NEXT_PUBLIC_BOT_API_URL: ${NEXT_PUBLIC_BOT_API_URL}
ports:
- "3000:3000"
environment:
BOT_API_URL: http://bot:3001
NEXT_PUBLIC_BOT_API_URL: ${NEXT_PUBLIC_BOT_API_URL}NEXT_PUBLIC_BOT_API_URL
Diese Variable wird zur Build-Zeit eingebettet. Sie muss die oeffentlich erreichbare URL des Bot-API-Servers sein (nicht die interne Docker-URL).
Volumes
yaml
volumes:
pgdata: # Persistente PostgreSQL-DatenNetzwerk
Docker Compose erstellt automatisch ein internes Netzwerk. Services kommunizieren ueber ihren Service-Namen:
- Dashboard → Bot:
http://bot:3001 - Bot → DB:
postgresql://...@db:5432/schedule_bot
Updates
bash
# Neuester Code
git pull
# Neu bauen und starten
docker-compose up -d --build
# Nur einen Service neu bauen
docker-compose up -d --build botTroubleshooting
Datenbank nicht erreichbar:
bash
docker-compose logs db
docker-compose exec db pg_isreadyBot startet nicht:
bash
docker-compose logs bot
# Haeufig: Fehlende .env VariablenDashboard zeigt keine Daten:
- Pruefen ob
NEXT_PUBLIC_BOT_API_URLkorrekt gesetzt ist - Pruefen ob Bot-API erreichbar ist:
curl http://localhost:3001/api/health
