The {{service}}.yourdomain.com placeholder does not work in tailscale serve -
JSON values are not template-substituted. Use the actual MagicDNS base
domain so the user has a working starting point, matching the pattern
established in ts-homepage.
Focalboard with Tailscale Integration
This project sets up a Focalboard instance with Tailscale VPN integration using Docker Compose.
By default, Focalboard uses SQLite (single container, no separate database). Postgres support is documented below for users who want it.
Quick Start (Tailscale)
- Copy the example environment file and fill in your values:
cp .env.example .env - Edit
.envand set:TS_AUTHKEY— your Tailscale auth key
- Start the stack:
docker compose up -d - Complete the setup wizard in your browser (click "create an account" / "register" on the login page — there are no default credentials; the first registered user becomes the admin)
- Access Focalboard at
http://focalboard.<your-tailnet>.ts.net
Headscale
If you're using Headscale instead of Tailscale:
- Copy the example environment file:
cp .env.example .env - Edit
.envand set:TS_AUTHKEY— your Headscale auth keyTS_LOGIN_SERVER— your Headscale server URL
- Switch to the Headscale serve config:
cp tailscale/config/serve.headscale.json tailscale/config/serve.json - Edit
serve.jsonto use your actual domain. The default in this file usesfocalboard.damconsulting.net(Kevin Headscale base domain) - replace it with your own if your setup differs. - Start the stack:
docker compose up -d - Complete the setup wizard
- Access Focalboard at
http://focalboard.yourdomain.com
Configuration
See .env.example for all available options.
Switching Serve Configs
| Environment | File to use | Notes |
|---|---|---|
| Tailscale (default) | tailscale/config/serve.json |
Supports HTTP + HTTPS with certs |
| Headscale | tailscale/config/serve.headscale.json |
HTTP only |
After changing the serve config, restart the sidecar:
docker compose restart focalboard-ts
When the sidecar restarts, restart the focalboard container too so it re-joins the new network namespace:
docker compose restart focalboard
Optional: Direct Host Access
Uncomment the ports section in docker-compose.yml if you need direct access without Tailscale:
ports:
- 8000:8000
Postgres Mode (optional)
Focalboard supports Postgres for production deployments. Note: Focalboard's image doesn't read DB settings from environment variables — it reads them from /opt/focalboard/config.json inside the container. So enabling Postgres requires two changes:
-
Add a
focalboard-dbservice todocker-compose.yml:focalboard-db: image: postgres:16 environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_DB: ${POSTGRES_DB} volumes: - focalboard-db-data:/var/lib/postgresql/data depends_on: - focalboard-ts network_mode: service:focalboard-ts restart: unless-stopped volumes: focalboard-data: focalboard-db-data: -
Mount a custom
config.jsoninto the focalboard container and add a volume entry:focalboard: # ... existing config ... volumes: - focalboard-data:/opt/focalboard/data - ./focalboard/config.json:/opt/focalboard/config.json:roThen create
focalboard/config.jsonwith this content (do NOT commit this file if it contains real credentials):{ "serverRoot": "http://localhost:8000", "port": 8000, "dbtype": "postgres", "dbconfig": "postgres://USER:PASSWORD@127.0.0.1:5432/DBNAME?sslmode=disable", "useSSL": false, "webpath": "./pack", "filespath": "./data/files" }Note
127.0.0.1— both containers share the sidecar's network namespace, so the DB is on localhost, notfocalboard-db. Keep this file out of git (the repo's.gitignorealready excludesfocalboard/).
Notes
- The
mattermost/focalboardimage is amd64-only as of the 7.11.4 tag. On arm64 hosts (Apple Silicon), it'll run via emulation. Future versions may add native arm64 support. - Focalboard's setup wizard lets you create the first workspace + admin account on first visit. There are no default credentials.
Links
- Official site: https://www.focalboard.com/
- Git repository: https://github.com/mattermost/focalboard
- Docker image: https://hub.docker.com/r/mattermost/focalboard