在飞牛 NAS 中安装部署 Docker 版 Obsidian
由于博客是静态博客,每次都是打开 VSCode 编辑文章后,推送到线上。所以一直在想,有没有什么方法,可以达到类似带后台的博客平台一样,写完文章后点击发布即可完成这一过程。
昨天突然想到了一种方法,如果我部署一个带云端的笔记软件,并且将笔记和 GitHub 仓库连接起来,这样我写完文章后,将笔记推送到仓库,不就另类的达成了一键发布的功能?
有了想法,先是问了下 DeepSeek,果然它也认可这个流程,只要解决一键推送的问题,就是可行的。
思源笔记
首先考虑的是思源笔记,毕竟它是一个全平台的笔记软件,平台自带 Docker 的线上版本。但是经过实际部署测试,有两个问题:
- 思源笔记的笔记格式是独有的
.sy格式,当我拉取 GitHub 仓库的内容后,.md格式的文件不会在思源笔记的笔记本内显示出来,这样就达不到可以线上编辑的需求了; - 还有一个问题是,思源笔记的确实有一个可以同步 Git 的插件,但是我安装后多次实验,均不能正常连接,或许就是插件上描述的网络连接问题,不过我暂时不能解决这个问题。
思来想去还是想搜一下,有没有 Docker 版本的 Obsidian,毕竟它是肯定支持 .md 的。
通过 docker-compose 安装 Obsidian
本次安装是在飞牛 NAS 中,登录 NAS 后,点击 Docker,选择 Compose -> 新增项目,依次输入项目名称,路径,创建 docker-compose.yml。
services:
obsidian:
container_name: obsidian
environment:
- PUID=1000 # 选择指定运行的用户权限
- PGID=1000 # 选择指定运行的用户权限
- TZ=Asia/Shanghai
- LC_ALL=zh_CN.UTF-8 # 增加中文支持
- CUSTOM_USER= # <此处添加登录用户名>
- PASSWORD= # <此处添加登录密码>
ports:
- 18601:3000 # HTTP
- 18603:3001 # HTTPS
volumes:
- ./config:/config # 配置目录映射
- /home/xxx/.ssh:/root/.ssh:ro # 映射 SSH 密钥
- ./obsidian-fonts:/usr/share/fonts/ttfs:ro # 映射本地字体库,增加中文支持
- /vol2/1000/01_个人文件/笔记存档/:/vol2/1000/01_个人文件/笔记存档/ # 可添加一个文档存放仓库
shm_size: 1gb
restart: always
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/linuxserver/obsidian:latest # 源仓库 Dockerhub 地址是 docker.io/linuxserver/obsidian:latest,但是镜像下载太慢,所以选择了镜像仓库之后确定,等待部署完成。
完成后可以直接在地址栏输入 NAS-IP:配置中的端口 进行访问,注意 HTTP 和 HTTPS 的区别。也可以到容器选择端口访问,但是此处的 HTTPS 端口不会自动使用 HTTPS,仍需要手动输入,所以为了方便还是直接选择 HTTP 端口。

中文语言配置
刚进来时页面是英文的,但是不要担心,我们已经映射了本地的字体库到容器内,此时直接在设置内去选择中文即可。在网上的其他教程内有设置中文参数的方法,据称也是官方的一个解决办法,但是在我的测试中,不知道为什么,容器可以正常启动,页面却无法访问。所以我自己测试了这个添加中文方法,但是不知道有什么影响。
实际上原本我是直接映射的 /usr/share/fonts,但是经过咨询 DeepSeek 后,它建议我将中文字体复制出来,映射专有的字体目录。
:~$ mkdir -p /vol1/1000/docker/obsidian/obsidian-fonts
:~$ ll /usr/share/fonts
total 24K
drwxr-xr-x 2 root root 4.0K Apr 18 2024 cmap/
drwxr-xr-x 2 root root 4.0K Apr 18 2024 cMap/
drwxr-xr-x 4 root root 4.0K Jun 25 15:30 opentype/
drwxr-xr-x 6 root root 4.0K Jun 27 14:41 truetype/
drwxr-xr-x 3 root root 4.0K Apr 18 2024 type1/
drwxr-xr-x 5 root root 4.0K Apr 18 2024 X11/
:~$ sudo cp -r /usr/share/fonts/truetype/* /vol1/1000/docker/obsidian/obsidian-fonts/
:~$好的继续向下进行,选择下方的齿轮 - 设置->General->Language->中文,重启程序,到这里就已经将程序设置为中文。
但是这个 Dockers 版本的 Obsidian 还是有一点问题,即使我在远程设置内选择了使用本地输入法,仍然有几率无法输入中文,所以还是在本地编辑完文章后,复制到线上发布。
安装 Git 插件
下面是安装 Git 插件。由于 Obsidian 的插件商店处于量子叠加态,所以我们不能在容器内直接访问插件商店下载插件,必须在本地客户端将插件下载好后,将插件上传到存放文档的仓库内使用。
至于如何在本地客户端下载插件,想必能够使用 Obsidian 的朋友还是有一定的动手能力,在此就不过多赘述。
配置 GitHub 仓库连接
生成 SSH 密钥
首先是连接到 GitHub 仓库。在本地创建 SSH 密钥,输入命令后全部回车:
:~$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/xxx/xxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /xxx/xxx/.ssh/id_rsa
Your public key has been saved in /xxx/xxx/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:CtcNBpOVZ/ERycgWYsRVE/mFNf8zJD1PB+Z2/IjXTdQ your_email@example.com
The key's randomart image is:完成后得到私钥和公钥:
:~$ cat ~/.ssh/id_rsa.pub
ssh-rsa ....配置 GitHub SSH 密钥
查看公钥,将得到的公钥保存到 GitHub 设置内的 SSH keys 内,位于右上角头像->setting->SSH and GPG keys->SSH keys->New SSH key,这样就可以通过 SSH 密钥连接到本账户的仓库。
- 登录 GitHub,点击右上角头像 → Settings
- 左侧菜单选择 SSH and GPG keys
- 点击 New SSH key,输入标题(如 "My FnNAS"),粘贴公钥内容
- 点击 Add SSH key

启动 SSH 代理并添加 SSH 密钥
:~$ eval "$(ssh-agent -s)" # 启动 SSH 代理
:~$ ssh-add ~/.ssh/id_ed25519 # 添加密钥到代理本地 Git 配置
下面继续本地配置:
:~$ git config --global user.name "Your Name"
:~$ git config --global user.email "your_email@example.com"
:~$ git config --list
:~$ user.name=icecome
:~$ user.email=xxx@xxx.xxx
:~$ ssh -T git@github.com
Hi icecome! You've successfully authenticated, but GitHub does not provide shell access.此时,已经正确连接到远端 GitHub 账户。
连接 Github 仓库
在你需要同步的文件夹内初始化仓库连接到远程:
:~$ cd blog/
:~$ git init # 初始化仓库
:~$ git remote add origin git@github.com:icecome/blog.git # 注意填写自己的 GitHub 仓库的链接
:~$ git remote -v # 查看当前已经连接到的仓库
:~$ git pull origin main # 从远程仓库拉取最新更改,也有可能是 master 或其他,根据实际情况填写那么到这里终端的操作已经完毕,下面配置 Obsidian 的 Git 插件。
Git 插件配置
实际上插件没什么可以配置的,当本地文件夹连接到仓库后,已经可以正常 push/pull,Git 插件无非是把这个步骤给自动化。 图片中三个框选位置为:
- 自动同步:设置自动推送和拉取
- 同步频率:配置自动拉取和推送的时间间隔
- 提交信息:设置自动推送时的提交信息模板

那么到此整个流程已经完毕。
最后总结:通过 Docker 部署 Obsidian 并配置 Git 同步,实现了在网页端编辑 Markdown 文档并自动同步到 GitHub 仓库的流程,使博客的发布流程更加简洁化。
通过总结流程,将想法记录下来,并分享。