价值 10000 美元的开源 PHP图床程序

LitePic:一个写给自己的图床

首页

惭愧得很,这个程序我断断续续更新了差不多一年。如果不是 LitePic.io 域名提醒续费,我差点又把它忘了。查了一下,域名是 2025-05-30 注册的——那时我刚学会用 VS Code 配 Copilot 改代码。从开始到现在大约两万行,是时候再拿出来说一说。中间功能加了又减、页面和后台也翻过几轮;到 3.7 已经能开可选多用户,不再只是「我和朋友两人用的私货」。

说程序之前先说我自己。我大抵是有点毛病:任何想法敲第一行代码之前,一定要先注册域名。.com / .net 不行就最低 .ai / .io,再不行才轮到 .sb、.ga 这类。趣域、SAV、Cloudflare、Name.com、腾讯云、阿里云加起来三百多个域名,这么多年好像一个都没卖出去——当然我也没认真卖过,倒是买域名花了不少钱。

现在文章更新频率很低,每天忙着用 AI 做程序员的梦。做外贸没吃的苦,全特么吃到这儿了:熬夜是小事,思路卡住就拽头发,感觉都快秃了。公司外贸从订单到销售的整套系统、自己的博客 Utterlog、图床平台 toimg.com、单机/自托管图床 LitePic,再加上别的零碎,projects 里三十多个项目。每天除了固定几块,逮着哪个顺眼就完善哪个。除了 WordPress 插件,主题我一个都还没开源。

再说这张图床。其实我自己真正「重度用图床」的场景并不多。项目大概从去年下半年开始写,很长一段时间都是个人版:上传、转格式、压缩、外链,主要是我和 菲克 在用。中间大大小小修了几十次;印象里连同这次,整体推倒重来级别的大改也有好几轮——页面风格、目录结构、队列和存储,动起来都不小。

好景不长的是:刚改完一版,睡一觉又能把自己否定掉。五一前后又折腾过一轮;平时周五早上四五点起来写也是常态。最近为了把架构和交互再捋顺,Codex、Claude 轮着上——审查、大段实现、再核查——token 烧得很凶。按标价算很吓人,还好多半是订阅,真实成本没那么夸张;但到发这篇的时候,也还谈不上「完全收工」,后面大概还得继续磨。

中间也试过让别的模型「简单改改就行」。AI 太主动:加功能容易臃肿,一说删又删出一串问题,再回头修。后来基本是 Codex 扛实现、再交叉检查,比单靠一个模型稳一点。

LitePic 是什么

轻量自托管图床:PHP + SQLite,推荐 FrankenPHP(内置 Caddy)一条命令跑起来;也支持 Nginx / 宝塔(记得配伪静态)。默认仍是单管理员;需要时再在设置里打开多用户。

设计上坚持先入库,再处理:上传只把原图安全落下,缩略图、压缩、WebP/AVIF、水印、远程同步进队列异步做。某个环节挂了,原图和库里的记录也不至于一起丢。

上传页面
图库页面
设置页面

功能概览(按现在的 3.7)

上传

  • 点击 / 拖拽 / 粘贴上传
  • 多文件队列,失败可单独重试
  • 上传后即时返回链接
  • 常见图片格式:JPG、PNG、GIF、WebP、AVIF、HEIC、SVG、ICO、BMP、TIFF 等
  • 允许格式与处理策略可在后台改
  • 磁盘文件名随机化,原名仅作展示

图片处理(异步队列)

  • 缩略图、压缩(TinyPNG / ImageMagick / GD)
  • 自动转 WebP / AVIF,可保留或丢掉原图
  • 文字水印 / PNG 水印,可上传字体
  • Worker:请求后 drain / Cron / 后台手动触发

图库与相册

  • 图库批量选择、删除、侧栏信息
  • 相册:公开 / 未列出 / 私密 / 密码;宫格或瀑布流公开页
  • 访问次数统计(可选)
  • 复制 URL / HTML / Markdown / BBCode

多用户(可选,默认关)

  • 关闭:和以前一样,管理员密码 + Passkey
  • 邀请制 / 开放注册:每人独立图库、相册与配额
  • 可选 Google / GitHub 登录、SMTP 发邀请邮件
  • 设置 → 基础 → 多用户模式,保存后再配用户 / 邀请码 / 登录 / 邮件

远程存储

  • S3 兼容:Cloudflare R2、AWS S3、MinIO、B2 等
  • WebDAV 客户端(坚果云 / Nextcloud / 群晖等;不是搭 WebDAV 服务端)
  • 远程备份(本地为主)或云端存储(链接走远端公网域名)
  • 同时只启用一种后端;本地删除后远端延迟清理

Telegram

  • Bot 白名单发图入库、可归到相册
  • 适合自己给自己「聊天即上传」

API 与后台

  • /api/v1:上传、导出、队列 drain 等
  • API Key / Bearer Token(多用户下也可发用户自己的 Token)
  • 设置页路径化 + PJAX;配置落在 SQLite(不再依赖改 .env)
  • SQLite 热备份、残留清理、在线更新
  • Passkey / WebAuthn、登录限速、CSRF、MIME 校验、Referer 防盗链

部署与体验

  • 自定义图片链接前缀(如 /img/)
  • 亮色 / 暗色 / 跟随系统
  • Tailwind CSS v4,响应式后台

更细的安装说明、宝塔伪静态、升级注意,写在官网文档和 GitHub README 里了。

我还算听劝,时间也还挤得出一点。有意见直接说,能当天改的我尽量当天改,别不好意思。为了方便及时反馈,可以评论或者加LitePic 用户交流反馈QQ群:1041444750

官网下载地址
https://github.com/gentpan/LitePic

感谢各位民工兄弟的 60 次积极参与,27 楼已竣工! 盖否?

  1. 老孙

    star了 我也为域名花了不少钱 哎
    管不住手

    1. 西风

      @老孙 域名这东西就要买买买,当时只要决定了注册, 无论过几天还是想要去注册,大不了第二年不续费即可。😇

  2. 央

    star了,一会试一下。我有个lskypro,但是感觉太商业化了,部署迁移也麻烦,22年买了就没用过。
    博主评论区姓名邮箱网站输入框好像有问题,[img]https://nos.netease.com/ysf/69d7c54897bc3340135b9df04a8efc30.jpg[/img]
    手机edge浏览器,小米浏览器都是这样子,宽度有些溢出了。

    1. 西风

      @央 谢谢, 我先修复主题评论框移动端问题

  3. 淇云博客

    修改密码之后就会404 跳转到gallery,请问这个咋解决呀,用的宝塔面板,NGINX

    1. 西风

      @淇云博客 在宝塔补一行(推荐,子路径才完整):
      网站 → 设置 → 配置文件 / 伪静态,确保有:
      location / {
      try_files $uri $uri/ /index.php?$query_string;
      }
      然后重载 Nginx。/settings/账号、/gallery/page/2 这类路径仍依赖这段配置。

      1. 淇云博客

        @西风 这句伪静态添加上,后台正常了,但是创建相册的时候,点保存提示请求失败500,控制台提示Failed to load resource: the server responded with a status of 500 ()
        VM64:114 Album save error: Error: 请求失败 (500)
        at HTMLFormElement. (:96:23)错误

      2. Huo

        @西风 有准备搞一个交流群吗 我在挂载外部存储也有点问题呢 S3 始终无法正常连接 WEBDAV 可以连接上 但是不能直接存储到外部存储 本地可以 稍晚些时候我准备在换阿里 OSS 测试一下

  4. Huo

    看着很不错啊,我前几天刚弄好了兰空,哈哈,又想换这个了,先部署一个试试。

  5. Hary

    一直找不到什么合适的图床程序,纯个人用的,部署试试,感谢大佬开源啊

    1. 西风

      @Hary 谢谢,欢迎使用,最近版本更新比较多,后台可以自动更新。

  6. 我是军爸

    标题很炸裂哦,看了下,好像不支持webdav功能

    1. 西风

      @我是军爸 对,webdav没有支持,这个功能我不了解,应该也可以添加的。

      1. 西风

        @Huo 新版本已经添加WebDAV 网络磁盘支持,可以后台更新看下。

    2. 西风

      @我是军爸 新版本已经添加WebDAV 网络磁盘支持,可以安装看看,有问题随时反馈。

      1. Huo

        @西风 大佬 我刚去装了看了一下 可能你理解错误了 不是提供 WEBDAV 给别的服务挂载 是图床可以具备挂载别家提供的 webdav 服务器 比如某某网盘提供了 webdav 我们的图床就可以挂载它作为新的存储方式

        1. 西风

          @Huo 又更新了,你可以抽空部署看看

          1. Huo

            @西风 真猛啊 刚才直接在线升级 真好使 完美了

          2. 西风

            @Huo 有问题随时反馈哈

          3. Huo

            @西风 大佬有计划更新到多用户吗

          4. 西风

            @Huo 好,我研究下

          5. 西风

            @Huo 新版本已经支持开启多用户,欢迎更新使用,有问题随时反馈。

  7. Vind

    尝试几次申请友链失败了。

    1. 西风

      @Vind 这几天在更新博客程序, 很多东西我直接部署到服务器还没来得及一一测试,我已经添加了。

  8. 幻影博客

    我要研究一下,把兰空的升级到这个

    1. 西风

      @幻影博客 可以尝试下, 这个基本功嗯个够用, 比lsky 要精简很多,适合自用图床

  9. Vind

    这样的话,还得有个空间去存放照片,有CDN去给它做节点加速。我缺的也就是这两个。

    1. 西风

      @Vind 我们的toimg.com 提供空间和cdn加速,你可以尝试下,还可以绑定你自己的域名

  10. ymz316

    如果不吃内存,且存储空间富余,部署一个这样的图床不失为一个好主意,关键是开源。

  11. 老孙

    图床不知道咋说
    我一直都不太爱用,感觉还是有点麻烦

  12. 阿航

    正愁找个图床系统,恰好就刷到你了,明天回去部署个试试看[:dacall:]

  13. 老T

    Ai就是这样,JS/CSS不断往后堆,堆到最后就是几千上万行,让它缩短又不会了,只能从头来。

  14. Kevin's

    大哥经理充沛,实在佩服!
    我也有个图床,用的别人的开源的,放在了cf,哪哪都好,唯一问题是 cf 网络不是很稳定

  15. 网友小宋

    只要用了图床,就得一直部署,我这不想用兰空了,但是那一千张图片着实让人难受

  16. 東风

    简直是没苦硬吃,为爱发电。免费版只提供最基础的功能,什么api啊,防盗链,远程备份高阶功能必须收费 50刀不还价

  17. 皇家元林

    赚钱很难,但花钱真的太容易了。
    这么多项目,也是很牛逼的了

  18. 威言威语

    真心佩服你,你应该把搞外贸之后的休息时候都用来搞代码了。

    1. 西风

      @威言威语 外贸没吃的苦,在这里都吃完了,可能新鲜一阵子,之前憋屈的太难受了。AI 也让自己的只是层更进一步,想的越多想做的就越多了。

  19. 发泡鲸

    以前我还往博客网站里插图片,那时为了节省本不宽裕的虚拟主机空间,就使用第三方图床。后来突然有一天,第三方图床崩溃了,图片也找不回了。再后来干脆写博客尽量不插图片了,能省则省。[:mojing:]

    1. 西风

      @发泡鲸 我的文字功底不够,只能拿图来凑。

  20. fengc's blog

    不错不错,回头也部署一个试试,先赚它1000美元玩玩。

      1. fengc's Blog

        @西风 我原来的友链里很久打不开你的网站了,聚合订阅中你的订阅链接也失败了很久,今天更新后终于全都回来了。

        1. 西风

          @fengc's Blog 前段时间我又犯病了去备案了,不知道脑子抽风了啥 ,周一刚备案好,哈哈

添砖加瓦,盖上一楼吧