feat(vault): track PARA layer (Categories/References/Notes/Daily/Clippings/Tags/Attachments/Presentations)
- Add 8 PARA directories to .gitignore whitelist (234 files) - Completes dual-layer sync: LLM Wiki layer + PARA personal knowledge layer - markdown_output/ remains excluded (transit zone)
This commit is contained in:
@@ -0,0 +1,285 @@
|
||||
---
|
||||
title: "部署 Obsidian LiveSync 实时同步服务指南"
|
||||
source: "https://blog.dejavu.moe/posts/selfhosting-obsidian-livesync-service-guide/"
|
||||
author:
|
||||
- "[[Dejavu Moe]]"
|
||||
published: 2026-01-05
|
||||
created: 2026-03-28
|
||||
description: "使用 Docker 自托管部署 Obsidian LiveSync 服务,获得端到端加密的多设备实时同步服务支持的详细指南。"
|
||||
tags:
|
||||
- "clippings"
|
||||
rating: 4
|
||||
---
|
||||
|
||||
## 序
|
||||
|
||||
**[Obsidian LiveSync](https://github.com/vrtmrz/obsidian-livesync)** 是一款面向 Obsidian 用户的同步解决方案,无需依靠官方付费同步服务就能获得不错的实时同步体验,支持自动冲突处理、端到端加密,使我们完全掌控自己的数据和基础设施。
|
||||
|
||||
它支持使用自托管数据库 (Apache CouchDB) 、对象存储 (S3、B2、R2 等) 或 WebRTC P2P(实验性)来同步数据。对于对象存储和 P2P 同步,只需在插件里配置即可,无需服务端支持。
|
||||
|
||||
**[Apache CouchDB](https://couchdb.apache.org/)** 是一个使用 JSON 作为存储格式,JavaScript 作为查询语言的 NoSQL 数据库,很适合作为 Obsidian 的存储。下面的自托管部署 LiveSync 服务,本质上就是部署一个单节点运行的 CouchDB 数据库。
|
||||
|
||||
## 部署 LiveSync 服务
|
||||
|
||||
### 先决条件
|
||||
|
||||
- 已安装 Docker CE
|
||||
- 已安装 Docker Compose
|
||||
- Nginx 或其他用于反向代理服务器
|
||||
- SSL/TLS 证书提供 HTTPS 访问(必需的)
|
||||
|
||||
### 开始部署
|
||||
|
||||
准备一个文件夹,用于 LiveSync 容器数据持久化
|
||||
|
||||
```bash
|
||||
mkdir obsidian-livesync && cd $
|
||||
|
||||
# 准备 Docker 绑定卷
|
||||
|
||||
mkdir -p {data,local.d}
|
||||
|
||||
sudo chown -R 1000:1000 {data,local.d}
|
||||
```
|
||||
|
||||
新建一个 `compose.yml` 模板
|
||||
|
||||
```bash
|
||||
vim compose.yml
|
||||
```
|
||||
|
||||
写入内容
|
||||
|
||||
```yaml
|
||||
services:
|
||||
|
||||
couchdb:
|
||||
|
||||
image: couchdb:3.5
|
||||
|
||||
container_name: obsidian-livesync
|
||||
|
||||
user: 1000:1000
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
environment:
|
||||
|
||||
- TZ=Asia/Shanghai
|
||||
|
||||
- COUCHDB_USER=<userName> # 设置用户名
|
||||
|
||||
- COUCHDB_PASSWORD=<adminPassword> # 设置一个强密码
|
||||
|
||||
volumes:
|
||||
|
||||
- ./data:/opt/couchdb/data
|
||||
|
||||
- ./local.d:/opt/couchdb/etc/local.d
|
||||
|
||||
ports:
|
||||
|
||||
- '127.0.0.1:5984:5984'
|
||||
```
|
||||
|
||||
启动服务
|
||||
|
||||
```bash
|
||||
sudo docker compose up -d
|
||||
```
|
||||
|
||||
### 初始化数据库
|
||||
|
||||
使用官方脚本对数据库进行初始化,注意替换用户名和密码
|
||||
|
||||
```bash
|
||||
curl -s https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh | hostname=http://127.0.0.1:5984 username=<userName> password=<adminPassword> bash
|
||||
```
|
||||
|
||||
建议初始化后重启下容器
|
||||
|
||||
```bash
|
||||
sudo docker compose down && sudo docker compose up -d
|
||||
```
|
||||
|
||||
OK,现在 CouchDB 数据库已经准备就绪。
|
||||
|
||||
## 反向代理
|
||||
|
||||
我使用 Nginx 设置反向代理访问,下面是一个示例配置文件:
|
||||
|
||||
```nginx
|
||||
server {
|
||||
|
||||
listen 80;
|
||||
|
||||
listen [::]:80;
|
||||
|
||||
server_name ob-livesync.your.domain;
|
||||
|
||||
return 301 https://$host$request_uri;
|
||||
|
||||
}
|
||||
|
||||
server {
|
||||
|
||||
listen 443 ssl;
|
||||
|
||||
listen [::]:443 ssl;
|
||||
|
||||
http2 on;
|
||||
|
||||
server_name ob-livesync.your.domain;
|
||||
|
||||
ssl_certificate /path/to/cert/ob-livesync.your.domain.pem;
|
||||
|
||||
ssl_certificate_key /path/to/cert/ob-livesync.your.domain.key;
|
||||
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
|
||||
ssl_ecdh_curve X25519:P-256:P-384;
|
||||
|
||||
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-CHACHA20-POLY1305:ECDHE+AES128:RSA+AES128:ECDHE+AES256:RSA+AES256';
|
||||
|
||||
ssl_prefer_server_ciphers off;
|
||||
|
||||
ssl_session_timeout 1d;
|
||||
|
||||
ssl_session_cache shared:MozSSL:10m;
|
||||
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||
|
||||
access_log /var/log/nginx/ob-livesync.your.domain.access.log;
|
||||
|
||||
error_log /var/log/nginx/ob-livesync.your.domain.error.log;
|
||||
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
|
||||
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
||||
|
||||
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
|
||||
|
||||
client_max_body_size 4G;
|
||||
|
||||
proxy_read_timeout 3600s;
|
||||
|
||||
proxy_send_timeout 3600s;
|
||||
|
||||
location / {
|
||||
|
||||
proxy_pass http://127.0.0.1:5984;
|
||||
|
||||
proxy_http_version 1.1;
|
||||
|
||||
proxy_set_header Host $http_host;
|
||||
|
||||
proxy_set_header X-Forwarded-For $realip_remote_addr;
|
||||
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
|
||||
proxy_redirect off;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
检查 Nginx 配置
|
||||
|
||||
```bash
|
||||
sudo nginx -t
|
||||
```
|
||||
|
||||
没问题的话,重新加载配置
|
||||
|
||||
```bash
|
||||
sudo nginx -s reload
|
||||
```
|
||||
|
||||
除了 Nginx,也可以使用一些更加方便的反向代理方案,通常情况下他们提供 HTTPS 访问也更加方便:
|
||||
|
||||
- [使用 Traefik 的 Compose 模板](https://github.com/vrtmrz/obsidian-livesync/blob/main/docker-compose.traefik.yml)
|
||||
- [使用 Caddy 的反向代理配置](https://github.com/vrtmrz/self-hosted-livesync-server)
|
||||
- [使用 Cloudflare Tunnel 直接访问](https://blog.dejavu.moe/posts/cloudflare-tunnel-access-uptime/#%e9%85%8d%e7%bd%ae-cloudflare-tunnel) ,只需在 `127.0.0.1:5984` 监听 HTTP/TCP 服务即可
|
||||
|
||||
## 登录仪表盘
|
||||
|
||||
访问 `https://ob-livesync.your.domain/_utils/` 可以查看 Apache CouchDB 仪表盘,首先检查下安装设置是否正确
|
||||
|
||||

|
||||
|
||||
新建一个数据库,比如 `obsidian` ,这不是必需的步骤,插件本身可以执行该操作
|
||||
|
||||

|
||||
|
||||
服务端配置就结束了,下面我们开始配置 Obsidian 客户端插件。
|
||||
|
||||
## Obsidian 配置
|
||||
|
||||
### 安装插件
|
||||
|
||||
安装并启用 **Self-hosted LiveSync** 插件
|
||||
|
||||

|
||||
|
||||
### 配置插件
|
||||
|
||||
对于首台设备,选择设置新的同步服务
|
||||
|
||||

|
||||
|
||||
手动输入服务器信息
|
||||
|
||||

|
||||
|
||||
可选端到端加密和文件信息混淆,这在保护数据隐私很有效,同时也为以后把自己「锁在外面」埋下了隐患,请妥善保存 E2E 加密密钥。
|
||||
|
||||

|
||||
|
||||
选择 CouchDB 数据库
|
||||
|
||||

|
||||
|
||||
按照实际信息填写
|
||||
|
||||

|
||||
|
||||
测试正确,继续下一步
|
||||
|
||||

|
||||
|
||||
目前远程服务器仍然是一个空的数据库,直接用本地覆盖服务器
|
||||
|
||||

|
||||
|
||||
### 实时同步
|
||||
|
||||
这是 LiveSync 的核心功能了,启用实时同步方案
|
||||
|
||||

|
||||
|
||||
其他设备的 Obsidian 安装好同步插件,复制 URI 或使用手机扫描二维码,直接同步设置。
|
||||
|
||||
> 注意:二维码是非加密的,请注意扫码软件隐私安全,建议使用系统扫码器。
|
||||
|
||||

|
||||
|
||||
### 同步插件
|
||||
|
||||
打开「隐藏文件」同步,设置好排除路径,可以同步插件、主题和设置。
|
||||
|
||||

|
||||
|
||||
### 结语
|
||||
|
||||
**Obsidian LiveSync** 提供了非常棒的同步方案,但插件设置稍显复杂,建议仔细阅读项目说明文档,确保充分理解其作用后再配置。
|
||||
|
||||
根据 GitHub 和 Reddit 上的用户反馈,因误操作或其他因素,可能导致服务器数据库发生不可逆的损毁。因此,切勿将所有数据依赖单一方案;对重要数据,建议配置多重或手动备份机制,这样才最保险。
|
||||
Reference in New Issue
Block a user