能直接跑起来,但需确保docker已安装运行、8000端口未被占用、容器成功启动且防火墙放行;访问http://localhost:8000或服务器ip时若失败,应检查docker ps状态、执行docker logs查错,并确认挂载目录权限与site_url配置正确。

直接用 Docker 跑最稳,别碰源码编译或手动配 PostgreSQL——除非你明确需要多用户权限隔离或审计日志等企业级功能。
docker run -p 8000:8000 mattermost/focalboard 能不能直接跑起来?
能,但有三个关键点卡住就打不开页面:
-
docker命令本身没报错,但浏览器访问http://localhost:8000或服务器 IP 显示连接被拒绝 → 检查docker ps是否真有容器在运行,常见原因是端口被占用(比如另一个服务占了 8000),改用-p 8099:8000试试 - 容器状态是
Up X seconds然后立刻变成Exited (1)→ 容器启动失败,执行docker logs focalboard(如果指定了--name focalboard)或docker logs <container_id></container_id>,典型错误是mkdir /data: permission denied,说明挂载目录权限不足,加--user $(id -u):$(id -g)或提前chown目录 - 页面打开但注册/登录后空白,控制台报
Failed to fetch或 WebSocket 连接失败 → 多数是反向代理没配好(比如 Nginx),或者用了 HTTPS 但前端硬编码了http://协议;此时别改前端代码,优先在docker run里加环境变量-e SITE_URL=https://your-domain.com
为什么推荐 docker-compose.yml 而不是单条 docker run?
因为数据持久化和配置管理没法靠一条命令搞定。裸跑的容器一旦 rm 就丢所有看板、任务、用户数据——它默认用 SQLite,数据库文件就在容器内 /data 下,不挂出来就是临时的。
正确做法是写一个最小可用的 docker-compose.yml:
version: '3.8'
services:
focalboard:
image: mattermost/focalboard:latest
container_name: focalboard
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ./focalboard_data:/data
environment:
- TZ=Asia/Shanghai
- SITE_URL=http://localhost:8000
注意这几点:
-
./focalboard_data必须提前创建(mkdir focalboard_data),且确保当前用户有读写权限,否则容器起不来 -
SITE_URL必须和实际访问地址一致,否则登录后前端请求 API 会跨域或协议错(比如你在 Nginx 后面用 HTTPS,这里就得填https://xxx) - 不要删掉
restart: unless-stopped,否则服务器重启后 Focalboard 不会自动拉起
要不要换 PostgreSQL?SQLite 够不够用?
够用,绝大多数中小团队和内部项目完全不需要换。
SQLite 是 Focalboard 默认数据库,优势是零配置、无依赖、单文件、备份就是拷贝一个 ./focalboard_data/focalboard.db 文件。它的瓶颈不在性能,而在并发写入:当多人高频拖拽卡片、批量更新属性时,可能触发数据库忙(database is locked)错误。
只有当你遇到这些情况才考虑切 PostgreSQL:
- 团队超过 20 人同时在线编辑同一块看板
- 需要和现有 PostgreSQL 集群统一运维(如备份策略、监控告警)
- 必须支持行级锁或复杂 SQL 查询(Focalboard 自身不提供 SQL 接口,这点其实意义不大)
切库要改三处:docker-compose.yml 加 PostgreSQL 服务、挂载初始化 SQL、在 Focalboard 环境变量里指定 DB_DRIVER=postgres 和连接串——但官方镜像没打包 postgres 驱动,得自己构建镜像或换用社区维护的带驱动版本,徒增维护成本。
怎么让外网或公司内网其他机器访问到?
核心就一条:确保你的 Linux 服务器防火墙放行了对应端口。
Ubuntu/Debian 上执行:
sudo ufw allow 8000 sudo ufw reload
CentOS/RHEL 上:
sudo firewall-cmd --permanent --add-port=8000/tcp sudo firewall-cmd --reload
如果还访问不了,检查:
- 云服务器(阿里云、腾讯云等)安全组是否也开了 8000 端口——这个比本地防火墙更容易漏掉
- 是否在
docker run或docker-compose.yml中把端口映射写成了127.0.0.1:8000:8000,这样只监听本地回环,外部连不上;应写成8000:8000(Docker 默认绑定 0.0.0.0) - 公司网络是否做了出向限制,比如只允许走 80/443,这时可以把 Nginx 反代到 443,再用
proxy_pass http://127.0.0.1:8000,但记得同步改SITE_URL和 Nginx 的proxy_set_header X-Forwarded-Proto
真正容易被忽略的是:Focalboard 的桌面版(Linux .tar.gz)和服务器版是两套东西。有人下了 focalboard-server-linux-amd64.tar.gz 手动解压运行,结果发现没 Web 界面、只有命令行输出,那是因为它只是后端服务,必须自己配 Nginx + 前端静态文件,而官方 Docker 镜像已经打包了完整前后端。











