在写博客、文档或技术文章时,我们经常需要插入图片以增强内容的可读性和吸引力。然而,直接在文章中嵌入大量图片会导致项目体积膨胀,同时也不便于图片的统一管理与复用。
目前主流的解决方案有:
其中,自建图床服务具有以下优势:
基于以上考虑,我们决定调研并搭建一套自己的图床系统。
我们的图床解决方案需要满足以下需求:
经过调研,我们对比了几款主流的开源图床解决方案:
特性 | Lychee | Lsky Pro | Chevereto | PicGo Server | Sapic |
---|---|---|---|---|---|
uPic支持 | ✅ | ✅ | ✅ | ✅ | ✅ |
Docker部署 | ✅ | ✅ | ✅ | ✅ | ✅ |
存储选项 | 本地 | 多种云存储 | 本地、S3、FTP | 多种云存储 | 本地、云存储 |
多图上传 | ✅ | ✅ | ✅ | ✅ | ✅ |
复制链接格式 | 有限 | 多种格式 | 多种格式 | 多种格式 | 多种格式 |
图片处理 | 基本 | 缩略图、水印 | 缩略图、编辑 | 依赖外部 | 基本 |
用户系统 | ✅ | ✅ 多用户 | ✅ 多用户 | ❌ | ✅ |
相册管理 | ✅ 强大 | ✅ | ✅ | ❌ | ✅ 基础 |
API完整度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
易用性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
社区活跃度 | 高 | 高 | 中高 | 中 | 中 |
维护状态 | 活跃 | 活跃 | 较活跃 | 不太活跃 | 较活跃 |
综合考虑各方面因素,我们选择了Lsky Pro作为我们的图床解决方案,主要原因如下:
确保服务器已安装以下软件:
我们将使用Docker Compose进行部署,以便于管理容器编排。参考jellyfina/lsky镜像进行部署。
mkdir -p lsky-pro/{uploads,conf,mysql,nginx}
cd lsky-pro
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:
docker-compose up -d
启动后可以通过 http://服务器IP:8089
访问Lsky Pro的安装页面。
如果需要通过域名访问,可以配置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;
}
建议为图床服务配置HTTPS,可以使用Let’s Encrypt免费证书:
# 安装certbot
apt install certbot python3-certbot-nginx -y
# 申请证书并自动配置Nginx
certbot --nginx -d img.example.com
Lsky Pro提供了直观的Web界面,主要功能包括:
uPic 是一款优秀的Mac上传工具,配置Lsky Pro如下:
https://img.example.com/api/v1/upload
(替换为您的域名)Token可以在Lsky Pro后台的"个人设置">"API Token"中获取。
Typora支持通过自定义命令上传图片:
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'
Lsky Pro支持多种云存储方式,配置步骤:
可以在管理后台配置图像优化选项:
建议定期备份数据库和上传的图片:
# 备份数据库
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)/
当Lsky Pro发布新版本时,可以通过以下步骤更新:
# 拉取最新镜像
docker-compose pull
# 重新构建并启动容器
docker-compose up -d --build
通过部署Lsky Pro图床,我们实现了一个功能完善、易用性强的图片托管解决方案。这个方案具有以下优势:
对于个人博客、团队文档或企业内容管理,Lsky Pro都是一个理想的图床解决方案。