# HexaHost — Docker-Setup (Traefik) Dashboard: **https://bot.hexahost.de** Bot-API: nur intern (`http://bot:8000`) — nicht öffentlich. --- ## Voraussetzungen 1. **Docker** + **Docker Compose** auf dem Server 2. **Traefik** läuft bereits und ist am Netzwerk `traefik-network` angeschlossen 3. DNS: `bot.hexahost.de` zeigt auf die IP deines Traefik-Servers (A/AAAA) 4. Discord-Anwendung (Bot + OAuth) im [Discord Developer Portal](https://discord.com/developers/applications) Traefik erwartet typischerweise: | Einstellung | Wert (Standard hier) | |-------------|----------------------| | Externes Netzwerk | `traefik-network` | | HTTP-Entrypoint | `web` (Port 80) | | HTTPS-Entrypoint | `websecure` (Port 443) | | Cert-Resolver | `letsencrypt` | Falls dein Cert-Resolver anders heißt → später `TRAEFIK_CERT_RESOLVER` in `.env` setzen. --- ## 1. Projekt auf den Server holen ```bash git clone HexaHost cd HexaHost ``` Oder Dateien per SCP/SFTP hochladen und in den Projektordner wechseln. --- ## 2. Traefik-Netzwerk prüfen ```bash docker network ls | grep traefik-network ``` Falls es fehlt (nur wenn Traefik es nicht schon angelegt hat): ```bash docker network create traefik-network ``` **Wichtig:** Traefik selbst muss an `traefik-network` hängen. Sonst erreicht Traefik das Dashboard nicht. --- ## 3. Secrets / `.env` anlegen ```bash cp .env.docker.example .env nano .env # oder vim / code ``` ### Pflichtfelder ausfüllen | Variable | Bedeutung | |----------|-----------| | `TOKEN` | Bot-Token (Discord → Bot → Reset Token) | | `OWNER_IDS` | Deine Discord-User-ID (Komma bei mehreren) | | `DASHBOARD_ADMIN_IDS` | IDs für Bot-Admin-API (meist = Owner) | | `DASHBOARD_API_KEY` | Langes zufälliges Geheimnis (Bot ↔ Dashboard) | | `NEXTAUTH_SECRET` | Anderes langes zufälliges Geheimnis | | `DISCORD_CLIENT_ID` | Application ID der Discord-App | | `DISCORD_CLIENT_SECRET` | OAuth2 → Client Secret | | `ADMIN_IDS` | Dashboard-Admins (Discord-User-IDs) | | `NEXT_PUBLIC_ADMIN_IDS` | Gleich wie `ADMIN_IDS` | Secrets erzeugen (Beispiel): ```bash openssl rand -hex 32 # für DASHBOARD_API_KEY openssl rand -hex 32 # für NEXTAUTH_SECRET ``` Discord-User-ID: Discord → Einstellungen → Erweitert → Entwicklermodus → Rechtsklick auf dich → „ID kopieren“. --- ## 4. Discord Developer Portal ### Bot 1. Application öffnen → **Bot** → Token kopieren → in `.env` als `TOKEN` 2. Privileged Gateway Intents aktivieren, die der Bot braucht (z. B. Server Members, Message Content — je nach Features) 3. Bot auf den Server einladen (OAuth2 → URL Generator → `bot` + benötigte Permissions) ### OAuth fürs Dashboard 1. **OAuth2 → General** 2. Redirects hinzufügen: ```text https://bot.hexahost.de/api/auth/callback/discord ``` 3. **Client ID** und **Client Secret** in `.env` eintragen (`DISCORD_CLIENT_ID` / `DISCORD_CLIENT_SECRET`) --- ## 5. Container starten Im Projektroot (dort wo `docker-compose.yml` liegt): ```bash docker compose up -d --build ``` Erster Build kann einige Minuten dauern (Python-Deps + Next.js-Build). Status prüfen: ```bash docker compose ps docker compose logs -f bot docker compose logs -f dashboard ``` Erwartung: - `hexahost-bot` — online, Discord-Login, API auf Port 8000 - `hexahost-dashboard` — läuft, Traefik routet `bot.hexahost.de` --- ## 6. Testen 1. Browser: **https://bot.hexahost.de** 2. Mit Discord anmelden 3. Guilds sollten erscheinen (Bot muss auf dem Server sein + du brauchst Manage Server / Admin) --- ## Alltag: Updates & Wartung ```bash # Neueste Version holen und neu bauen git pull docker compose up -d --build # Nur Neustart docker compose restart # Stoppen docker compose down # Logs docker compose logs -f --tail=100 ``` Daten liegen in Docker-Volumes (`bot-db`, `bot-jsondb`, `bot-logs`) und bleiben bei `docker compose down` erhalten. Volumes **löschen** (Daten weg): `docker compose down -v` — nur bewusst nutzen. --- ## Troubleshooting | Problem | Check | |---------|--------| | 502 / Gateway Timeout | `docker compose ps` — läuft `hexahost-dashboard`? Traefik am richtigen Netzwerk? | | Kein HTTPS-Zertifikat | DNS auf Server? Cert-Resolver-Name (`TRAEFIK_CERT_RESOLVER`)? Entrypoints `web`/`websecure`? | | Login schlägt fehl | Redirect-URL exakt wie oben? `NEXTAUTH_URL` = `https://bot.hexahost.de/`? | | Dashboard leer / API-Fehler | Gleiches `DASHBOARD_API_KEY`? Bot-Logs: `API_ENABLED` / Startfehler? | | Bot offline | `TOKEN` gültig? Intents? `docker compose logs bot` | | Traefik sieht Container nicht | Beide an `traefik-network`? Label `traefik.enable=true`? | Netzwerk-Check: ```bash docker network inspect traefik-network ``` Dort sollten u. a. Traefik, `hexahost-bot` und `hexahost-dashboard` erscheinen. --- ## Architektur (kurz) ```text Internet │ ▼ Traefik (traefik-network) │ Host: bot.hexahost.de ▼ hexahost-dashboard :3000 │ DASHBOARD_API_URL=http://bot:8000/api/v1 ▼ hexahost-bot :8000 (nur Docker-intern) │ └── Discord Gateway (ausgehend) ``` Die Bot-API wird **nicht** über Traefik veröffentlicht; das Dashboard spricht sie nur im internen Netzwerk an.