version: "3.8" services: # ── Postgres ──────────────────────────────────────────────────────────────── db: image: postgres:15-alpine container_name: lnbits_db environment: POSTGRES_USER: "${DB_USER}" POSTGRES_PASSWORD: "${DB_PASS}" POSTGRES_DB: "${DB_NAME}" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD", "pg_isready", "-U", "${DB_USER}"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped # ── Web UI ────────────────────────────────────────────────────────────────── web: build: context: . dockerfile: Dockerfile container_name: discord-lnbits-web environment: DATABASE_URL: "${DATABASE_URL}" FLASK_SECRET: "${FLASK_SECRET}" depends_on: db: condition: service_healthy ports: - "3000:3000" restart: unless-stopped # ── Discord Lightning Bot ────────────────────────────────────────────────── bot: build: context: . dockerfile: Dockerfile container_name: discord-lnbits-bot environment: DISCORD_TOKEN: "${DISCORD_TOKEN}" GUILD_ID: "${GUILD_ID}" ROLE_ID: "${ROLE_ID}" CHANNEL_ID: "${CHANNEL_ID}" LNBITS_URL: "${LNBITS_URL}" LNBITS_API_KEY: "${LNBITS_API_KEY}" PRICE: "${PRICE}" COMMAND_NAME: "${COMMAND_NAME}" INVOICE_MESSAGE: "${INVOICE_MESSAGE}" DATABASE_URL: "${DATABASE_URL}" depends_on: db: condition: service_healthy restart: unless-stopped volumes: postgres_data: