DevOps & SysAdmin

Fast Focalboard Setup: Your 5-Step 2025 Tutorial

Get your self-hosted Focalboard instance running in minutes with our updated 2025 guide. Follow 5 simple steps for fast, secure project management.

A

Alex Ivanov

DevOps Engineer specializing in containerization, CI/CD pipelines, and self-hosted productivity tools.

7 min read3 views

Why Choose Focalboard in 2025?

In a digital landscape where data privacy and tool customization are paramount, the demand for self-hosted solutions has skyrocketed. If you're tired of vendor lock-in, recurring subscription fees, and limitations on how you manage your projects, you've come to the right place. Meet Focalboard, the open-source, self-hostable project management tool that puts you back in control.

This tutorial is your definitive guide for 2025, updated with the latest best practices to get a production-ready Focalboard instance running in minutes using Docker. We'll skip the fluff and dive straight into a simple, repeatable 5-step process that works every time. Whether you're a solo developer, a small team, or a growing startup, this guide will empower you to deploy your own private, powerful alternative to services like Trello, Asana, and Notion.

Understanding Focalboard: More Than a Trello Clone

At its core, Focalboard is a project and work management solution. Originally created by Mattermost, it's designed to be an open-source alternative to popular tools, offering familiar features in a self-hosted package. Think of it as having the board-based workflow of Trello, the database-like views of Notion, and the calendar planning of Asana—all under your own roof.

Key features include:

  • Customizable Views: Switch between Kanban boards, tables, calendars, and galleries to visualize your work in the way that makes the most sense for you.
  • Rich Content Cards: Cards aren't just titles. Add detailed descriptions with Markdown, properties (like status, priority, due dates), comments, and file attachments.
  • Templates: Kickstart new projects with pre-built or custom templates for things like content calendars, bug tracking, or meeting agendas.
  • Real-time Collaboration: Work with your team seamlessly, with changes reflected instantly for all users.
  • Data Sovereignty: Because you host it yourself, your data stays on your server. This is a massive win for privacy and compliance.

Prerequisites for a Smooth Setup

Before we jump in, let's ensure you have the necessary tools. This guide assumes you're using a modern Linux server (like a VPS from DigitalOcean, Linode, or even a local Raspberry Pi), but the steps are similar for macOS and Windows with Docker Desktop.

  1. A Server: A machine with at least 1GB of RAM and 1 CPU core will suffice for small teams.
  2. Docker: The containerization engine that makes this setup so easy. If you don't have it, follow the official guide to install Docker Engine.
  3. Docker Compose: The tool for defining and running multi-container Docker applications. It's usually included with Docker Desktop but may need a separate install on Linux servers. See the Docker Compose installation guide.
  4. Basic Command-Line Access: You should be comfortable running a few commands in a terminal via SSH.

The 5-Step Focalboard Setup with Docker

We'll use Docker Compose because it allows us to define our entire application stack—Focalboard and its database—in a single, easy-to-read file. This is the modern, recommended way to deploy applications like this.

Step 1: Prepare Your Server Environment

First, SSH into your server. It's good practice to create a dedicated directory for your Focalboard project to keep things organized.

mkdir focalboard_app
cd focalboard_app

This is where we will store our docker-compose.yml file and any persistent data.

Step 2: Create the Docker Compose File

Now, create the main configuration file using a terminal-based text editor like nano or vim.

nano docker-compose.yml

Copy and paste the following configuration into the file. This setup uses a PostgreSQL database, which is far more robust for production use than the default SQLite.

version: '3.7'

services:
  focalboard:
    image: mattermost/focalboard:latest
    container_name: focalboard_app
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      - VIRTUAL_HOST=focalboard.yourdomain.com # For reverse proxy
      - FOCALBOARD_DB_TYPE=postgres
      - FOCALBOARD_DB_CONFIG=postgres://dbuser:dbpassword@db:5432/focalboarddb?sslmode=disable
      - FOCALBOARD_SERVER_ROOT=http://focalboard.yourdomain.com # Set to your final URL
    volumes:
      - ./focalboard_data:/data
    depends_on:
      - db

  db:
    image: postgres:13-alpine
    container_name: focalboard_db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=dbuser
      - POSTGRES_PASSWORD=dbpassword
      - POSTGRES_DB=focalboarddb
    volumes:
      - ./postgres_data:/var/lib/postgresql/data

volumes:
  focalboard_data:
  postgres_data:

Important: Before saving, change dbuser and dbpassword to a secure, unique username and password. Make sure you use the same credentials in both the focalboard and db service definitions. For now, you can leave the yourdomain.com parts as they are; we'll address that in Step 5.

Save the file and exit the editor (in nano, that's Ctrl+X, then Y, then Enter).

Step 3: Launch Focalboard with a Single Command

With your configuration file in place, starting Focalboard is incredibly simple. Run the following command from within your focalboard_app directory:

docker-compose up -d

This command tells Docker Compose to pull the necessary images (Focalboard and Postgres), create the containers, and run them in the background (that's what the -d for 'detached' does). It might take a minute or two the first time as it downloads the images.

You can verify that everything is running correctly with:

docker-compose ps

You should see two services, focalboard_app and focalboard_db, with a state of 'Up'.

Step 4: Perform the Initial Configuration

Your Focalboard instance is now live! You can access it by navigating your web browser to your server's IP address on port 8000.

http://YOUR_SERVER_IP:8000

You will be greeted with a registration page. The first user to register automatically becomes the administrator. Fill in your email, create a username, and set a strong password. And that's it! You're in. You can start creating boards, adding cards, and exploring the interface.

Step 5: Secure Your Instance (Recommended)

Running on an IP address and port is fine for testing, but for real-world use, you need a domain name and HTTPS encryption. This is typically done with a reverse proxy like Nginx or Caddy. Setting up a full reverse proxy is beyond the scope of this quick-start guide, but the essential steps are:

  1. Point a domain or subdomain (e.g., boards.mycompany.com) to your server's IP address.
  2. Install a web server like Nginx on the host machine.
  3. Configure Nginx to act as a reverse proxy, forwarding traffic from your domain to http://localhost:8000.
  4. Use a tool like Certbot to get a free SSL certificate from Let's Encrypt, enabling HTTPS.
  5. Update the FOCALBOARD_SERVER_ROOT environment variable in your docker-compose.yml to your new HTTPS URL and restart the containers with docker-compose up -d.

This final step ensures your connection is secure and professional.

Focalboard vs. Competitors: A 2025 Snapshot

How does Focalboard stack up against the big names? Here's a quick comparison to help you understand its unique value proposition.

Feature Comparison: Focalboard vs. Trello vs. Notion
FeatureFocalboard (Self-Hosted)Trello (Cloud)Notion (Cloud)
HostingSelf-hosted (Total Control)Cloud-based (Vendor-hosted)Cloud-based (Vendor-hosted)
Core CostFree (server costs apply)Freemium, paid plans per userFreemium, paid plans per user
Data PrivacyExcellent (Your data, your server)Good (Vendor-controlled)Good (Vendor-controlled)
CustomizationHigh (Open-source, direct access)Moderate (Power-Ups)Very High (API, blocks)
Offline AccessPossible with local setupLimited, mobile app syncLimited, mobile app sync
Primary Use CaseStructured project management with data sovereigntySimple Kanban board workflowAll-in-one workspace & knowledge base

Troubleshooting Common Setup Issues

Even with a simple process, you might hit a snag. Here are a few common problems and their solutions.

  • Permission Denied Errors: If Docker complains about permissions for the ./focalboard_data or ./postgres_data directories, it's often a Linux file permission issue. Running sudo chown -R $USER:$USER . in your focalboard_app directory can sometimes resolve this, but more robust solutions involve setting specific user IDs in the Docker Compose file.
  • Port 8000 is Already in Use: If another service on your server is using port 8000, you can easily change it in the docker-compose.yml file. For example, to use port 8088, change the ports line to - "8088:8000".
  • Container Fails to Start: Check the logs for clues using docker-compose logs focalboard_app. The most common cause is a misconfiguration in the database connection string in the environment section of your docker-compose.yml. Double-check that the username, password, and database name match perfectly between the Focalboard and Postgres services.

Conclusion: Your New Project Management Hub

Congratulations! In just five steps, you've deployed a powerful, private, and flexible project management tool. By choosing to self-host Focalboard with Docker, you've not only set up a robust system but also taken a significant step towards digital sovereignty. You are no longer bound by the feature gates, user limits, or pricing schemes of proprietary services. Your boards, your data, your rules.

Now is the time to dive in, create your first project board, invite your team, and discover the freedom of open-source collaboration. Welcome to a more organized and secure way of working in 2025.