logo NodeSeekbeta

【⭐项目开源⭐】给新手 MJJ 的自托管图床:OU-Image Hosting / 欧记图床 / R2 & S3 / 公共上传 / 相册管理

写在最前面

之前做过几次公共图床的小活动都是用的别人的图床,就一直很想做一个自己的图床。
因为之前发的小项目没发内板,被禁言了三天。

image

被禁言的这三天,就继续把这个项目给完善了。

我不是程序员,我只是以一个用户的视角来做这个项目。希望以下的内容你会喜欢。

xhj018 xhj019

image

项目初衷

很多朋友玩 VPS、独服、小鸡久了之后,迟早都会遇到一个问题:

  • 截图、教程图、博客图放哪里?
  • 发论坛、写文章、写文档时图片怎么稳定外链?
  • 免费图床会不会删图、限流、压缩?
  • 用对象存储又觉得配置麻烦?
  • 想自己搭一个图床,但不想折腾一堆配置?

所以在 n 做了一个小项目:OU-Image Hosting / 欧记图床。

项目地址:
https://github.com/cshaizhihao/ou-image-hosting

它不是网盘,也不是临时上传脚本,而是一个偏个人和小团队使用的 自托管图床 / 图片库 / 相册 / 公共上传面板。

定位很简单:

图片放在自己手里,上传、整理、分享都尽量舒服一点。


OU-Image Hosting 是什么?

OU-Image Hosting,中文名 欧记图床,是一个给个人创作者、开发者、小团队准备的自托管图床。

它可以做这些事情:

  1. 自己搭建图片托管服务
  2. 上传图片并生成外链
  3. 一键复制 URL / Markdown / HTML / BBCode
  4. 管理图片库
  5. 搜索、筛选、收藏、回收站
  6. 创建相册、设置封面、写描述
  7. 支持公共上传
  8. 支持访客上传和上传历史
  9. 支持管理员、子管理员、普通用户、访客权限边界
  10. 支持本地存储
  11. 支持 Amazon S3
  12. 支持 Cloudflare R2
  13. 支持 S3-compatible 存储
  14. 支持 Docker Compose 一键部署
  15. 支持 Caddy 反向代理和 HTTPS
  16. 提供更新、备份、恢复、回滚、诊断、日志查看等维护命令

简单说,它就是一个自己可控的图床面板。


新手问题解答

Q:为什么要自建图床?

A:主要是为了可控。

很多免费图床刚开始用起来很方便,但时间久了可能遇到这些问题:

  • 图片被压缩
  • 图片加载慢
  • 外链失效
  • 平台限制流量
  • 平台改规则
  • 图片管理不方便
  • 想迁移时很麻烦

自建图床的好处是:

  • 数据在自己手里
  • 可以接 Cloudflare R2 / S3
  • 可以自己绑定域名
  • 可以自己控制公开和隐藏
  • 可以备份、迁移、恢复
  • 发论坛、博客、文档都比较稳定

当然,自建也意味着你需要自己维护服务器和存储,所以它更适合已经有 VPS,或者准备长期折腾一点点自托管服务的朋友。

Q:Cloudflare R2 适合做图床吗?

A:比较适合。

R2 的优点是对象存储成本低,而且没有传统 S3 那种公网出口流量费用,对个人图床、博客图床、论坛发图这类场景比较友好。

OU-Image Hosting 支持:

本地存储
Amazon S3
Cloudflare R2
S3-compatible

如果只是自己玩,可以先用本地存储。

如果图片比较多,或者希望后续迁移方便,建议直接用 R2 / S3 这类对象存储。

Q:公共上传会不会有风险?

A:公共上传一定要注意边界。

所以项目里把后台和公共上传做了分离:

  • 管理员后台是管理员自己的图片库
  • 普通用户只能使用公共图床和查看自己的上传历史
  • 游客上传不会混入管理员个人历史
  • 公共上传可以配置限制

目前公共上传相关能力包括:

  • 速率限制
  • 每日额度
  • 人机验证
  • IP 封禁
  • 审计记录
  • 公开 / 隐藏切换
  • 上传历史分页
  • 批量删除

如果你不想像我前几次的大贝塔图床活动一样被坏哥们塞满劣质图片,那我建议刚开始部署时,不要直接无限制开放公共上传,这是血的教训。(怀怀念我的 100 多 G 的高清大贝塔)

Q:适合完全新手吗?

A:适合有一点点 VPS 基础的新手。

如果你会:

ssh root@服务器IP

并且能复制一条命令到服务器执行,那就可以尝试。

安装脚本会自动处理依赖、Docker、反向代理和服务启动。

如果遇到网站打不开,也可以先用内置诊断命令:

ouih doctor

它会检查 Docker、端口、DNS、HTTPS、磁盘、内存和配置这些常见问题。


一键安装

直接在服务器上执行:

curl -fsSL https://raw.githubusercontent.com/cshaizhihao/ou-image-hosting/main/install.sh | bash

安装器会自动处理:

  • 系统依赖
  • Docker 环境
  • 项目配置
  • 反向代理
  • 服务启动

安装完成后,打开脚本提示里的访问地址,创建第一个管理员账号就能使用。


Cloudflare 用户提醒

如果你使用 Cloudflare 代理域名,建议提前确认:

DNS 已指向服务器 IP
SSL/TLS 设置为 Full (strict)
服务器放行 80 / 443 端口

安装时选择 Cloudflare 模式即可。

无人值守安装示例:

curl -fsSL https://raw.githubusercontent.com/cshaizhihao/ou-image-hosting/main/install.sh \
  | bash -s -- --yes --origin https://img.example.com --proxy cloudflare --port 3080

日常维护

安装完成后,可以使用:

ouih

image

常用命令以及修复检测:
ouih status     查看服务状态
ouih logs       查看运行日志
ouih update     更新项目
ouih doctor     检查 Docker、端口、DNS、HTTPS、磁盘、内存和配置
ouih backup     创建备份
ouih restore    恢复备份
ouih rollback   回退最近一次成功更新
ouih url        查看访问地址
ouih dir        查看安装目录
ouih uninstall  卸载服务

网站打不开时,建议先跑:

ouih doctor

新手小白喂饭向基本使用流程(内有多图)

1. 准备一台服务器

准备一台 VPS,建议最低配置不要太离谱。

如果只是自己上传图片、写博客、发论坛,小机器也能跑。

你需要准备:

一台 VPS
一个域名,非必须但推荐
服务器开放 80 / 443 端口
SSH 登录权限

如果是一台全新刚重装 DD 的小鸡那就更好了。
如果你准备用 Cloudflare R2,也可以提前准备好 R2 存储桶和访问密钥。

2. 配置域名解析

如果你有域名,可以添加一条 DNS 记录,例如:

img.example.com -> 你的服务器 IP

Cloudflare 用户注意:

SSL/TLS 建议设置为 Full (strict)
确认 80 / 443 端口放行

是否开启小黄云,取决于你的部署方式和实际需求。

如果只是先体验,也可以先不用域名,直接用安装脚本提示的地址访问。

3. 执行安装命令

SSH 登录服务器后执行:

curl -fsSL https://raw.githubusercontent.com/cshaizhihao/ou-image-hosting/main/install.sh | bash

脚本会自动安装并启动服务,如果你没有安装依赖脚本会自动帮你安装。

安装完成后,会输出访问地址。

image

image

image

4. 创建管理员账号

打开安装完成后的访问地址。

首次进入时,创建第一个管理员账号。

image

创建完成后,就可以进入后台使用图床功能。

image

5. 上传图片

进入后台后,可以上传图片。

支持的上传方式包括:

拖拽上传
粘贴上传
URL 上传
公共上传

也支持 HEIC / HEIF,以及 JPEG/HEIC + MOV Live Photo 动态片段这类图片场景。

image

6. 复制外链

上传完成后,可以一键复制:

URL
Markdown
HTML
BBCode

猫猫头.jpg
发 NodeSeek、写博客、写 Markdown 文档都会方便一点。

7. 管理图片和相册

后台可以对图片做整理:

搜索
筛选
收藏
回收站
批量操作

也可以创建相册:

设置封面
填写描述
批量加入图片
从图片详情返回原相册
8. 开放公共上传

如果你想给别人使用,可以开启公共上传。

建议同时配置:

速率限制
每日额度
人机验证
IP 封禁
审计记录

这样更适合长期开放。

image


技术栈

项目主要使用:

Next.js 15
React 19
Radix UI
CSS Modules
Fastify
TypeScript
Sharp
Docker Compose
Caddy
Vitest
Playwright
GitHub Actions

推荐使用场景

比较适合:

  • 经常写博客的人
  • 经常发论坛帖子的人
  • 想自己掌控图片外链的人
  • 想用 Cloudflare R2 / S3 做图床的人
  • 想给小团队提供图片上传入口的人
  • 想要一个轻量图片库和相册面板的人
  • 喜欢自托管服务的 MJJ

不太适合:

  • 想要完整网盘的人
  • 想要企业级 DAM 资产管理系统的人
  • 不想维护任何服务器的人
  • 只想临时传一张图就走的人

OU-Image Hosting 目前定位就是:

简单、轻量、自托管、偏个人和小团队使用的图床面板。


安全边界

后台和公共上传默认分开。

普通注册用户只能使用公共图床和查看自己的上传历史,游客上传不会混入管理员个人历史,也不会误进后台。

后台不会展示用户密码,只提供重置入口。

公共上传建议配合限制使用,尤其是开放给外部用户时,不建议无限制裸奔。


文档

项目里也提供了一些文档:

部署文档
备份与恢复
安全模型
发布说明

可以在 GitHub 仓库里查看。


图床体验地址:

https://you1.gay/

开源地址

GitHub:

https://github.com/cshaizhihao/ou-image-hosting

欢迎 Star,也欢迎 fork 二创。

如果你正好需要一个自己的图床,希望这个项目能帮你少折腾一点。

欢迎各位 MJJ 进行安装以及 star,也欢迎提 issue、PR,或者直接改成自己顺手的版本,本次项目完全出于我对以往图床使用经验和个人习惯来进行编写。祝各位使用愉快!

12345
12345

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72254位seeker

🎉欢迎新用户🎉