【自建图床 02】VPS 自建图床(Chevereto/Lychee/PicGo):图片自由管理(2026)
2026-08-15 · DevCraft Studio
不想再把图片塞进第三方图床担惊受怕?本文对比 Chevereto、Lychee 与 Lsky Pro 等开源图床,讲清 VPS 上 Docker 部署、PicGo 客户端配合、对象存储后端以及防盗链与带宽成本。
自建相册图床 · 共 2 篇
延伸阅读
更多相关攻略推荐:Ollama AI系列(2):VPS上的AI推理与API应用、Ollama AI系列(2):VPS上的AI推理与API应用、【CPU选型 01】搭载 AMD Ryzen 9950X 的 VPS、ARM / Ampere 席卷 VPS:性价比真香还是兼容陷阱?、Ollama AI系列(2):VPS上的AI推理与API应用。
一、为什么要在 VPS 上自建图床
很多人的第一张图床是某个免费的「公共图床」,图方便、无需自己维护。但隐患往往在你最依赖它的时候爆发:服务悄悄关停、历史图片被批量删除、突然要求实名或加强审核、免费额度被砍、防盗链规则说变就变。写技术博客的人最怕这一幕——某天打开旧文章,配图全变成 404 裂图。
把图片托管回自己的 VPS 上,本质上是把「数据主权」拿回来。好处很直接:数据自主,文件永远在你买下的磁盘里;稳定可控,不会因别人的商业决策而突然消失;无平台审核,你决定什么能传、什么不能传;高度可定制,外链格式、压缩、水印、权限都由你定。代价则是你需要一点点运维:备份、更新、看住带宽。本文的目标,就是让你用最低的学习成本,把这套系统稳稳立起来。
需要说明的是,自建图床不是「全有或全无」。轻量需求可以只把图床当写作配图库,配合对象存储把重活外包;重度需求则可以做成带多用户、带相册的公共图站。下面先解决选型的难题。
二、三大主流开源图床横评:Chevereto / Lychee / Lsky Pro
目前活跃度最高、资料最完整的三个开源方案,取向其实各不相同。
Chevereto 是老牌的全功能图床/相册系统,首版发布于 2009 年,至今累计约 261 个版本,长期由 Rodolfo Berríos 一人主导维护。它定位最接近「商业级图床」:用户账户、相册、管理后台、HTML5 拖拽上传、多存储后端、CDN、主题、多语言一应俱全,还能当社区图站、个人作品集或数字资产库来用。授权上分三档:Free(AGPL,永久免费)、Lite(约 10 美元/月)、Pro(约 99 美元/年)。关键点在于,2024 年的 4.4.0 版本把「多用户」和「AWS S3 / S3 兼容存储 API」下沉成了核心免费功能,这意味着 Free 版也终于能接对象存储了。不过官方维护的 Free 版是基于 3.x 的老分支,更新慢、且去除了外部存储之外的部分商业能力;想用最新特性通常要付费或找社区 Fork。Docker 镜像可用社区维护的 nmtan/chevereto。
Lychee 更偏「照片管理/画廊」而不是「图床工具」。它是基于 Laravel 的 PHP 应用,采用 MIT 授权。2024 年推出的 v7 用 FrankenPHP 重写,官方称性能比旧版快 3–4 倍,同时把监听端口从 80 改成了 8000。资源占用上,空闲约 200 MB 内存,处理大文件上传时可能冲到 2 GB;数据库支持 MySQL、MariaDB、PostgreSQL 或 SQLite;还支持通过 GitHub、Google、Mastodon、Keycloak、Authentik、Authelia 等做 OAuth 登录。它最适合做作品集、活动摄影、公开画廊分享。但要说清楚:Lychee 不是 Google Photos 的替代品——它没有移动端自动上传、没有 AI 搜索、没有人脸识别,想要那些能力应该去看 Immich。镜像为 ghcr.io/lycheeorg/lychee:latest。
Lsky Pro(兰空图床) 是近年来最热门的国产开源图床,PHP 编写、AGPL-3.0 授权,界面现代、功能对中文用户极其友好。它的亮点在「存储驱动」和「图片处理」:存储可接本地、阿里云 OSS、腾讯云 COS、七牛、又拍、MinIO、S3 兼容、FTP、WebDAV;上传支持拖拽、粘贴、批量与 API;处理支持缩放、裁剪、文字/图片水印、压缩与格式转换;管理上支持相册、多用户、角色组、权限、访问统计与外链管理;安全侧自带内容审核(鉴黄)、防盗链与访问密码。对外提供 /api/v1 接口,用 Bearer Token 做 HTTP Basic 验证,并带 X-RateLimit 限流响应头。官方 Docker 镜像 halcyonazure/lsky-pro-docker 支持 amd64 与 arm64(因开源版一度久未更新,自动构建曾暂停)。最低要求 PHP 8.0.2,数据库可用 SQLite 3.8.8+ 或 MySQL 5.7+。
一句话选型:想要「公共图站 / 全功能」选 Chevereto;想要「漂亮画廊 / 照片管理」选 Lychee;想要「写作配图 / API 托管 / 中文友好」选 Lsky Pro。
三、用 Docker 快速部署
无论选哪个,Docker 都是最省心的安装方式——一次写好编排文件,换机器、升级、回滚都干净。下面给出三套可直接用的片段。
Chevereto(社区镜像,数据卷分离图片与数据库):
docker run -d --name chevereto \
-p 8112:80 \
-v /opt/chevereto/images:/var/www/html/images \
-v /opt/chevereto/mysql:/var/lib/mysql \
nmtan/chevereto启动后访问 http://你的IP:8112 走初始化向导,建议开启私有模式,防止外人随便传图;上传目录记得 chmod -R 777 修正权限。
Lychee(v7 起端口 8000,必须提供 APP_KEY):
services:
lychee:
image: ghcr.io/lycheeorg/lychee:latest
container_name: lychee
ports:
- "8000:8000"
volumes:
- ./lychee/uploads:/app/public/uploads
- ./lychee/logs:/app/storage/logs
environment:
APP_URL: http://your-domain:8000
DB_CONNECTION: mysql
DB_HOST: lychee_db
DB_DATABASE: lychee
DB_USERNAME: lychee
DB_PASSWORD: your_strong_password
APP_KEY: base64:xxxxxxxx
depends_on:
lychee_db:
condition: service_healthy
restart: unless-stopped
lychee_db:
image: mariadb:11
environment:
MYSQL_DATABASE: lychee
MYSQL_USER: lychee
MYSQL_PASSWORD: your_strong_password
MYSQL_ROOT_PASSWORD: root_strong_password
volumes:
- lychee_db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 5s
timeout: 3s
retries: 10
restart: unless-stopped
volumes:
lychee_db:其中 APP_KEY 用 openssl rand -base64 32 生成后填入,丢失它会令所有已有会话失效;上传目录的宿主所有权要和容器内的 PUID/PGID 匹配,否则会报权限错误。若走反代,把请求转发到 8000 端口并在 .env 里把 APP_URL 改成完整 HTTPS 地址。
Lsky Pro(SQLite 方案最轻,适合个人):
docker run -d --name lsky-pro \
--restart unless-stopped \
-p 9080:80 \
-v /opt/lsky/data:/var/www/html \
halcyonazure/lsky-pro-docker:latest首次访问 http://你的IP:9080 完成环境检测、选 SQLite、设管理员邮箱密码即可。若要做团队图床,可改用 MySQL 8.0 做数据库容器。注意开源版维护节奏不稳,部署后务必定时备份数据卷。
四、用 PicGo 客户端打通写作流(API / Token)
图床搭好只是第一步,真正的爽点是「写作时粘贴即上传」。桌面端首选 PicGo(Molunerfinn/PicGo,跨 Windows/macOS/Linux),它能把本地截图自动推到你的图床并回写外链。
以 Chevereto 为例:在图床后台 仪表盘 → 设置 → API 复制密钥;PicGo 里装 chevereto 插件,图床设置填 API 地址 http://你的域名:8112/api/1/upload 并粘贴 Key,点测试上传即可。配合 Typora,在「偏好设置 → 图像」里选「上传图片」、上传服务用 PicGo,之后 Ctrl+V 粘图就会自动上云并替换成外链,分享的 Markdown 在任何地方都能正常显示。
对 Lsky Pro,则走自定义图床/自定义命令,接口地址填 http://你的域名:9080/api/v1,请求头带 Authorization: Bearer 你的Token、Accept: application/json。Token 在后台接口页获取,注意它是一次显示、再次获取会使旧 Token 作废。Obsidian 等笔记软件同样能调用 PicGo。移动端有 flutter-picgo(Android/iOS)和 PicHoro(Android)可选,出门在外也能上传。
一个小提醒:API 密钥等同于「上传权限」,别泄露;若 VPS 在公网,建议给图床套 HTTPS 并限制来源,避免被拿去乱传。
五、把存储后端换成对象存储(S3 / Cloudflare R2)
图床最怕两件事:磁盘写满、流量超标。把存储后端换成对象存储,等于把「扩容」和「出口带宽」这两块心病外包出去。Chevereto 4.4+ 已把 S3 兼容存储做成核心能力,Lsky Pro 更是原生支持一票 S3 兼容驱动,配置上填 AccessKey、SecretKey、Bucket、Endpoint 即可。
这里强烈建议看看 Cloudflare R2。它 100% S3 兼容,最大卖点是出口流量(egress)永久免费。2026 年的资费:标准存储 $0.015/GB-月,低频存储 $0.01/GB-月;A 类操作(写、列)每百万次 $4.50,B 类操作(读)每百万次 $0.36;免费额度含 10 GB 存储、100 万次 A 类、1000 万次 B 类操作/月——后者折算下来约等于每月 3–4 次请求/秒免费。对比之下,Amazon S3 标准存储约 $0.023/GB-月,且出站流量约 $0.09/GB(前 100 GB/月免费,之后阶梯计费),图片一旦被大量外链,出口费会迅速超过存储费。
结论很清晰:如果你的图经常被外部页面引用、流量可观,R2 的「零出口费」几乎能帮你省掉最大的一笔开销;如果图片基本只在站内小范围访问,直接放 VPS 本地磁盘反而最简单。折中方案是「热图本地、冷图 / 大文件进 R2」。
六、防盗链:守住带宽的最后一公里
即使你把图床藏在内网,只要外链泄露,别人就能把你的图片贴到高流量页面上「白嫖」你的带宽——这就是盗链。最经典的防线是 Nginx 的 Referer 校验:
location ~* \.(jpg|jpeg|png|gif|webp|bmp|ico)$ {
valid_referers none blocked www.example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}含义拆解:none 放行「没有 Referer 头」的请求(比如用户在浏览器直接打开图片链接);blocked 放行「Referer 被防火墙或代理抹掉」的请求;*.example.com 用通配符放行你自己的子域。命中非法来源时可返回 403,也可以 rewrite 到一张「禁止盗链」提示图,体验更友好。一个重要 SEO 提醒:搜索引擎的图片抓取也靠外链,记得把 *.google.com、*.bing.com 等加入白名单,否则你的图片会从搜索结果里消失。
也要认清局限:Referer 是请求头里的字段,可以被伪造,所以它挡得住「复制链接直接贴」的懒人盗链,挡不住刻意伪造请求头的脚本。要做到更硬核的防护,应给每张图生成带签名、带有效期的临时 URL(signed URL),让链接用完即废。
七、算笔账:带宽与存储成本
自建图床的真实成本来自三块:VPS 本身、存储、流量。一台 2 GB 内存的入门 VPS 跑 Chevereto 或 Lychee 的空闲占用绰绰有余(Lychee 空闲约 200 MB),月付通常在 3–5 美元区间,已经包含一定量的月流量(常见 1 TB 上下)。
如果图片全存本地:存储≈VPS 磁盘(通常已含在月费里),但每一次外链访问都吃 VPS 流量,超出套餐就要按量付费,单价往往不便宜。如果改用 R2 做后端:R2 出口免费,你只需付存储与请求费——假设存 10 GB、每月产生 100 GB 外链读取,存储约 10 × 0.015 = $0.15/月,读取 100 GB 折算约 1 亿次 B 类操作(远超免费额度,约 $36 量级),但流量费为零;若是 S3,同样 100 GB 出口还要再叠加约 $9 出口费。所以「对象存储 + 零出口」模型,本质是用「可预测的小额存储/请求费」换掉「不可预测的出口费」。
务实建议:个人博客配图量级小,本地磁盘 + 反代 CDN 足矣;一旦图片要被公开外链、或准备做图床服务对外,尽早切 R2,并把图床前面套一层 Cloudflare CDN 进一步吃缓存、压成本。
八、合规、备份与运维提醒
自己当图床主,责任也到自己头上。内容合规是第一条:公开图床最怕被人传违规图(尤其是涉黄内容),轻则被机房拔线、重则担责。Lsky Pro 自带接入 ModerateContent 的鉴黄接口(官方宣称识别率约 99%),建议公开场景务必开启;Chevereto/Lychee 也可在前层做内容扫描或限制匿名上传。
备份不能省:要备份两样东西——图片文件(Chevereto 的 images 目录、Lychee 的 uploads、Lsky Pro 的 /var/www/html)和数据库(MySQL/MariaDB 用 mysqldump,SQLite 直接拷文件)。至少每月一次全量,重要数据可日级增量。Lychee 的 APP_KEY 同样要备份,丢了会话全废。
运维上:对外服务一律套 HTTPS(Lychee 反代转发到 8000、Chevereto/Lsky Pro 反代转发到各自端口);容器设置 restart: unless-stopped 自动拉起;留意各项目维护节奏——Chevereto Free 与 Lsky Pro 开源版更新都不算快,订阅安全公告、定期升级,避免漏洞被利用。
#自建图床 #VPS #Chevereto #Lychee #LskyPro #PicGo #对象存储