选图床,先选存储后端
自建图床的程序很多,Lsky Pro、Chevereto、EasyImages、Lychee、ImgURL 各有各的拥趸。但真正决定这套系统能活多久的,不是界面好不好看,而是它把图片存在哪里、以及以后能不能换地方。
这个问题要最先想清楚,因为迁移成本最高。图片一旦堆到几百 GB,换存储后端意味着要么写脚本批量搬,要么停机搬,两种都不轻松。所以挑源码的时候,第一个要看的是它支持的存储策略够不够多,以及这些策略是不是"可切换"的。
Lsky Pro 在这个维度上做得比较完整:本地、阿里云 OSS、腾讯云 COS、七牛云、又拍云、标准 S3 协议都能接,后台可以配多个存储策略并按用户组分配。它的授权是 AGPL-3.0,GitHub 仓库 lsky-org/lsky-pro,Docker Compose 一条命令能起来,也支持传统 PHP + MySQL 手动安装。

图片由 AI 生成
要不要数据库,是第二条分水岭
图床源码大致分两派。一派是数据库驱动,Lsky Pro、Chevereto 属于这类,要 MySQL/MariaDB;另一派是无数据库,EasyImages、CloudImgs 这类,配置和元数据直接写文件。
数据库派的好处是检索、分组、权限、统计都能做,图片多了也不乱。代价是多一个要维护的东西——备份要连着数据库一起做,升级要留意表结构变更,MySQL 挂了整个图床就打不开。
无数据库派部署快、资源占用低,在 ARM 架构的入门级 NAS 上也能跑得动。适合个人笔记配图、临时分享这类场景。图片量上千之后,缺了索引的检索体验会明显变差,这时候再想迁到数据库派就得重来一遍。
判断标准其实就两条:图片会不会超过五千张,以及有没有多人使用。两个都答"是",直接上数据库派。
Chevereto 这个选项要额外留意
Chevereto 是老牌方案,功能完整到能开商业图床——多用户、付费计划、广告位、高级统计都有。但它官方核心版本已经转向付费的 Chevereto Complete,免费开源版更新不再活跃,Nginx 下还需要配置特定的 location 伪静态规则,配错了路由直接失效。
如果你确实需要它的那套商业化功能,建议找社区里活跃的 Fork 版本,并且做好自己维护安全补丁的准备。用旧版免费版开一个对公网开放的图床,安全性上是有隐患的。
防盗链这件事,别只用 Referer
图床搭起来之后最先遇到的麻烦往往不是容量,是被人盗链。你的图片被挂到别人的站上,流量走你的账。
最常见的是 Referer 白名单:不在白名单里的来源直接拒绝或者返回占位图。够用,但很脆——Referer 是浏览器发的,可以伪造,而且部分隐私模式和内网穿透场景会不带 Referer,误伤正常访问。
更可靠的做法是在 URL 上做文章:签名 URL 或者带时间戳的临时链接。链接里带一个服务端算出来的签名和过期时间,过期就失效。代价是链接不能长期缓存,CDN 侧要相应调整缓存策略,动态图床页面本身也不该被长时间缓存。
实务上两者叠着用最划算:Referer 挡掉绝大部分随手盗链,签名 URL 用在付费下载、限时分享这类真正需要保护的资源上。

图片由 AI 生成
用 AGPL 的源码,什么情况算触发
Lsky Pro 和 Chevereto 都是 AGPL-3.0,这个协议比 GPL 多一条网络条款:如果你修改了源码并且通过网络提供服务,需要向使用者提供修改后的源码。
对自用图床来说,这条基本不触发——你不分发软件,只是用它提供服务,改了代码也没对外分发。但如果你的业务是把图床包装成服务卖给别人,那就落在 AGPL 的射程内了,要么开源你的改动,要么去找商业授权(Lsky Pro 有商业版 Lsky Pro+)。
顺带一提 Lychee 走的是 MIT,限制少得多,但它定位是相册而非图床,适合展示照片、不适合当外链图源。
上线前检查这几项
- 原图和缩略图分目录存:缩略图可以重建,原图不行。备份策略要区分对待
- 确认上传目录不可执行 PHP:Nginx 里显式 deny 掉,这是图床 getshell 最常见的入口
- 限制单文件体积和类型:SVG 要单独处理,它能内嵌脚本,直接放行等于开了 XSS 口子
- 备份要连配置一起:很多人只备份图片目录,忘了存存储策略配置,真要恢复时对接不上
- 先算出口带宽:图床的瓶颈几乎从来不是 CPU,是带宽。按日均访问量乘以平均图片体积估一下,别等账单来了才发现

