x-arcane:
  icon: "https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/planka.svg"
  urls:
    - "https://docs.planka.cloud/docs/installation/docker/production-version/"
services:
  planka:
    image: "ghcr.io/plankanban/planka:latest"
    restart: "unless-stopped"
    ports:
      - "${PORT:-3000}:1337"
    environment:
      BASE_URL: "${BASE_URL:-http://localhost:3000}"
      DATABASE_URL: "postgresql://planka:${DB_PASSWORD:?Set DB_PASSWORD in .env}@db:5432/planka"
      SECRET_KEY: "${SECRET_KEY:?Set SECRET_KEY in .env}"
      DEFAULT_ADMIN_EMAIL: "${ADMIN_EMAIL:-admin@example.com}"
      DEFAULT_ADMIN_PASSWORD: "${ADMIN_PASSWORD:?Set ADMIN_PASSWORD in .env}"
      DEFAULT_ADMIN_NAME: "${ADMIN_NAME:-Administrator}"
      OUTGOING_BLOCKED_HOSTS: "localhost,db"
      DEFAULT_ADMIN_USERNAME: "${ADMIN_USERNAME:-admin}"
    volumes:
      - "data:/app/data"
    depends_on:
      db:
        condition: "service_healthy"
    labels:
      com.getarcaneapp.arcane.icon: "https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/planka.svg"
  db:
    image: "postgres:16-alpine"
    restart: "unless-stopped"
    environment:
      POSTGRES_DB: "planka"
      POSTGRES_USER: "planka"
      POSTGRES_PASSWORD: "${DB_PASSWORD:?Set DB_PASSWORD in .env}"
    volumes:
      - "db-data:/var/lib/postgresql/data"
    healthcheck:
      test:
        - "CMD-SHELL"
        - "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
      interval: "10s"
      timeout: "5s"
      retries: 10
      start_period: "30s"
    labels:
      com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/postgresql.svg
volumes:
  data: {}
  db-data: {}
