前言
focalboard是由mattermost推出的一款本地化开源看板,和notion类似,支持数据库(database),不过功能相对简陋。
我一直在用notion做一些todo列表,同时作为记录和分享每天学校作业的工具。目前看来,notion是我认为最值得使用的看板类软件,但是在国内,notion的访问速度极慢无比(无缓存成功加载的情况下在30s左右,还不一定能连接上),故我考虑将它转移到一个替代产品上。经过了一番搜索,我找到了focalboard。它可以在docker上部署,提供web界面,且拥有我所需要的大部分功能。
安装
查阅官方文档,focalboard提供多种安装方式:
- 桌面应用,支持三大桌面操作系统
- mattermost扩展(mattermost是一个可以自己部署的企业管理软件,类似于teams,也是focalboard的开发商)
- 服务器部署
桌面应用最为直接,不需任何配置即可使用。第二种方式需要提前部署好mattermost,但我并无此需求。考虑到需要共享页面,我选择在服务器上进行部署。
相比于从头部署(nginx,数据库),docker更加简单且方便管理。官方文档中提供了一个docker run命令,可以尝试运行focalboard,确保网络配置没有问题。但如果需要保存配置、长期运行和管理,建议使用docker-compose。它的配置文件并未出现在官网的文档中,而是在项目的github页面上。
services:
app:
build:
context: ../
dockerfile: docker/Dockerfile
container_name: focalboard
volumes:
- fbdata:/opt/focalboard/data
ports:
- 80:8000
environment:
- VIRTUAL_HOST=focalboard.local
- VIRTUAL_PORT=8000
volumes:
fbdata:
可以看出,这个官方给出的compose并没有使用docker hub上的镜像,而是使用了一个dockerfile来制作。为了方便,我把镜像更改为了docker hub上的镜像。
通过docker-compose up -d命令启动容器(-d代表Detached mode,意思是在后台运行),不出意外的话应该看到登录界面。

这说明已经基本部署完成。
更改配置
卷
官方文档给出的compose文件中使用了一个叫做fbdata的卷来保存容器中的配置和数据,但是fbdata通常位于docker内部的目录中。如需将其映射到指定目录,则需要将fbdata处改为主机目录的路径。不过,更改路径后,再次运行时会报错:unable to open database file: no such file or directory。
这是因为容器的这个路径里包含了运行这个路径时的初始化程序(或者数据库路径),如果将初始化程序映射到本机地址,意味着容器内部的此路径将会是空的,在运行时找不到初始化程序,故报错(但是映射到fbdata就不会出现这种问题,很迷)。
所以最好的办法还是保持默认,只需要记住fbdata的位置在/var/lib/docker/volumes/root_fbdata/_data内就可以了。后期我会再研究这里出现的问题。
端口
内部8000端口是默认的,虽然并无多大影响,但如果你想要更改容器内部的端口,可以通过改变environments中的VIRTUAL_PORT变量,并且由于内部端口改变,还需要把ports中容器内部端口从原来的8000改为你想要更改的端口号。ports中端口映射的语法是:
- 宿主机端口:容器内部端口
上面的是特殊情况,一般来说,我们需要更改的是其映射出来的端口号,位于ports里「:」左边的那个数字。80是http访问的默认端口,也就是说,可以在输入网址时不加额外的端口号。
但是一般来说,服务器的80端口或许已经被别的服务占用,这时就需要改成别的端口。服务器记得在服务器提供商那打开这个端口的防火墙!
配置文件&发布功能
focalboard的配置文件在容器中的/opt/focalboard/config.json里。
"serverRoot": "http://localhost:8000",
"port": 8000,
"dbtype": "sqlite3",
"dbconfig": "./data/focalboard.db",
"postgres_dbconfig": "dbname=focalboard sslmode=disable",
"useSSL": false,
"webpath": "./pack",
"filespath": "./data/files",
"telemetry": true,
"session_expire_time": 2592000,
"session_refresh_time": 18000,
"localOnly": false,
"enableLocalMode": true,
"localModeSocketLocation": "/var/tmp/focalboard_local.socket"
}
进入focalboard后,会发现其专注于多人协作,share功能只能进行私有的share,也就是说拿到链接的人需要在本地创建一个账号才可以查看里面的内容,无论是否修改。对于一个给别人共享作业的页面来说这完全无法接受,而且对于一个这样的软件来说,公开发布的功能看法起来并不困难,也是刚需,不太应该没有。限于这是个冷门软件,网上的资源相对较少,没有解决此类需求的文章,于是我开始着手研究。
官方给了默认的config file,但没有给出所有可用的config(就离谱)。不过在运行之初,日志会先挨个读取所有的config再启动。在这些config中,赫然出现了一个参数:EnablePublicSharedBoards,这不就是我要找的发布功能吗?
于是,在config file中添加了这个参数"EnablePublicSharedBoards":true,,重启后share按钮里出现了「publish」。至此,问题解决。

我严重怀疑是开发者在早期开发这个功能的时候给内部人员使用,最后发布的时候不知何种原因忘了把它公开出来,也并未在docs中提及,导致需要自己摸索「发现」这个功能。
结语
经过了数月的使用,总的来说focalboard就是我要找的那个理想的notion服务器端替代品。虽然配置过程中其文档之简陋、参数之迷惑令我不解,但是还是解决了我遇到的所有问题。
网络上没找到的事情,试试自己去摸索,很大概率会发现新的收获。🎉
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。