docker.recipes

Vikunja Task Manager

beginner

Open-source, self-hosted to-do app and task manager.

Overview

Vikunja is a powerful, open-source task management and project organization platform designed as a self-hosted alternative to proprietary solutions like Todoist or Asana. Built with Go and Vue.js, Vikunja offers a comprehensive suite of productivity features including multiple view modes (lists, Kanban boards, Gantt charts, and calendars), team collaboration tools, and extensive customization options. The platform emphasizes privacy and data ownership, making it ideal for individuals and organizations who want complete control over their task management data. This deployment consists of two services: the main Vikunja application container and a PostgreSQL database container. The Vikunja service runs the complete application stack including both the backend API and frontend web interface in a single container, while the PostgreSQL database provides robust data persistence with ACID compliance and advanced querying capabilities. The configuration enables user registration and sets up proper database connectivity with environment-based configuration for flexibility across different deployment scenarios. This stack is perfect for teams, small businesses, and individuals who need a feature-rich task management solution without vendor lock-in or recurring subscription costs. The combination of Vikunja's comprehensive project management features with PostgreSQL's reliability makes it suitable for everything from personal productivity tracking to managing complex multi-team projects with hundreds of tasks and deadlines.

Key Features

  • Multiple task visualization modes including lists, Kanban boards, Gantt charts, and calendar views for different workflow preferences
  • Team collaboration with user management, task assignment, and permission-based project sharing
  • File attachment support with dedicated volume storage for documents, images, and other project assets
  • CalDAV integration enabling synchronization with external calendar applications like Thunderbird and mobile calendar apps
  • Advanced task organization with labels, due dates, priorities, and hierarchical project structures
  • User registration system with configurable access control for team onboarding
  • PostgreSQL backend providing ACID-compliant data integrity and support for complex task queries and reporting
  • RESTful API access for custom integrations and mobile application development

Common Use Cases

  • 1Small to medium-sized development teams managing sprint planning, bug tracking, and feature development cycles
  • 2Marketing agencies coordinating client projects, campaign deadlines, and creative asset approvals across multiple team members
  • 3Educational institutions organizing course assignments, research projects, and administrative tasks with student collaboration
  • 4Consulting firms tracking client deliverables, project milestones, and billable task completion
  • 5Personal productivity enthusiasts who want advanced project management features beyond simple todo lists
  • 6Non-profit organizations coordinating volunteer activities, fundraising campaigns, and event planning with multiple stakeholders
  • 7Remote teams requiring a centralized, self-hosted collaboration platform without relying on external SaaS providers

Prerequisites

  • Docker and Docker Compose installed on the host system with support for multi-container deployments
  • Minimum 1GB RAM recommended for PostgreSQL database performance with concurrent users and complex queries
  • Port 3456 available for the Vikunja web interface, or alternative port configuration if running behind a reverse proxy
  • Environment variables configured for DB_PASSWORD and FRONTEND_URL matching your deployment domain or IP address
  • Basic understanding of PostgreSQL administration for database maintenance, backups, and user management
  • Storage space planning for file attachments and database growth based on expected number of users and projects

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 vikunja:
3 image: vikunja/vikunja:latest
4 container_name: vikunja
5 environment:
6 - VIKUNJA_DATABASE_TYPE=postgres
7 - VIKUNJA_DATABASE_HOST=db
8 - VIKUNJA_DATABASE_DATABASE=vikunja
9 - VIKUNJA_DATABASE_USER=vikunja
10 - VIKUNJA_DATABASE_PASSWORD=${DB_PASSWORD}
11 - VIKUNJA_SERVICE_FRONTENDURL=${FRONTEND_URL}
12 - VIKUNJA_SERVICE_ENABLEREGISTRATION=true
13 volumes:
14 - vikunja-files:/app/vikunja/files
15 ports:
16 - "3456:3456"
17 depends_on:
18 - db
19 networks:
20 - vikunja-network
21 restart: unless-stopped
22
23 db:
24 image: postgres:15-alpine
25 container_name: vikunja-db
26 environment:
27 - POSTGRES_USER=vikunja
28 - POSTGRES_PASSWORD=${DB_PASSWORD}
29 - POSTGRES_DB=vikunja
30 volumes:
31 - postgres-data:/var/lib/postgresql/data
32 networks:
33 - vikunja-network
34 restart: unless-stopped
35
36volumes:
37 vikunja-files:
38 postgres-data:
39
40networks:
41 vikunja-network:
42 driver: bridge

.env Template

.env
1# Vikunja
2DB_PASSWORD=secure_vikunja_password
3FRONTEND_URL=http://localhost:3456

Usage Notes

  1. 1Web UI at http://localhost:3456
  2. 2Register new account to start
  3. 3Supports lists, boards, gantt, calendar views
  4. 4File attachments and labels
  5. 5CalDAV integration

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

vikunja
vikunja:
  image: vikunja/vikunja:latest
  container_name: vikunja
  environment:
    - VIKUNJA_DATABASE_TYPE=postgres
    - VIKUNJA_DATABASE_HOST=db
    - VIKUNJA_DATABASE_DATABASE=vikunja
    - VIKUNJA_DATABASE_USER=vikunja
    - VIKUNJA_DATABASE_PASSWORD=${DB_PASSWORD}
    - VIKUNJA_SERVICE_FRONTENDURL=${FRONTEND_URL}
    - VIKUNJA_SERVICE_ENABLEREGISTRATION=true
  volumes:
    - vikunja-files:/app/vikunja/files
  ports:
    - "3456:3456"
  depends_on:
    - db
  networks:
    - vikunja-network
  restart: unless-stopped
db
db:
  image: postgres:15-alpine
  container_name: vikunja-db
  environment:
    - POSTGRES_USER=vikunja
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=vikunja
  volumes:
    - postgres-data:/var/lib/postgresql/data
  networks:
    - vikunja-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 vikunja:
5 image: vikunja/vikunja:latest
6 container_name: vikunja
7 environment:
8 - VIKUNJA_DATABASE_TYPE=postgres
9 - VIKUNJA_DATABASE_HOST=db
10 - VIKUNJA_DATABASE_DATABASE=vikunja
11 - VIKUNJA_DATABASE_USER=vikunja
12 - VIKUNJA_DATABASE_PASSWORD=${DB_PASSWORD}
13 - VIKUNJA_SERVICE_FRONTENDURL=${FRONTEND_URL}
14 - VIKUNJA_SERVICE_ENABLEREGISTRATION=true
15 volumes:
16 - vikunja-files:/app/vikunja/files
17 ports:
18 - "3456:3456"
19 depends_on:
20 - db
21 networks:
22 - vikunja-network
23 restart: unless-stopped
24
25 db:
26 image: postgres:15-alpine
27 container_name: vikunja-db
28 environment:
29 - POSTGRES_USER=vikunja
30 - POSTGRES_PASSWORD=${DB_PASSWORD}
31 - POSTGRES_DB=vikunja
32 volumes:
33 - postgres-data:/var/lib/postgresql/data
34 networks:
35 - vikunja-network
36 restart: unless-stopped
37
38volumes:
39 vikunja-files:
40 postgres-data:
41
42networks:
43 vikunja-network:
44 driver: bridge
45EOF
46
47# 2. Create the .env file
48cat > .env << 'EOF'
49# Vikunja
50DB_PASSWORD=secure_vikunja_password
51FRONTEND_URL=http://localhost:3456
52EOF
53
54# 3. Start the services
55docker compose up -d
56
57# 4. View logs
58docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/vikunja-tasks/run | bash

Troubleshooting

  • Connection refused on port 3456: Verify the vikunja container is running and check Docker port mapping conflicts with other services
  • Database connection failed during startup: Ensure DB_PASSWORD environment variable matches between vikunja and db services, and confirm PostgreSQL container is fully initialized
  • User registration not working: Check VIKUNJA_SERVICE_ENABLEREGISTRATION is set to true and VIKUNJA_SERVICE_FRONTENDURL matches your actual access URL
  • File uploads failing or not persisting: Verify the vikunja-files volume is properly mounted and the container has write permissions to /app/vikunja/files
  • CalDAV sync issues: Confirm the frontend URL is accessible from external calendar clients and check firewall rules for the configured port
  • Performance degradation with large task lists: Monitor PostgreSQL memory usage and consider increasing shared_buffers or upgrading to a larger instance size

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space