追梦学习库

NAS 自建图床完整实操手册:Lsky Pro + Docker

追梦君 68 阅读

NAS 自建图床完整实操手册:Lsky Pro + Docker


你为什么需要自建图床?

别人的服务器说关就关,你的 NAS 永远在线。图片数据 100% 自己掌控,零跑路风险,而且 0 月费


一、硬件与环境要求

条件 最低要求 推荐配置
NAS / 小主机 任何能跑 Docker 的设备 群晖 / 威联通 / Unraid / 绿联 / 树莓派 4B+
内存 1 GB 空闲 2 GB+
存储 10 GB 空闲 50 GB+(看你图片量)
Docker 环境 Docker 20.x + Compose v2 最新版
外网访问(可选) 公网 IPv4 或 IPv6 公网 IP + 自有域名

二、Docker 环境准备

如果你已经装了 Docker,直接跳到第三节。

2.1 群晖 NAS(DSM 7.x)

  1. 打开 套件中心
  2. 搜索 Container Manager(DSM 7.2+)或 Docker(DSM 7.1 及以下)
  3. 点击安装,等待完成

2.2 威联通 NAS(QNAP)

  1. 打开 App Center
  2. 搜索 Container Station
  3. 安装即可

2.3 绿联 NAS(UGOS)

  1. 打开 应用中心
  2. 搜索 Docker
  3. 安装

2.4 Linux 小主机 / 树莓派(通用)

# 安装 Docker
curl -fsSL https://get.docker.com | bash

# 安装 Docker Compose
sudo apt install docker-compose-plugin -y   # Debian/Ubuntu
# 或
sudo yum install docker-compose-plugin -y   # CentOS/RHEL

# 验证
docker --version
docker compose version

# 设置非 root 用户也能用 Docker(推荐)
sudo usermod -aG docker $USER
# 然后重新登录

2.5 Windows(WSL2 + Docker Desktop)

  1. 安装 WSL2:管理员 PowerShell 执行 wsl --install
  2. 下载 Docker Desktop:https://www.docker.com/products/docker-desktop
  3. 安装后启动

三、部署 Lsky Pro(推荐 Docker Compose 方式)

我们使用 MySQL + Redis + Lsky Pro 三容器架构,这是生产环境推荐方案。

3.1 创建项目目录

# SSH 登录 NAS 或小主机,创建目录
mkdir -p /volume1/docker/lsky-pro
cd /volume1/docker/lsky-pro

📌 路径替换:群晖一般是 /volume2/docker/.../volume1/docker/...,请改成你自己的路径。

3.2 编写 docker-compose.yml

nano docker-compose.yml

粘贴以下完整配置(⚠️ 务必修改密码):

version: '3.8'

services:
  # ========== MySQL 8.0 数据库 ==========
  mysql:
    image: mysql:8.0
    container_name: lsky-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: LskyRoot2025!    # ⚠️ 改成你自己的强密码
      MYSQL_DATABASE: lsky
      MYSQL_USER: lsky
      MYSQL_PASSWORD: LskyUser2025!         # ⚠️ 改成你自己的强密码
    volumes:
      - ./mysql-data:/var/lib/mysql
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    networks:
      - lsky-net

  # ========== Redis 缓存 ==========
  redis:
    image: redis:7-alpine
    container_name: lsky-redis
    restart: unless-stopped
    command: redis-server --appendonly yes --requirepass "LskyRedis2025!"  # ⚠️ 改成你自己的密码
    volumes:
      - ./redis-data:/data
    networks:
      - lsky-net

  # ========== Lsky Pro 图床主程序 ==========
  lsky-pro:
    image: 0xxb/lsky-pro:latest
    container_name: lsky-pro
    restart: unless-stopped
    ports:
      - "8000:8000"    # 主机端口 : 容器端口
    volumes:
      - ./storage:/app/storage/app        # 上传的图片存这里
      - ./themes:/app/themes               # 主题文件
    environment:
      DB_CONNECTION: mysql
      DB_HOST: mysql
      DB_PORT: 3306
      DB_DATABASE: lsky
      DB_USERNAME: lsky
      DB_PASSWORD: LskyUser2025!           # ⚠️ 跟上面 MYSQL_PASSWORD 保持一致
      REDIS_HOST: redis
      REDIS_PASSWORD: LskyRedis2025!       # ⚠️ 跟上面 Redis 密码保持一致
      REDIS_PORT: 6379
    depends_on:
      mysql:
        condition: service_started
      redis:
        condition: service_started
    networks:
      - lsky-net

networks:
  lsky-net:
    driver: bridge

3.3 启动服务

docker compose up -d
# 查看是否全部启动成功(3 个容器都是 Up 状态)
docker compose ps
# 输出应该类似:
# NAME          STATUS
# lsky-mysql    Up (healthy)
# lsky-redis    Up
# lsky-pro      Up

四、初始化安装向导

4.1 访问安装页面

浏览器打开:http://你的NAS_IP:8000

例如:http://192.168.1.100:8000

4.2 填写数据库信息

Lsky Pro 安装向导会要求填入:

配置项 说明
数据库地址 mysql (容器名,不要填 localhost)
数据库端口 3306 MySQL 默认端口
数据库名称 lsky 和 docker-compose.yml 一致
数据库用户名 lsky 和 docker-compose.yml 一致
数据库密码 LskyUser2025! 和 docker-compose.yml 一致

4.3 设置管理员

配置项 说明
管理员邮箱 用于登录 + Token 获取
管理员密码 ⚠️ 用强密码,这是图床的总钥匙
站点名称 随便填,比如"我的图床"

4.4 点击安装

等待几秒 → 显示安装成功 → 自动跳转登录页。

用刚刚设置的管理员邮箱和密码登录。


五、配置存储策略(核心步骤)

登录后,左侧菜单 → 「储存」「储存策略」「新建储存策略」

5.1 本地存储(最简方案,图片直接存 NAS 硬盘)

配置项
角色组 勾选管理员组(后面再给普通用户组)
名称 本地存储
存储驱动 本地(Local)
文件命名规则 {Y}/{m}/{d}/{md5}.{ext}
访问域名 填你当前的访问地址(后续配了域名再改)
文件路径 /app/storage/app/uploads

💡 文件命名建议:{Y}/{m}/{d}/{md5}.{ext} → 按年月日分文件夹,MD5 避免重名。

5.2 接入外部云存储(进阶,双重保险)

Lsky Pro 支持把图片直接存到云存储上,即使 NAS 挂了也能访问。

5.2.1 阿里云 OSS

配置项
AccessKeyId 阿里云 RAM 账号的 AccessKey
AccessKeySecret 对应的 Secret
Bucket 你的 OSS 桶名
地域节点(Endpoint) oss-cn-hangzhou.aliyuncs.com(改成你的区域)
自定义 CDN 域名 CDN 加速域名(可选)

5.2.2 腾讯云 COS

配置项
SecretId 腾讯云 API 密钥 SecretId
SecretKey 对应的 SecretKey
Bucket COS 桶名 + APPID(如 mybucket-1250000000
所属地域 ap-guangzhou(改成你的区域)

5.2.3 AWS S3 / Cloudflare R2 / MinIO

配置项
AccessKeyId S3 兼容密钥
AccessKeySecret 对应的 Secret
Bucket 存储桶名
地域节点 auto(R2 填 auto,真实 S3 填区域)

六、PicGo 客户端配置(自动化上传)

6.1 获取 Lsky Pro 的 API Token

⚠️ 这是最关键的一步,Token 是 PicGo 连接图床的钥匙。

方法一:在 Lsky 后台直接获取(推荐)

  1. 登录 Lsky Pro 后台
  2. 「系统」「接口」 → 查看接口地址
  3. 记录 API 基础 URL:http://你的IP:8000/api/v1
  4. 用下面的工具生成 Token:

方法二:用 curl 命令获取(一条命令搞定)

curl -X POST "http://你的NAS_IP:8000/api/v1/tokens" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"email":"你设置的管理员邮箱","password":"你设置的管理员密码"}'

返回示例:

{
  "status": true,
  "message": "success",
  "data": {
    "token": "1|aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890"
  }
}

方法三:用 Postman(图形界面)

配置
Method POST
URL http://你的NAS_IP:8000/api/v1/tokens
Headers Accept: application/json
Content-Type: application/json
Body (raw JSON) {"email":"admin@example.com","password":"your_password"}

从响应中复制 token 的值(那一段长字符串)。

6.2 配置 PicGo

6.2.1 安装 Lsky 插件

  1. 打开 PicGo
  2. 左侧 → 「插件设置」
  3. 搜索框输入 lankonglsky
  4. 找到 lankong(或 lsky-pro)插件 → 点击「安装」

6.2.2 配置 Lsky 连接

PicGo → 「图床设置」 → 找到 「lankong」「兰空图床」

配置项 示例
Server 你的 Lsky 地址 http://192.168.1.100:8000
Auth Token 上面获取的 token 1|aBcDeFgHiJkLmNoPqRsTuVwXyZ1234
策略 ID 存储策略的 ID 去 Lsky 后台 → 储存策略 → 看策略 ID 号

💡 策略 ID 可选填,不填则使用默认存储策略。

6.2.3 测试上传

  1. 拖一张图片到 PicGo 上传区
  2. 上传成功 → 链接自动复制
  3. 浏览器打开链接验证

七、Typora / Obsidian 自动上传集成

7.1 Typora 配置

  1. Typora → 文件偏好设置图像
  2. 插入图片时 → 选择 「上传图片」
  3. 上传服务 → 选择 「PicGo (app)」
  4. PicGo 路径 → 选 PicGo 安装目录(Windows 如 C:\Program Files\PicGo\PicGo.exe

✅ 之后在 Typora 粘贴截图,会自动调用 PicGo → Lsky → 返回链接!

7.2 Obsidian 配置

  1. 社区插件搜 Image Auto Upload
  2. 安装后在设置中选 PicGo
  3. 粘贴图片自动上传

7.3 VS Code 配置

安装 Paste ImageMarkdown Image 插件,配置 PicGo 路径。


八、外网访问完整方案

图床建好了,但在公司想用?有三种方式让外面能访问到你的 NAS 图床。

8.1 方案 A:群晖 DDNS + 反向代理(有公网 IPv4,最推荐)

前提:确认你有公网 IPv4

# SSH 登录 NAS,查看你的公网 IP
curl ifconfig.me

然后登录路由器管理页,查看 WAN 口 IP。两个一致 = 有公网 IP。

步骤 1:配置群晖 DDNS

  1. 群晖 DSM → 控制面板外部访问DDNS
  2. 点击「新增」
配置项
服务供应商 Synology(免费送 xxx.synology.me 域名)
或选 阿里云 / 腾讯云 / Cloudflare(需自有域名)
主机名称 mypic.synology.me
用户名/密码 按提示填写
外部地址 保持 WAN 自动获取
  1. 点击「测试联机」→ 正常后点「确定」

步骤 2:申请 SSL 证书(HTTPS 必备)

  1. DSM → 控制面板安全性证书
  2. 点击「新增」→ 「从 Let's Encrypt 获取证书」
  3. 域名填 mypic.synology.me
  4. 申请成功后,点「配置」→ 把对应服务绑上证书

步骤 3:配置反向代理

  1. DSM → 控制面板登录门户高级反向代理服务器
  2. 点击「新增」:
来源 配置
协议 HTTPS
主机名 mypic.synology.me
端口 443
HSTS 勾选
目的地 配置
协议 HTTP
主机名 localhost
端口 8000
  1. 保存

步骤 4:路由器端口转发

登录路由器后台 → 端口转发 / 虚拟服务器 → 添加:

配置项
外部端口 443(HTTPS)
内部 IP 群晖的内网 IP(如 192.168.1.100
内部端口 443
协议 TCP

✅ 现在浏览器访问 https://mypic.synology.me 就能到你的图床了!

⚠️ 安全提示

  • 别开 8000 端口! 外网一律走 443(HTTPS)
  • 把 PicGo 和 Typora 里的 Server 地址改成 https://mypic.synology.me

8.2 方案 B:公网 IPv6 + DDNS(没有 IPv4 时)

如果你的宽带只有 IPv6(移动宽带常见),也能用。

步骤 1:确认 IPv6

ip -6 addr show | grep global
# 有 240e:xxx 或 2409:xxx 开头的地址就是公网 IPv6

步骤 2:用 DDNS-GO 做动态解析

# Docker 部署 DDNS-GO
docker run -d \
  --name ddns-go \
  --restart=always \
  --net=host \
  -v /volume1/docker/ddns-go:/root \
  jeessy/ddns-go
  1. 浏览器打开 http://你的NAS_IP:9876
  2. DNS 服务商选 阿里云腾讯云Cloudflare
  3. 填写 AccessKey → 输入你的域名
  4. IPv6 选择「通过接口获取」
  5. 保存

步骤 3:群晖反向代理(同方案A)

步骤 4:⚠️ 关键——客户端也需要 IPv6

只有访问你的设备也有 IPv6 时才能访问。手机用 4G/5G 一般都有 IPv6。


8.3 方案 C:内网穿透(啥公网都没有)

如果你没有公网 IP,只能用内网穿透。推荐三个:

服务 免费额度 速度 稳定性
Cloudflare Tunnel 免费无限 一般(海外中转) ⭐⭐⭐⭐⭐
frp(自建) 免费(需一台云服务器) ⭐⭐⭐⭐
ZeroTier 免费 25 设备 直连飞快 ⭐⭐⭐

Cloudflare Tunnel 配置(推荐,完全免费)

  1. 登录 Cloudflare → Zero Trust → Tunnels
  2. 创建 Tunnel → 选 Docker 部署
  3. 运行命令(在你的 NAS 上):
docker run -d \
  --name cloudflared \
  cloudflare/cloudflared:latest \
  tunnel --no-autoupdate run \
  --token 你的Tunnel_Token
  1. 在 Cloudflare Dashboard 配置 Public Hostname:
    • 域名:img.yourdomain.com
    • 服务:http://lsky-pro:8000

✅ 现在 https://img.yourdomain.com 就能访问图床了!(Cloudflare 自动签发 SSL)


九、日常维护与安全

9.1 数据备份(一定要做!)

# 每天凌晨 3 点自动备份(加入 crontab)
# 备份数据库
docker exec lsky-mysql mysqldump -u lsky -p'LskyUser2025!' lsky \
  > /volume1/backup/lsky/lsky_db_$(date +%Y%m%d).sql

# 备份图片文件
tar -czf /volume1/backup/lsky/lsky_images_$(date +%Y%m%d).tar.gz \
  /volume1/docker/lsky-pro/storage/uploads/

# 只保留最近 30 天的备份
find /volume1/backup/lsky/ -name "*.tar.gz" -mtime +30 -delete
find /volume1/backup/lsky/ -name "*.sql" -mtime +30 -delete

9.2 版本更新

cd /volume1/docker/lsky-pro
docker compose down
docker compose pull     # 拉取最新镜像
docker compose up -d    # 重新启动

9.3 安全清单

事项 操作
✅ 管理员密码 12 位以上,包含大小写字母 + 数字 + 符号
✅ MySQL 密码 和 docker-compose.yml 里一样长就行
✅ 外网只开 443 路由器别暴露 8000/3306 端口
✅ SSL 证书 Let's Encrypt 自动续期
✅ Token 管理 定期更换,泄露立刻删除重新生成
✅ 登录失败限制 Lsky 后台 → 系统 → 安全设置 → 开启

9.4 容量管理

Lsky Pro 后台 → 用户 → 编辑用户 → 总容量,建议设置:

  • 每个用户:2GB ~ 10GB(够用很久)
  • 上传单文件限制:10MB(大部分图片 <10MB)

十、常见踩坑

问题 原因 解决
容器启动失败 端口冲突 netstat -tlnp \| grep 8000 检查
数据库连接失败 密码不一致 检查 docker-compose.yml 三处密码
安装时连不上数据库 地址填了 localhost 改填 mysql(容器名)
图片上传 404 存储路径权限 chmod -R 755 ./storage
PicGo 上传超时 插件 URL 不对 Server 后面不要带 /api/v1
反向代理 502 容器名解析不到 确保反向代理目的填 localhost:8000
外网访问不了 运营商封了 80/443 换个非标端口(如 8443),端口转发
Token 获取失败 邮箱密码不对 用管理员邮箱 + 密码(不是 MySQL 密码)

十一、方案总结

┌─────────────────────────────────────────────────────┐
│                    Typora / Obsidian                 │
│                   粘贴图片,自动上传                   │
└───────────────────────┬─────────────────────────────┘
                        │
                        ▼
                ┌───────────────┐
                │     PicGo     │  ← lankong 插件 + Token
                └───────┬───────┘
                        │ HTTP API
                        ▼
┌─────────────────────────────────────────────────────┐
│                    你的 NAS                           │
│  ┌─────────────────────────────────────────────────┐│
│  │  Docker Compose                                 ││
│  │  ┌─────────┐  ┌────────┐  ┌──────────────────┐ ││
│  │  │  MySQL  │◄─┤ Lsky   ├─►│     Redis        │ ││
│  │  │  8.0    │  │  Pro   │  │       7          │ ││
│  │  └─────────┘  └───┬────┘  └──────────────────┘ ││
│  │                   │ 图片文件                      ││
│  │            ┌──────▼──────┐                       ││
│  │            │  本地硬盘    │  ← /volume1/...       ││
│  │            └─────────────┘                       ││
│  └─────────────────────────────────────────────────┘│
└───────────────────────┬─────────────────────────────┘
                        │ 反向代理 + SSL
                        ▼
              ┌─────────────────┐
              │  https://域名   │  ← 外网访问
              └─────────────────┘
                        │ (可选)
          ┌─────────────┼─────────────┐
          ▼             ▼             ▼
    阿里云 OSS    Cloudflare R2   腾讯云 COS
    (远程备份)     (远程备份)      (远程备份)

图片存在你自己的硬盘上,域名是你的,SSL 是你的,一切都在你手里。没有月费,没有数据审查,不会跑路。

分享到:

发表评论

请先 登录 再评论