A Docker Compose configuration for running Focalboard on TrueNAS Scale Fangtooth.
Focalboard is an open source, self-hosted alternative to Trello, Notion, and Asana. It helps define, organize, track, and manage work across teams using a familiar kanban board interface.
- Kanban boards for project management
- Table and calendar views
- Cards with properties, checklists, and comments
- Filter, sort, and group cards
- User permissions and sharing
- Self-hosted and privacy-focused
- TrueNAS Scale Fangtooth
- Docker and Docker Compose support enabled
- Available port: 3002 (Web UI)
Before deploying, create the data directory with proper permissions:
# Create the directory structure
mkdir -p /mnt/tank/apps/focalboard/data
# Set ownership to nobody:nogroup (UID:GID 65534:65534)
chown -R 65534:65534 /mnt/tank/apps/focalboard/data
# Set appropriate permissions
chmod -R 755 /mnt/tank/apps/focalboard/dataImportant: The container runs as the nobody user (UID 65534). The data directory must have correct ownership before starting the container.
- Navigate to Apps in TrueNAS Scale
- Click on Discover Apps
- Select Custom App
- Configure the following:
- Application Name: focalboard
- Image Repository: mattermost/focalboard
- Image Tag: latest
- Port Forwarding:
- Container Port: 8000 → Node Port: 3002 (Web UI)
- Storage: Mount
/opt/focalboard/datato persistent storage - Restart Policy: Unless Stopped
- Copy the
docker-compose.ymlfile to your TrueNAS system - Create the data directory as shown above
- Run:
docker-compose up -d
Once running, access the Focalboard web interface at:
http://your-truenas-ip:3002
On first access, you'll be able to create an account and start using Focalboard.
- Log in to the web interface
- Click "Create a board" or use a template
- Add lists/columns to organize your workflow
- Create cards for tasks and projects
- Drag and drop cards between columns
- 3002: Web interface port (maps to container port 8000)
Note: If this port conflicts with other services, modify it in the docker-compose.yml file:
ports:
- "3003:8000" # Use port 3003 instead of 3002All data is stored in /mnt/tank/apps/focalboard/data. This includes the SQLite database and uploaded files. Ensure this directory exists and has appropriate permissions:
mkdir -p /mnt/tank/apps/focalboard/data
chmod -R 755 /mnt/tank/apps/focalboard/data-
Verify the container is running:
docker ps | grep focalboard -
Check the logs for errors:
docker logs focalboard
-
Ensure port 3002 is not blocked by firewall rules
If you encounter permission errors with the data volume (e.g., "unable to open database file"):
chown -R 65534:65534 /mnt/tank/apps/focalboard/data
chmod -R 755 /mnt/tank/apps/focalboard/dataThe container runs as the nobody user with UID:GID 65534:65534.
Focalboard uses SQLite by default. If you encounter database corruption:
- Stop the container
- Back up the data directory
- Check the
focalboard.dbfile in the data directory
To update to the latest version:
docker-compose pull
docker-compose up -d