docker.recipes

Focalboard Project Management

beginner

Focalboard Notion alternative with PostgreSQL.

Overview

Focalboard is an open-source project management and collaboration tool developed by Mattermost as an alternative to Notion, Trello, and Asana. It provides kanban boards, table views, gallery views, and calendar functionality for organizing tasks, projects, and knowledge bases. Originally created to fill the gap for teams seeking a privacy-focused, self-hosted alternative to proprietary project management tools, Focalboard combines the flexibility of Notion with the visual project management capabilities of kanban-style boards. This deployment creates a production-ready Focalboard environment using three specialized containers: the main Focalboard application server, a dedicated PostgreSQL database (focalboard-db) for robust data storage, and an NGINX reverse proxy for optimized web serving. The PostgreSQL backend provides ACID compliance and advanced querying capabilities, making it suitable for teams with complex project hierarchies and reporting needs, while NGINX handles static asset delivery and can be configured for SSL termination and caching. This stack is ideal for teams and organizations that need a self-hosted project management solution with enterprise-grade database reliability. Unlike simpler SQLite-based deployments, the PostgreSQL backend supports multiple concurrent users, complex queries for project analytics, and provides a solid foundation for scaling from small teams to larger organizations requiring advanced data integrity and backup capabilities.

Key Features

  • Multiple project views including kanban boards, table view, gallery view, and calendar for versatile project visualization
  • PostgreSQL backend with ACID compliance for data integrity and support for complex project queries and analytics
  • Real-time collaboration with live updates across team members viewing the same boards
  • Customizable card properties and templates for standardizing project workflows across teams
  • NGINX reverse proxy setup enabling optimized static asset delivery and SSL termination configuration
  • Built-in user management and permissions system for controlling board access and editing rights
  • Import/export functionality supporting migration from Trello, Notion, and other project management tools
  • Advanced filtering and sorting capabilities leveraging PostgreSQL's query performance for large datasets

Common Use Cases

  • 1Software development teams managing sprints and feature development with kanban workflows and custom card properties
  • 2Marketing agencies tracking campaign progress, asset creation, and client deliverables across multiple projects
  • 3Educational institutions organizing curriculum planning, student projects, and administrative tasks with privacy compliance
  • 4Consulting firms managing client projects with time tracking, milestone tracking, and deliverable management
  • 5Non-profit organizations coordinating volunteer activities, fundraising campaigns, and event planning
  • 6Manufacturing teams tracking production schedules, quality control processes, and inventory management
  • 7Research teams organizing studies, publication pipelines, and collaboration with external partners requiring data sovereignty

Prerequisites

  • Docker Engine and Docker Compose installed with at least 2GB available RAM for PostgreSQL and Focalboard containers
  • Ports 8000 and 80 available on the host system, or alternative ports configured via FB_PORT and NGINX_PORT variables
  • Basic understanding of project management concepts like kanban boards, card properties, and team collaboration workflows
  • Environment file (.env) with DB_USER and DB_PASSWORD variables configured for PostgreSQL authentication
  • Storage space of at least 10GB recommended for PostgreSQL data volume and container images
  • Network connectivity for initial Docker image downloads and ongoing Focalboard updates from Mattermost registry

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 focalboard:
3 image: mattermost/focalboard:latest
4 container_name: focalboard
5 restart: unless-stopped
6 ports:
7 - "${FB_PORT:-8000}:8000"
8 environment:
9 - FOCALBOARD_PORT=8000
10 - FOCALBOARD_DBTYPE=postgres
11 - FOCALBOARD_DBCONFIG=postgres://${DB_USER}:${DB_PASSWORD}@focalboard-db/focalboard?sslmode=disable
12 depends_on:
13 - focalboard-db
14
15 focalboard-db:
16 image: postgres:15-alpine
17 container_name: focalboard-db
18 restart: unless-stopped
19 environment:
20 - POSTGRES_USER=${DB_USER}
21 - POSTGRES_PASSWORD=${DB_PASSWORD}
22 - POSTGRES_DB=focalboard
23 volumes:
24 - focalboard_db_data:/var/lib/postgresql/data
25
26 nginx:
27 image: nginx:alpine
28 container_name: focalboard-nginx
29 restart: unless-stopped
30 ports:
31 - "${NGINX_PORT:-80}:80"
32 volumes:
33 - ./nginx.conf:/etc/nginx/nginx.conf:ro
34
35volumes:
36 focalboard_db_data:

.env Template

.env
1# Focalboard
2FB_PORT=8000
3DB_USER=focalboard
4DB_PASSWORD=focalboard_password
5NGINX_PORT=80

Usage Notes

  1. 1Focalboard at http://localhost:8000
  2. 2Create account to start
  3. 3Multiple view types available
  4. 4Personal or team boards

Individual Services(3 services)

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

focalboard
focalboard:
  image: mattermost/focalboard:latest
  container_name: focalboard
  restart: unless-stopped
  ports:
    - ${FB_PORT:-8000}:8000
  environment:
    - FOCALBOARD_PORT=8000
    - FOCALBOARD_DBTYPE=postgres
    - FOCALBOARD_DBCONFIG=postgres://${DB_USER}:${DB_PASSWORD}@focalboard-db/focalboard?sslmode=disable
  depends_on:
    - focalboard-db
focalboard-db
focalboard-db:
  image: postgres:15-alpine
  container_name: focalboard-db
  restart: unless-stopped
  environment:
    - POSTGRES_USER=${DB_USER}
    - POSTGRES_PASSWORD=${DB_PASSWORD}
    - POSTGRES_DB=focalboard
  volumes:
    - focalboard_db_data:/var/lib/postgresql/data
nginx
nginx:
  image: nginx:alpine
  container_name: focalboard-nginx
  restart: unless-stopped
  ports:
    - ${NGINX_PORT:-80}:80
  volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf:ro

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 focalboard:
5 image: mattermost/focalboard:latest
6 container_name: focalboard
7 restart: unless-stopped
8 ports:
9 - "${FB_PORT:-8000}:8000"
10 environment:
11 - FOCALBOARD_PORT=8000
12 - FOCALBOARD_DBTYPE=postgres
13 - FOCALBOARD_DBCONFIG=postgres://${DB_USER}:${DB_PASSWORD}@focalboard-db/focalboard?sslmode=disable
14 depends_on:
15 - focalboard-db
16
17 focalboard-db:
18 image: postgres:15-alpine
19 container_name: focalboard-db
20 restart: unless-stopped
21 environment:
22 - POSTGRES_USER=${DB_USER}
23 - POSTGRES_PASSWORD=${DB_PASSWORD}
24 - POSTGRES_DB=focalboard
25 volumes:
26 - focalboard_db_data:/var/lib/postgresql/data
27
28 nginx:
29 image: nginx:alpine
30 container_name: focalboard-nginx
31 restart: unless-stopped
32 ports:
33 - "${NGINX_PORT:-80}:80"
34 volumes:
35 - ./nginx.conf:/etc/nginx/nginx.conf:ro
36
37volumes:
38 focalboard_db_data:
39EOF
40
41# 2. Create the .env file
42cat > .env << 'EOF'
43# Focalboard
44FB_PORT=8000
45DB_USER=focalboard
46DB_PASSWORD=focalboard_password
47NGINX_PORT=80
48EOF
49
50# 3. Start the services
51docker compose up -d
52
53# 4. View logs
54docker 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/focalboard-stack/run | bash

Troubleshooting

  • Focalboard fails to start with database connection errors: Verify DB_USER and DB_PASSWORD in environment file match PostgreSQL container configuration and ensure focalboard-db container is running
  • NGINX returns 502 Bad Gateway errors: Check that focalboard container is healthy and accessible on port 8000, and verify nginx.conf file exists and has correct upstream configuration
  • PostgreSQL container crashes with permission errors: Ensure focalboard_db_data volume has proper ownership and the host system has sufficient disk space for database operations
  • Focalboard loads slowly or times out: Increase PostgreSQL shared_buffers and effective_cache_size through environment variables or custom postgresql.conf mounted as volume
  • Unable to create new boards or cards: Check PostgreSQL database connectivity and verify focalboard database exists with proper schema initialization
  • Lost data after container restart: Ensure focalboard_db_data volume is properly configured and not using tmpfs or other temporary storage backends

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