version: "3.8" services: # ── Postgres Database ─────────────────────────────────────────────────────── 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 ports: - "3000:3000" environment: DATABASE_URL: "${DATABASE_URL}" FLASK_SECRET: "${FLASK_SECRET}" depends_on: - db # wait for Postgres then launch Gunicorn command: > sh -c ' until pg_isready -h db -U "${DB_USER}" ; do echo "[web] waiting for db…" ; sleep 2 ; done ; exec gunicorn -b 0.0.0.0:3000 app:app ' 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 # wait for Postgres as well, then launch the bot command: > sh -c ' until pg_isready -h db -U "${DB_USER}" ; do echo "[bot] waiting for db…" ; sleep 2 ; done ; exec python3 discord_lnbits_bot.py ' restart: unless-stopped volumes: postgres_data: