x-arcane:
  icon: "https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/vikunja.svg"
  urls:
    - "https://vikunja.io/docs/full-docker-example/"
services:
  vikunja:
    image: "vikunja/vikunja:latest"
    restart: "unless-stopped"
    ports:
      - "${PORT:-3456}:3456"
    environment:
      VIKUNJA_SERVICE_PUBLICURL: "${PUBLIC_URL:-http://localhost:3456/}"
      VIKUNJA_SERVICE_SECRET: "${SERVICE_SECRET:?Set SERVICE_SECRET in .env}"
      VIKUNJA_DATABASE_TYPE: "postgres"
      VIKUNJA_DATABASE_HOST: "db"
      VIKUNJA_DATABASE_DATABASE: "vikunja"
      VIKUNJA_DATABASE_USER: "vikunja"
      VIKUNJA_DATABASE_PASSWORD: "${DB_PASSWORD:?Set DB_PASSWORD in .env}"
      VIKUNJA_SERVICE_ENABLEREGISTRATION: "${ENABLE_REGISTRATION:-true}"
    volumes:
      - "files:/app/vikunja/files"
    depends_on:
      db:
        condition: "service_healthy"
      files-init:
        condition: "service_completed_successfully"
    healthcheck:
      test: ["CMD", "/app/vikunja/vikunja", "healthcheck"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    labels:
      com.getarcaneapp.arcane.icon: "https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/vikunja.svg"
  db:
    image: "postgres:16-alpine"
    restart: "unless-stopped"
    environment:
      POSTGRES_DB: "vikunja"
      POSTGRES_USER: "vikunja"
      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
  files-init:
    image: "busybox:latest"
    user: "0:0"
    command:
      - "chown"
      - "1000:1000"
      - "/files"
    volumes:
      - "files:/files"
    restart: "no"
    labels:
      com.getarcaneapp.arcane.icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/svg/vikunja.svg
volumes:
  files: {}
  db-data: {}
