services: vikunja-db: image: postgres:17-alpine container_name: vikunja-db restart: unless-stopped environment: TZ: ${TZ} POSTGRES_DB: ${VIKUNJA_DB_NAME} POSTGRES_USER: ${VIKUNJA_DB_USER} POSTGRES_PASSWORD: ${VIKUNJA_DB_PASSWORD} volumes: - /opt/vikunja/postgres:/var/lib/postgresql/data:Z healthcheck: test: ["CMD-SHELL", "pg_isready -U ${VIKUNJA_DB_USER} -d ${VIKUNJA_DB_NAME}"] interval: 10s timeout: 5s retries: 10 start_period: 20s networks: - vikunja_internal vikunja: image: vikunja/vikunja:latest pull_policy: always container_name: vikunja restart: unless-stopped user: "1000:1000" depends_on: vikunja-db: condition: service_healthy environment: TZ: ${TZ} VIKUNJA_SERVICE_PUBLICURL: https://${VIKUNJA_DOMAIN}/ VIKUNJA_SERVICE_JWTSECRET: ${VIKUNJA_JWT_SECRET} VIKUNJA_DATABASE_TYPE: postgres VIKUNJA_DATABASE_HOST: vikunja-db VIKUNJA_DATABASE_PORT: 5432 VIKUNJA_DATABASE_DATABASE: ${VIKUNJA_DB_NAME} VIKUNJA_DATABASE_USER: ${VIKUNJA_DB_USER} VIKUNJA_DATABASE_PASSWORD: ${VIKUNJA_DB_PASSWORD} VIKUNJA_SERVICE_ENABLECALDAV: "true" VIKUNJA_MAILER_ENABLED: "false" VIKUNJA_SERVICE_ENABLEEMAILREMINDERS: "false" VIKUNJA_SERVICE_ENABLEREGISTRATION: "false" volumes: - /opt/vikunja/files:/app/vikunja/files:Z networks: - vikunja_internal - proxy labels: traefik.http.services.vikunja.loadbalancer.server.port: "3456" networks: vikunja_internal: driver: bridge proxy: external: true