1. 项目背景
在写博客、文档或技术文章时,我们经常需要插入图片以增强内容的可读性和吸引力。然而,直接在文章中嵌入大量图片会导致项目体积膨胀,同时也不便于图片的统一管理与复用。
目前主流的解决方案有:
- 使用第三方图床服务(如SM.MS、ImgBB等)
- 基于云存储搭建图床(如七牛云、阿里云OSS等)
- 自建图床服务
其中,自建图床服务具有以下优势:
- 数据自主可控,无需担心第三方服务停止运营
- 无容量限制,可根据需要扩展
- 隐私保护更有保障
- 可定制化程度高
- 无需支付持续的服务费用
基于以上考虑,我们决定调研并搭建一套自己的图床系统。
2. 图床方案调研
2.1 需求分析
我们的图床解决方案需要满足以下需求:
- 支持多种上传方式(Web界面、API接口)
- 支持与常用的写作工具(如Typora、uPic等)集成
- 易于部署和维护(最好支持Docker部署)
- 界面美观,操作友好
- 支持图片管理功能(分类、删除、重命名等)
- 支持多种图片链接格式(直链、Markdown等)
- 可扩展性好,支持多种存储方式
2.2 主流开源图床对比
经过调研,我们对比了几款主流的开源图床解决方案:
特性 | Lychee | Lsky Pro | Chevereto | PicGo Server | Sapic |
---|---|---|---|---|---|
uPic支持 | ✅ | ✅ | ✅ | ✅ | ✅ |
Docker部署 | ✅ | ✅ | ✅ | ✅ | ✅ |
存储选项 | 本地 | 多种云存储 | 本地、S3、FTP | 多种云存储 | 本地、云存储 |
多图上传 | ✅ | ✅ | ✅ | ✅ | ✅ |
复制链接格式 | 有限 | 多种格式 | 多种格式 | 多种格式 | 多种格式 |
图片处理 | 基本 | 缩略图、水印 | 缩略图、编辑 | 依赖外部 | 基本 |
用户系统 | ✅ | ✅ 多用户 | ✅ 多用户 | ❌ | ✅ |
相册管理 | ✅ 强大 | ✅ | ✅ | ❌ | ✅ 基础 |
API完整度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
易用性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
社区活跃度 | 高 | 高 | 中高 | 中 | 中 |
维护状态 | 活跃 | 活跃 | 较活跃 | 不太活跃 | 较活跃 |
2.3 方案选择
综合考虑各方面因素,我们选择了Lsky Pro作为我们的图床解决方案,主要原因如下:
- 功能全面:支持多种上传方式、图片管理、多用户系统等
- 支持多种存储方式:可以灵活选择本地存储或云存储
- API设计合理:完全支持uPic等第三方上传工具
- Docker部署:有现成的Docker镜像,部署维护简单
- 社区活跃:更新维护频繁,Bug修复及时
- UI设计美观:用户体验良好
3. Lsky Pro部署方案
3.1 技术选型
- 容器化部署:Docker + Docker Compose
- 图床程序:Lsky Pro
- 数据库:MySQL
- Web服务器:Nginx(反向代理)
- 存储方式:本地存储(可扩展至云存储)
3.2 部署环境准备
确保服务器已安装以下软件:
- Docker (1.13.0+)
- Docker Compose (1.10.0+)
- Nginx (可选,用于反向代理)
3.3 使用Docker Compose部署
我们将使用Docker Compose进行部署,以便于管理容器编排。参考jellyfina/lsky镜像进行部署。
3.3.1 创建目录结构
mkdir -p lsky-pro/{uploads,conf,mysql,nginx}
cd lsky-pro
3.3.2 创建docker-compose.yml文件
version: '3'
services:
web:
image: jellyfina/lsky:v2.1-latest
restart: always
hostname: lsky-pro
container_name: lsky-pro
volumes:
- ./uploads:/var/www/html/storage/app/uploads
- ./conf:/var/www/html/config
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_DATABASE=lsky
- DB_USERNAME=lsky
- DB_PASSWORD=lsky_password
depends_on:
- mysql
ports:
- "8089:80"
networks:
- lsky-network
mysql:
image: mysql:8.0
restart: always
container_name: lsky-mysql
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_DATABASE=lsky
- MYSQL_USER=lsky
- MYSQL_PASSWORD=lsky_password
command: --default-authentication-plugin=mysql_native_password
networks:
- lsky-network
networks:
lsky-network:
3.3.3 启动服务
docker-compose up -d
启动后可以通过 http://服务器IP:8089
访问Lsky Pro的安装页面。
3.4 初始化配置
- 访问安装页面,按照向导完成初始安装
- 配置数据库信息(与docker-compose.yml中的保持一致)
- 设置管理员账号和密码
- 完成安装
3.5 Nginx反向代理配置(可选)
如果需要通过域名访问,可以配置Nginx反向代理:
server {
listen 80;
server_name img.example.com;
location / {
proxy_pass http://localhost:8089;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 上传文件大小限制
client_max_body_size 20M;
}
3.6 HTTPS配置(可选)
建议为图床服务配置HTTPS,可以使用Let's Encrypt免费证书:
# 安装certbot
apt install certbot python3-certbot-nginx -y
# 申请证书并自动配置Nginx
certbot --nginx -d img.example.com
4. 使用与集成
4.1 Web界面使用
Lsky Pro提供了直观的Web界面,主要功能包括:
- 图片上传:支持拖拽上传、多图上传、URL上传
- 图片管理:支持分组、标签、删除、重命名等操作
- 相册管理:可创建多个相册对图片进行分类
- 链接复制:支持多种格式的链接复制(URL、HTML、Markdown等)
4.2 与客户端工具集成
4.2.1 配置uPic上传
uPic 是一款优秀的Mac上传工具,配置Lsky Pro如下:
- 打开uPic偏好设置
- 添加新的图床服务
- 选择"自定义"图床
- 填写以下信息:
- 图床名称:Lsky Pro
- API地址:
https://img.example.com/api/v1/upload
(替换为您的域名) - 请求方式:POST
- 文件字段名:file
- 请求头:Authorization: Bearer [您的Token]
- 图片URL路径:data.links.url
Token可以在Lsky Pro后台的"个人设置">"API Token"中获取。
4.2.2 配置Typora上传
Typora支持通过自定义命令上传图片:
- 打开Typora偏好设置
- 选择"图像"
- 上传服务选择"Custom Command"
- 命令行中填写(使用curl上传到Lsky Pro):
curl -F "file=@$1" -H "Authorization: Bearer YOUR_TOKEN" https://img.example.com/api/v1/upload | grep -o '"url":"[^"]*"' | sed 's/"url":"//g' | sed 's/"//g'
4.3 进阶配置
4.3.1 配置云存储
Lsky Pro支持多种云存储方式,配置步骤:
- 登录管理后台
- 进入"存储策略"
- 点击"添加"
- 选择存储类型(如阿里云OSS、腾讯云COS等)
- 填写相应的配置信息
- 设置为默认(可选)
4.3.2 图像优化设置
可以在管理后台配置图像优化选项:
- 进入"系统设置">"图像设置"
- 配置水印、缩略图等选项
- 设置上传文件大小限制
- 配置允许的文件类型
5. 安全与维护
5.1 安全建议
- 更改默认端口,避免使用常见端口
- 启用HTTPS,保护数据传输安全
- 设置强密码,定期更换
- 限制上传文件类型和大小
- 定期检查并更新系统
5.2 备份策略
建议定期备份数据库和上传的图片:
# 备份数据库
docker exec lsky-mysql sh -c 'mysqldump -ulsky -plsky_password lsky' > backup/lsky_db_$(date +%Y%m%d).sql
# 备份上传的图片
rsync -avz lsky-pro/uploads/ backup/uploads_$(date +%Y%m%d)/
5.3 更新维护
当Lsky Pro发布新版本时,可以通过以下步骤更新:
# 拉取最新镜像
docker-compose pull
# 重新构建并启动容器
docker-compose up -d --build
6. 总结
通过部署Lsky Pro图床,我们实现了一个功能完善、易用性强的图片托管解决方案。这个方案具有以下优势:
- 数据自主可控,无需依赖第三方服务
- 支持多种上传方式,适合各种使用场景
- 部署维护简单,使用Docker一键部署
- 可扩展性强,支持多种存储方式
- 界面美观,用户体验好
对于个人博客、团队文档或企业内容管理,Lsky Pro都是一个理想的图床解决方案。
评论区