首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Obsidian实现兰空图床与WebDAV双备份

Obsidian实现兰空图床与WebDAV双备份

作者头像
用户12583431
发布2026-06-26 20:37:08
发布2026-06-26 20:37:08
110
举报

Obsidian实现兰空图床与WebDAV双备份

Obsidian仓库图片过多,电脑端、手机端使用时总是多重复同步一堆图片,十分麻烦且不美观。 本文采用兰空图床做主图床,本地webdav做备份,实现通过域名进行访问的方式来解决这个问题。

1、前言

1.1、现状:Obsidian通过仓库保存图片

笔记工具:Obsidian

  • • 图片插件:自定义附件路径:Custom Attachment Location
  • • 图片插件:图片转换压缩:Image Converter
  • • 效果:图片保存在Obsidian Vault的根目录的assets目录中,自动压缩75%并转换为webp格式,路径使用相对路径。
  • • 同步插件:Remotely Save
  • WebDAV服务: 笔记和图片统一保存在自搭建的WebDAV服务中

1.2、场景:Obsidian图片多端存储和重复同步

  • 痛点问题:电脑端、手机端使用的时候,同一份图片多次存储,同步繁琐、难以管理。
  • 实际场景
    • • 几个云图床没有批量下载功能,迁移不方便;
    • • 笔记和博客主要自用,访问量少,付费不划算

2、效果与问题

1)实际效果

使用工具如下:

  • • 笔记工具: Obsidian
  • Obsidian 插件:Image Auto Upload,自动监听剪贴板并调用PicList上传
  • • 图床:兰空图床(lsky-pro
  • • 备份:WebDAV,用作避免单点故障的备份(可选)
  • • 上传工具:PicList,多平台图床与云存储管理工具
  • • 域名:用于图片上传与访问
  • Nginx :反向代理,访问
  • • 云服务器:域名解析

大致路径描述:粘贴图片到Obsidian中,通过Image Auto Upload插件来实现:调用本地 PicList → 上传到 LskyWebDAV)→ 得到链接可以直接粘贴。示意图如下

2)难点

  • • 难点①: WebDAV 和 兰空图床的图片路径和命名需要保持一致;
  • • 难点②: 兰空图床的存储路径,Nginx没有权限访问、新创建目录与文件也没有权限访问;

3)优点

  • • 数据自托管
  • • 同时实现自动备份
  • • 省钱

3、实现步骤

3.1、部署兰空图床(lsky-pro开源版)

1)docker-compose方式部署

可以参考的一个docker-compose.yml配置

代码语言:javascript
复制
services:
  lsky-pro:
    image: coldpig/lskypro-docker:latest
    hostname: lsky-pro
    container_name: lsky-pro
    ports:
      - "80:80"
    volumes:
      - ./tools-data/lsky-pro/data:/var/www/html
    restart: unless-stopped
    cpus: "1.0"
    mem_limit: 2g
    memswap_limit: 2g
  mysql8:
    image: mysql:8.0.32
    container_name: mysql8
    restart: always
    environment:
      MYSQL_USER: z7ping
      MYSQL_PASSWORD: '用户密码记得改'
      MYSQL_ROOT_PASSWORD: 'root密码记得改'
    ports:
      - "33306:3306"
    volumes:
      - ./tools-data/mysql8:/var/lib/mysql

安装完成之后,访问IP:80端口

2)界面配置Mysql8作为存储

创建数据库脚本示例:

代码语言:javascript
复制
CREATE DATABASE IF NOT EXISTS `lsky-pro-db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

GRANT ALL PRIVILEGES ON `lsky-pro-db`.* TO 'z7ping'@'%';

FLUSH PRIVILEGES;

3.2、兰空图床配置

1)创建角色组

为了确保WebDAV和兰空图床中的文件名和路径名一致。

  • • 路径命名规则:{Y}/{m}/{d}
  • • 文件命名规则:{filename}(用PicList上传的原文件名,解决难点①)
  • • 图片保存质量:75
  • • 图片转换格式:WEBP
  • • 是否默认:是
  • • 其他的根据个人情况
2)创建储存策略
  • • 选择角色组:个人图床
  • • 访问网址:https://xxxx.com/assets (根据个人情况,跟Nginx中配置的一致)
3)创建用户、分配角色组
  • • 修改用户所属的角色组
4)调用接口获取token

用于配置到PicList中进行接口方式上传

代码语言:javascript
复制

curl -X POST http://192.168.xx.xxx:28000/api/v1/tokens \
  -H "Content-Type: application/json" \
  -d '{
    "email": "your-email@example.com",
    "password": "your-password"
  }'

5)其他配置
  • • 关掉启用注册
  • • 关掉允许游客上传

3.2、Obsidian插件Image Auto Upload配置

PicList 用的是PicGo相同的配置

3.3、配置PicList

下载地址见文末,PicList软件自带的支持兰空图床,修改配置即可。

1)修改重命名规则

PicList的重命名规则(根据各自情况自行调整)

代码语言:javascript
复制
{Y}/{m}/{d}/{Y}{m}{d}-{md5-16}
2)图床配置

第一图床配置WebDAV,第二图床配置兰空,如果反过来的话,就会上传不成功报错。

图床配置如下:

WebDAV的配置:

兰空图床配置:

3.4、配置Nginx

这一步根据各自的情况来吧,有利有弊,我觉得这样比较快,而且不会把后台配置界面到公网上面。

目的:配置访问兰空图床为:

  • • 通过nginx直接挂载图片文件地址,不经过兰空的apache和PHP等。
  • • 支持通过域名方式访问api接口;
  • • 不允许通过域名访问后台(非assets和api开头的所有地址);

参考配置如下:

代码语言:javascript
复制
server {
    listen 58000;
    
    # 禁止访问所有敏感路径(带/不带斜杠)
    location ~ ^/(login|admin|api|dashboard|register|install)(/|$) {
        return 404;
    }
    
    # 静态资源
    location /assets/ {
        alias /xxxx/lsky-pro/data/storage/app/uploads/;
        try_files $uri =404;
        expires 30d;
        add_header Cache-Control "public";
        access_log off;
    }
    
    location / {
        return 404;
    }
    
}

4、其他使用

4.1、上传Obsidian中存量图片

通过ObsidianImage Auto Upload 插件来实现。

点击【命令】,输入 Image auto upload。通过命令手动实现上传图片附件。

4.3、PicList实现同时上传至WebDAV和兰空图床

第一图床配置WebDAV,第二图床配置兰空,如果反过来的话,就会上传不成功报错。

其他的配置跟上一步4.2中的“兰空图床”的配置一样,WebDAV配置如下。

4.4、图片格式转换为webp

WebP 是 Google 推出的高压缩率图片格式,体积比 JPEG/PNG 小约 25-35%,页面加载速度提升。

图片格式转换通过PicList来实现。

4.6、调整Obsidian的图片链接为md风格

将wiki格式的文件链接改为markdown格式的方案。

代码语言:javascript
复制
[[]] 这种格式改为 ![]()这种格式

使用Custom Attachment Location插件,右键文档,并选择“收集文件夹中的附件”。

5、解决问题集锦

5.1、图片默认路径Nginx没有权限访问404

问题描述:

使用Nginx直接访问兰空的图片目录会出现这个问题。

兰空的保存权限跟Nginx的用户不一致,因此Nginx的用户没有访问权限,需要手动授权。

临时解决办法:

代码语言:javascript
复制
chmod -R u+rwX,go+rX,u-x+X ./lsky-pro/data/storage/app/uploads
【已验证】问题解决过程:

2025年12月28日解决,用 inotify 实时把新建目录 750 秒改 775。

代码语言:javascript
复制
sudo dnf install -y inotify-tools

vim /usr/local/bin/lsky-fix-perm.sh

代码语言:javascript
复制
#!/bin/bash
PATH=/usr/bin:/bin
DIR=/lsky-pro/data   # 改成你实际卷路径

inotifywait -mr --format '%w%f' -e create,MOVED_TO "$DIR" \
| while read path; do
    # 只处理“目录”且权限还不是 775
    if [[ -d "$path" ]] && [[ $(stat -c '%a' "$path") != "775" ]]; then
        sleep 0.1
        chmod -R 775 "$path"
    fi
  done

设成 systemd 服务,vim /etc/systemd/system/lsky-fix-perm.service

代码语言:javascript
复制
[Unit]
Description=Lsky uploader permission fix
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/lsky-fix-perm.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
代码语言:javascript
复制
chmod +x /usr/local/bin/lsky-fix-perm.sh
systemctl enable --now lsky-fix-perm.service

上述方案inotify方式,已经验证可行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 weyoung 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Obsidian实现兰空图床与WebDAV双备份
  • 1、前言
    • 1.1、现状:Obsidian通过仓库保存图片
    • 1.2、场景:Obsidian图片多端存储和重复同步
  • 2、效果与问题
    • 1)实际效果
    • 2)难点
    • 3)优点
  • 3、实现步骤
    • 3.1、部署兰空图床(lsky-pro开源版)
      • 1)docker-compose方式部署
      • 2)界面配置Mysql8作为存储
    • 3.2、兰空图床配置
      • 1)创建角色组
      • 2)创建储存策略
      • 3)创建用户、分配角色组
      • 4)调用接口获取token
      • 5)其他配置
    • 3.2、Obsidian插件Image Auto Upload配置
    • 3.3、配置PicList
      • 1)修改重命名规则
      • 2)图床配置
    • 3.4、配置Nginx
  • 4、其他使用
    • 4.1、上传Obsidian中存量图片
    • 4.3、PicList实现同时上传至WebDAV和兰空图床
    • 4.4、图片格式转换为webp
    • 4.6、调整Obsidian的图片链接为md风格
  • 5、解决问题集锦
    • 5.1、图片默认路径Nginx没有权限访问404
      • 问题描述:
      • 【已验证】问题解决过程:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档