# Vikunja - The open-source, self-hostable to-do app # Docs: https://vikunja.io/docs/full-docker-example/ services: vikunja: container_name: vikunja image: vikunja/vikunja:latest environment: VIKUNJA_SERVICE_PUBLICURL: https://tasks.fig.systems VIKUNJA_DATABASE_HOST: vikunja-db VIKUNJA_DATABASE_PASSWORD: changeme_please_set_secure_password VIKUNJA_DATABASE_TYPE: postgres VIKUNJA_DATABASE_USER: vikunja VIKUNJA_DATABASE_DATABASE: vikunja VIKUNJA_SERVICE_JWTSECRET: changeme_please_set_random_jwt_secret TZ: America/Los_Angeles volumes: - ./files:/app/vikunja/files depends_on: vikunja-db: condition: service_healthy restart: unless-stopped networks: - homelab - vikunja_internal labels: traefik.enable: true traefik.docker.network: homelab traefik.http.routers.vikunja.rule: Host(`tasks.fig.systems`) || Host(`tasks.edfig.dev`) traefik.http.routers.vikunja.entrypoints: websecure traefik.http.routers.vikunja.tls.certresolver: letsencrypt traefik.http.services.vikunja.loadbalancer.server.port: 3456 traefik.http.routers.vikunja.middlewares: tinyauth vikunja-db: container_name: vikunja-db image: postgres:18 environment: POSTGRES_PASSWORD: changeme_please_set_secure_password POSTGRES_USER: vikunja POSTGRES_DB: vikunja TZ: America/Los_Angeles volumes: - ./db:/var/lib/postgresql/data restart: unless-stopped networks: - vikunja_internal healthcheck: test: ["CMD-SHELL", "pg_isready -h localhost -U $$POSTGRES_USER"] interval: 2s start_period: 30s networks: homelab: external: true vikunja_internal: name: vikunja_internal driver: bridge