最近几年,越来越多的人开始关注数据隐私和自主权。商业云服务虽然方便,但总让人担心数据安全问题。我自己就遇到过笔记同步到云端后,突然发现某些敏感内容被莫名其妙屏蔽的情况。后来发现用树莓派搭建私有同步中心,不仅成本低,还能完全掌控自己的数据。
树莓派作为一款信用卡大小的微型电脑,功耗只有几瓦,特别适合7x24小时运行。我家里那台树莓派4B已经连续工作三年多了,现在用它来托管我的整个知识库系统。Obsidian LiveSync这个插件配合CouchDB数据库,可以实现媲美商业云服务的实时同步体验,而且所有数据都存储在自己的硬件上。
实测下来,这套方案对小型团队也特别友好。我们5个人的远程协作小组就用这个方案共享技术文档,每个人都能实时看到更新,又不用担心商业服务的订阅费用或隐私问题。最关键的是,整个过程不需要复杂的网络知识,跟着步骤操作就能搞定。
建议使用树莓派4B或更新型号,至少2GB内存。我试过在1GB内存的树莓派上运行,虽然能工作但同步大文件时会有点卡。操作系统推荐官方的Raspberry Pi OS Lite版本,没有图形界面更节省资源。
首先更新系统:
bash复制sudo apt update && sudo apt upgrade -y
安装Docker和必要工具:
bash复制sudo apt install docker.io docker-compose git -y
sudo usermod -aG docker $USER
这里有个小技巧:建议给树莓派配个UPS电源或者至少用质量好的电源适配器。我有次停电导致数据库损坏,花了半天时间才修复。现在我的树莓派接在NAS的UPS上,再也没出过问题。
如果你的树莓派放在家里,建议在路由器上给它分配固定IP。我用的是192.168.1.100这个地址,方便记忆。端口方面需要开放5984给CouchDB使用,如果要从外网访问还需要配置端口转发。
安全方面,我强烈建议先设置好防火墙:
bash复制sudo ufw allow 22/tcp
sudo ufw allow 5984/tcp
sudo ufw enable
这样只开放SSH和CouchDB端口,其他端口全部屏蔽。记得修改默认的pi用户密码,我见过太多人因为这个被入侵的案例。
在/home/pi目录下创建配置文件夹:
bash复制mkdir -p couchdb/data
cd couchdb
创建local.ini配置文件,这是整个系统的核心:
ini复制[couchdb]
single_node=true
max_document_size = 50000000
[chttpd]
require_valid_user = true
max_http_request_size = 4294967296
[chttpd_auth]
require_valid_user = true
authentication_redirect = /_utils/session.html
[httpd]
WWW-Authenticate = Basic realm="couchdb"
enable_cors = true
[cors]
origins = app://obsidian.md,capacitor://localhost,http://localhost
credentials = true
headers = accept, authorization, content-type, origin, referer, cache-control, x-requested-with
methods = GET, PUT, POST, HEAD, DELETE, OPTIONS
max_age = 3600
启动容器时有个坑要注意:树莓派是ARM架构,必须使用支持ARM的镜像。我试过很多镜像,最后发现这个最稳定:
bash复制docker run -d --name couchdb \
-p 5984:5984 \
-v $(pwd)/local.ini:/opt/couchdb/etc/local.ini \
-v $(pwd)/data:/opt/couchdb/data \
-e COUCHDB_USER=admin \
-e COUCHDB_PASSWORD=你的密码 \
couchdb:3.3.1
等容器启动后,浏览器访问http://树莓派IP:5984/_utils/ 应该能看到Fauxton管理界面。第一次登录需要用刚才设置的用户名密码。
这里有个重要步骤:进入"Configuration"选项卡,找到cors部分,确认所有配置已经生效。我遇到过因为配置文件权限问题导致配置没加载的情况,可以用docker logs couchdb查看日志排错。
测试数据库是否正常工作:
bash复制curl -X GET http://admin:密码@localhost:5984/_all_dbs
应该返回空数组[]。如果报错,可能是认证或CORS配置有问题。
在Obsidian的社区插件市场搜索"Self-hosted LiveSync"并安装。这个插件有免费版和付费版,个人使用免费版就足够了。
配置页面需要填写几个关键参数:
第一次连接时可能会报CORS错误,这是因为虽然我们在服务端配置了CORS,但有时浏览器缓存会导致问题。我的解决办法是:
我在Windows、Mac和Android三个平台都配置了同步,发现几个实用技巧:
首次同步大库时,建议在WiFi环境下进行。我有次用手机流量同步2GB的库,流量直接爆了。
冲突解决策略建议选"Server wins",这样最后修改的设备会覆盖之前的版本。我们团队开始用"Create duplicate"策略,结果产生了大量冲突文件。
移动端配置时,那个setup URL有时会失效。我的经验是:先在电脑端生成URL,然后立即在手机端操作。超过5分钟就可能需要重新生成。
Android用户注意:Obsidian移动版默认会休眠后台同步,需要在系统设置里取消电池优化,否则可能收不到实时更新。
要让外网安全访问,我推荐用Nginx反向代理+Let's Encrypt证书。这样数据在传输过程中也是加密的。
先安装Nginx和certbot:
bash复制sudo apt install nginx certbot python3-certbot-nginx
配置Nginx站点:
nginx复制server {
listen 80;
server_name 你的域名;
location / {
proxy_pass http://localhost:5984;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
然后获取证书:
bash复制sudo certbot --nginx -d 你的域名
现在可以用https://你的域名/_utils/ 访问管理界面了,Obsidian中的URL也要相应改为https。
随着笔记数量增加,可能会遇到性能问题。我通过这几个方法优化:
bash复制curl -H "Content-Type: application/json" -X POST http://admin:密码@localhost:5984/obsidian/_compact
bash复制0 3 * * * docker exec couchdb curl -X GET http://admin:密码@localhost:5984/obsidian/_all_docs?include_docs=true > /path/to/backup/$(date +\%Y\%m\%d).json
bash复制sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
这套系统我已经稳定运行一年多,同步了超过5000个笔记文件。唯一出过的问题是SD卡损坏导致数据库崩溃,所以现在改用SSD外接硬盘作为存储,再也没出过问题。对于真正重要的数据,建议定期导出备份到其他位置。