V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
airka
V2EX  ›  开源软件

分享一个无需服务器开源自建图床程序,支持一键部署到 Cloudflare Pages 平台,支持图片管理,兼容 picgo

  •  2
     
  •   airka · 2023-01-19 10:37:17 +08:00 · 3094 次点击
    这是一个创建于 456 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Telegraph-Image

    开源免费图片托管解决方案,Flickr/imgur 替代品。基于无服务器 Serverless 技术,使用 Cloudflare Pages 和 Telegraph 。

    项目 Github 地址:https://github.com/cf-pages/Telegraph-Image

    Demo: https://im.gurl.eu.org

    如何部署

    提前准备

    你唯一需要提前准备的就是一个免费的 Cloudflare 账户

    手把手教程

    简单 3 步,即可部署本项目,拥有自己的图床

    1.下载或 Fork 本仓库 (注意:目前请使用 fork ,在使用下载#14部署存在问题)

    2.打开 Cloudflare Dashboard ,进入 Pages 管理页面,选择创建项目,如果在第一步中选择的是 fork 本仓库,则选择连接到 Git 提供程序,如果第一步中选择的是下载本仓库则选择直接上传 1

    最后一步,按照页面提示输入项目名称,选择需要连接的 git 仓库(第一步选择的是 fork )或是上传刚刚下载的仓库文件(第一步选择的是下载本仓库),点击部署站点即可完成部署

    特性

    1.无限图片储存数量,你可以上传不限数量的图片

    2.无需购买服务器,托管于 Cloudflare 的网络上,当使用量不超过 Cloudflare 的免费额度时,完全免费

    3.无需购买域名,可以使用 Cloudflare Pages 提供的*.pages.dev的免费二级域名,同时也支持绑定自定义域名

    4.支持图片审查 API ,可根据需要开启,开启后不良图片将自动屏蔽,不再加载

    5.支持后台图片管理,可以对上传的图片进行在线预览,添加白名单,黑名单等操作

    绑定自定义域名

    在 pages 的自定义域里面,绑定 cloudflare 中存在的域名,在 cloudflare 托管的域名,自动会修改 dns 记录 2

    开启图片审查

    1.请前往 https://moderatecontent.com/ 注册并获得一个免费的用于审查图像内容的 API key

    2.打开 Cloudflare Pages 的管理页面,依次点击设置环境变量添加环境变量

    3.添加一个变量名称ModerateContentApiKey为你刚刚第一步获得的API key,点击保存即可

    注意:由于所做的更改将在下次部署时生效,你或许还需要进入部署页面,重新部署一下该本项目

    开启图片审查后,因为审查需要时间,首次的图片加载将会变得缓慢,之后的图片加载由于存在缓存,并不会受到影响 3

    限制

    1.由于图片文件实际存储于 Telegraph ,Telegraph 限制上传的图片大小最大为 5MB

    2.由于使用 Cloudflare 的网络,图片的加载速度在某些地区可能得不到保证

    3.Cloudflare Function 免费版每日限制 100,000 个请求(即上传或是加载图片的总次数不能超过 100,000 次)如超过可能需要选择购买 Cloudflare Function 的付费套餐,如开启图片管理功能还会存在 KV 操作数量的限制,如超过需购买付费套餐

    开启图片管理功能

    图片管理功能,默认是关闭的,如需开启请部署完成后前往后台依次点击设置->函数->KV 命名空间绑定->编辑绑定->变量名称填写:img_url KV 命名空间 选择你提前创建好的 KV 储存空间,开启后访问 http(s)://你的域名 /admin 即可打开后台管理页面

    变量名称 KV 命名空间

    img_url 选择提前创建好的 KV 储存空间

    开启图片管理登录验证功能

    后台管理页面的登录验证功能,默认也是关闭的,如需开启请部署完成后前往后台依次点击设置->环境变量->为生产环境定义变量->编辑变量 添加如下表格所示的变量即可开启登录验证

    变量名称 值 BASIC_USER = <后台管理页面登录用户名称> BASIC_PASS = <后台管理页面登录用户密码>

    当然你也可以不设置这两个值,这样访问后台管理页面时将无需验证,直接跳过登录步骤,这一设计使得你可以结合 Cloudflare Access 进行使用,实现支持邮件验证码登录,Microsoft 账户登录,Github 账户登录等功能,能够与你域名上原有的登录方式所集成,无需再次记忆多一组后台的账号密码,添加 Cloudflare Access 的方式请参考官方文档,注意需要保护路径包括 /admin 以及 /api/manage/*

    一些注意事项:

    Cloudflare KV 每天只有 1000 次的免费写入额度,每有一张新的图片加载都会占用该写入额度,如果超过该额度,图片管理后台将无法记录新加载的图片

    每天最多 100,000 次免费读取操作,图片每加载一次都会占用该额度(在没有缓存的情况下,如果你的域名在 Cloudflare 开启了缓存,当缓存未命中时才会占用该额度),超过黑白名单等功能可能会失效

    每天最多 1,000 次免费删除操作,每有一条图片记录都会占用该额度,超过将无法删除图片记录

    每天最多 1,000 次免费列出操作,每打开或刷新一次后台 /admin 都会占用该额度,超过将进行后台图片管理

    绝大多数情况下,该免费额度都基本够用,并且可以稍微超出一点,不是已超出就立马停用,且每项额度单独计算,某项操作超出免费额度后只会停用该项操作,不影响其他的功能,即即便我的免费写入额度用完了,我的读写功能不受影响,图片能够正常加载,只是不能在图片管理后台看到新的图片了。

    如果你的免费额度不够用,可以自行向 Cloudflare 购买 Cloudflare Workers 的付费版本,每月$5 起步,按量收费,没有上述额度限制

    另外针对环境变量所做的更改将在下次部署时生效,如更改了环境变量,针对某项功能进行了开启或关闭,请记得重新部署。

    17 条回复    2023-01-21 05:42:58 +08:00
    xiaoao
        1
    xiaoao  
       2023-01-19 11:18:39 +08:00
    很好 我用的 b2+cl 缓存
    enchilada2020
        2
    enchilada2020  
       2023-01-19 11:23:14 +08:00 via Android
    嗯 readme 里有张示例图片不错 我朋友说想要原图🤤
    Kevinyy
        3
    Kevinyy  
       2023-01-19 12:04:15 +08:00
    同上
    airka
        4
    airka  
    OP
       2023-01-19 12:27:44 +08:00
    @enchilada2020 你说的是这张吗? https://im.gurl.eu.org/file/022b6e054100d7ffecaef.jpg
    其实 readme 里面展示了图片的文件名,稍微拼接一下 url 就能获得图片了
    airka
        5
    airka  
    OP
       2023-01-19 12:28:52 +08:00
    @Kevinyy 其实 readme 里面展示了图片的文件名,稍微拼接一下 url 就能获得图片了
    vazo
        6
    vazo  
       2023-01-19 12:33:32 +08:00
    Demo 域名被墙?
    forelegance
        7
    forelegance  
       2023-01-19 12:39:56 +08:00
    一直用 linx-server ,感觉够简单,够轻量。
    shuxhan
        8
    shuxhan  
       2023-01-19 13:18:11 +08:00
    请教,我这里开启了 KV 命名空间绑定,打开 /admin 还是报错,是我命名出错了吗?

    https://tg-images.pages.dev/file/f23110335157616009e02.png
    https://tg-images.pages.dev/file/1ed78e43ea12dc49b690c.png
    estk
        9
    estk  
       2023-01-19 13:31:50 +08:00 via iPhone
    https://im.gurl.eu.org/file/9ab20debcf9ac53fe826b.jpg
    照道理做文件床也行吧,不一定图片
    oneisall8955
        10
    oneisall8955  
       2023-01-19 13:52:54 +08:00 via Android
    哇,下次试试
    Droog
        11
    Droog  
       2023-01-19 14:53:00 +08:00
    非常好用,谢谢!
    chancat
        12
    chancat  
       2023-01-19 17:02:36 +08:00 via Android
    这都好久的东西了,玩烂算球
    zuoshoufantexi
        13
    zuoshoufantexi  
       2023-01-20 07:09:47 +08:00 via Android
    留着备用。
    airka
        14
    airka  
    OP
       2023-01-20 15:00:24 +08:00
    @shuxhan 修改环境变量或是添加绑定后请尝试重新部署一下
    airka
        15
    airka  
    OP
       2023-01-20 15:01:14 +08:00
    @estk 是的但是 telegraph 限制文件大小 5M ,5M 做文件储存的话就太小了
    airka
        16
    airka  
    OP
       2023-01-21 05:42:03 +08:00
    @vazo 是的,部分地区,部分运营商无法正常访问
    airka
        17
    airka  
    OP
       2023-01-21 05:42:58 +08:00
    @forelegance 后面会推出支持部署到自己的 linux 服务器上的版本,无需依赖 cloudflare ,敬请期待
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2958 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 11:14 · PVG 19:14 · LAX 04:14 · JFK 07:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.