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.
Alex Ivanov
DevOps Engineer specializing in containerization, CI/CD pipelines, and self-hosted productivity tools.
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.
- A Server: A machine with at least 1GB of RAM and 1 CPU core will suffice for small teams.
- Docker: The containerization engine that makes this setup so easy. If you don't have it, follow the official guide to install Docker Engine.
- 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.
- 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:
- Point a domain or subdomain (e.g.,
boards.mycompany.com
) to your server's IP address. - Install a web server like Nginx on the host machine.
- Configure Nginx to act as a reverse proxy, forwarding traffic from your domain to
http://localhost:8000
. - Use a tool like Certbot to get a free SSL certificate from Let's Encrypt, enabling HTTPS.
- Update the
FOCALBOARD_SERVER_ROOT
environment variable in yourdocker-compose.yml
to your new HTTPS URL and restart the containers withdocker-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 | Focalboard (Self-Hosted) | Trello (Cloud) | Notion (Cloud) |
---|---|---|---|
Hosting | Self-hosted (Total Control) | Cloud-based (Vendor-hosted) | Cloud-based (Vendor-hosted) |
Core Cost | Free (server costs apply) | Freemium, paid plans per user | Freemium, paid plans per user |
Data Privacy | Excellent (Your data, your server) | Good (Vendor-controlled) | Good (Vendor-controlled) |
Customization | High (Open-source, direct access) | Moderate (Power-Ups) | Very High (API, blocks) |
Offline Access | Possible with local setup | Limited, mobile app sync | Limited, mobile app sync |
Primary Use Case | Structured project management with data sovereignty | Simple Kanban board workflow | All-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. Runningsudo chown -R $USER:$USER .
in yourfocalboard_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 theports
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 theenvironment
section of yourdocker-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.