# d4rkbot Stack — deploybar über Portainer (Stacks → Add stack) # WICHTIG: Portainer-Stack-Name "ecobot" NICHT ändern — er ist Teil des # Volume-Namens (ecobot_ecobot_data); ein neuer Stack-Name = leeres Volume! services: d4rkbot: build: . image: d4rkbot:latest # IMMER neu bauen, nicht nur wenn das Abbild fehlt. # # Ohne das ist der Auto-Deploy ein Leerlauf, und das war er: Portainer zieht # den neuen Stand brav ins Stack-Verzeichnis (nachgemessen -- die Dateien # trugen die Uhrzeit des Pushes) und ruft dann `docker compose up -d`. Das # baut aber nur, wenn das Abbild FEHLT. `d4rkbot:latest` gab es, also # passierte nichts: kein Bau, kein Neustart, und der Bot lief weiter mit dem # Code von vorgestern. # # Das ist die unangenehme Sorte Fehler -- man pusht, hakt es ab, und der # Fehler, den man gerade behoben hat, laeuft weiter. pull_policy: build container_name: d4rkbot restart: unless-stopped # Werte kommen per Interpolation: lokal aus der .env im Projektordner (liest # docker compose automatisch), in Portainer aus den Stack-Environment-Variables environment: DISCORD_TOKEN: ${DISCORD_TOKEN} DISCORD_CLIENT_ID: ${DISCORD_CLIENT_ID} DISCORD_GUILD_ID: ${DISCORD_GUILD_ID:-} COMMIT_CHANNEL_ID: ${COMMIT_CHANNEL_ID} DEVLOG_CHANNEL_ID: ${DEVLOG_CHANNEL_ID} DEVLOG_POST_SECRET: ${DEVLOG_POST_SECRET} GITEA_API_TOKEN: ${GITEA_API_TOKEN:-} GITEA_URL: ${GITEA_URL:-https://git.d4rkst3r.de} GITEA_WEBHOOK_SECRET: ${GITEA_WEBHOOK_SECRET} DISCORD_CLIENT_SECRET: ${DISCORD_CLIENT_SECRET} SESSION_SECRET: ${SESSION_SECRET} ADMIN_DISCORD_ID: ${ADMIN_DISCORD_ID} PUBLIC_URL: ${PUBLIC_URL:-https://bot.d4rkst3r.de} # Lokale Zeitzone — wichtig für den Wochen-Rückblick (sonntags 20:00) und Datumsangaben TZ: ${TZ:-Europe/Berlin} DB_PATH: /app/data/ecobot.db # HTTP-Endpoint für Gitea-Webhooks + Webinterface # NPM leitet bot.d4rkst3r.de → host.docker.internal:3080 ports: - "3080:3080" volumes: # SQLite & Devlog-Bilder überleben Container-Neustarts. # Volume-Name bleibt aus historischen Gründen "ecobot_data" (Daten!) - ecobot_data:/app/data volumes: ecobot_data: