NAS 自建图床完整实操手册:Lsky Pro + Docker
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)
- 打开 套件中心
- 搜索 Container Manager(DSM 7.2+)或 Docker(DSM 7.1 及以下)
- 点击安装,等待完成
2.2 威联通 NAS(QNAP)
- 打开 App Center
- 搜索 Container Station
- 安装即可
2.3 绿联 NAS(UGOS)
- 打开 应用中心
- 搜索 Docker
- 安装
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)
- 安装 WSL2:管理员 PowerShell 执行
wsl --install - 下载 Docker Desktop:https://www.docker.com/products/docker-desktop
- 安装后启动
三、部署 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 后台直接获取(推荐)
- 登录 Lsky Pro 后台
- 「系统」 → 「接口」 → 查看接口地址
- 记录 API 基础 URL:
http://你的IP:8000/api/v1 - 用下面的工具生成 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/jsonContent-Type: application/json |
| Body (raw JSON) | {"email":"admin@example.com","password":"your_password"} |
从响应中复制 token 的值(那一段长字符串)。
6.2 配置 PicGo
6.2.1 安装 Lsky 插件
- 打开 PicGo
- 左侧 → 「插件设置」
- 搜索框输入
lankong或lsky - 找到 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 测试上传
- 拖一张图片到 PicGo 上传区
- 上传成功 → 链接自动复制
- 浏览器打开链接验证
七、Typora / Obsidian 自动上传集成
7.1 Typora 配置
- Typora → 文件 → 偏好设置 → 图像
- 插入图片时 → 选择 「上传图片」
- 上传服务 → 选择 「PicGo (app)」
- PicGo 路径 → 选 PicGo 安装目录(Windows 如
C:\Program Files\PicGo\PicGo.exe)
✅ 之后在 Typora 粘贴截图,会自动调用 PicGo → Lsky → 返回链接!
7.2 Obsidian 配置
- 社区插件搜
Image Auto Upload - 安装后在设置中选 PicGo
- 粘贴图片自动上传
7.3 VS Code 配置
安装 Paste Image 或 Markdown Image 插件,配置 PicGo 路径。
八、外网访问完整方案
图床建好了,但在公司想用?有三种方式让外面能访问到你的 NAS 图床。
8.1 方案 A:群晖 DDNS + 反向代理(有公网 IPv4,最推荐)
前提:确认你有公网 IPv4
# SSH 登录 NAS,查看你的公网 IP
curl ifconfig.me
然后登录路由器管理页,查看 WAN 口 IP。两个一致 = 有公网 IP。
步骤 1:配置群晖 DDNS
- 群晖 DSM → 控制面板 → 外部访问 → DDNS
- 点击「新增」
| 配置项 | 值 |
|---|---|
| 服务供应商 | Synology(免费送 xxx.synology.me 域名)或选 阿里云 / 腾讯云 / Cloudflare(需自有域名) |
| 主机名称 | 如 mypic.synology.me |
| 用户名/密码 | 按提示填写 |
| 外部地址 | 保持 WAN 自动获取 |
- 点击「测试联机」→ 正常后点「确定」
步骤 2:申请 SSL 证书(HTTPS 必备)
- DSM → 控制面板 → 安全性 → 证书
- 点击「新增」→ 「从 Let's Encrypt 获取证书」
- 域名填
mypic.synology.me - 申请成功后,点「配置」→ 把对应服务绑上证书
步骤 3:配置反向代理
- DSM → 控制面板 → 登录门户 → 高级 → 反向代理服务器
- 点击「新增」:
| 来源 | 配置 |
|---|---|
| 协议 | HTTPS |
| 主机名 | mypic.synology.me |
| 端口 | 443 |
| HSTS | 勾选 |
| 目的地 | 配置 |
|---|---|
| 协议 | HTTP |
| 主机名 | localhost |
| 端口 | 8000 |
- 保存
步骤 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
- 浏览器打开
http://你的NAS_IP:9876 - DNS 服务商选 阿里云 或 腾讯云 或 Cloudflare
- 填写 AccessKey → 输入你的域名
- IPv6 选择「通过接口获取」
- 保存
步骤 3:群晖反向代理(同方案A)
步骤 4:⚠️ 关键——客户端也需要 IPv6
只有访问你的设备也有 IPv6 时才能访问。手机用 4G/5G 一般都有 IPv6。
8.3 方案 C:内网穿透(啥公网都没有)
如果你没有公网 IP,只能用内网穿透。推荐三个:
| 服务 | 免费额度 | 速度 | 稳定性 |
|---|---|---|---|
| Cloudflare Tunnel | 免费无限 | 一般(海外中转) | ⭐⭐⭐⭐⭐ |
| frp(自建) | 免费(需一台云服务器) | 快 | ⭐⭐⭐⭐ |
| ZeroTier | 免费 25 设备 | 直连飞快 | ⭐⭐⭐ |
Cloudflare Tunnel 配置(推荐,完全免费)
- 登录 Cloudflare → Zero Trust → Tunnels
- 创建 Tunnel → 选 Docker 部署
- 运行命令(在你的 NAS 上):
docker run -d \
--name cloudflared \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate run \
--token 你的Tunnel_Token
- 在 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 是你的,一切都在你手里。没有月费,没有数据审查,不会跑路。
发表评论