先来介绍一下这次利用Serverless技术开发的免费开源的图床程序:
Telegraph-Image
开源免费图片托管解决方案,Flickr/imgur 替代品。基于无服务器 Serverless 技术,使用 Cloudflare Pages 和 Telegraph 。
项目 Github 地址:github.com/cf-pages/Te…
Demo: im.gurl.eu.org
如果需要部署自己的图床示例可以参考下面的快速部署教程,仅需3步即可拥有属于自己的图床,不想部署,想直接看体验总结的可以直接跳到Serverless 技术体验总结部分
如何部署
提前准备
你唯一需要提前准备的就是一个免费的 Cloudflare 账户
手把手教程
简单 3 步,即可部署本项目,拥有自己的图床
1.下载或 Fork 本仓库 (注意:目前请使用 fork ,在使用下载#14部署存在问题)
2.打开 Cloudflare Dashboard ,进入 Pages 管理页面,选择创建项目,如果在第一步中选择的是 fork 本仓库,则选择连接到 Git 提供程序,如果第一步中选择的是下载本仓库则选择直接上传
最后一步,按照页面提示输入项目名称,选择需要连接的 git 仓库(第一步选择的是 fork )或是上传刚刚下载的仓库文件(第一步选择的是下载本仓库),点击部署站点即可完成部署
特性
1.无限图片储存数量,你可以上传不限数量的图片
2.无需购买服务器,托管于 Cloudflare 的网络上,当使用量不超过 Cloudflare 的免费额度时,完全免费
3.无需购买域名,可以使用 Cloudflare Pages 提供的*.pages.dev的免费二级域名,同时也支持绑定自定义域名
4.支持图片审查 API ,可根据需要开启,开启后不良图片将自动屏蔽,不再加载
5.支持后台图片管理,可以对上传的图片进行在线预览,添加白名单,黑名单等操作
绑定自定义域名
在 pages 的自定义域里面,绑定 cloudflare 中存在的域名,在 cloudflare 托管的域名,自动会修改 dns 记录
开启图片审查
1.请前往 moderatecontent.com/ 注册并获得一个免费的用于审查图像内容的 API key
2.打开 Cloudflare Pages 的管理页面,依次点击设置,环境变量,添加环境变量
3.添加一个变量名称为ModerateContentApiKey,值为你刚刚第一步获得的API key,点击保存即可
注意:由于所做的更改将在下次部署时生效,你或许还需要进入部署页面,重新部署一下该本项目
开启图片审查后,因为审查需要时间,首次的图片加载将会变得缓慢,之后的图片加载由于存在缓存,并不会受到影响
开启图片管理功能
图片管理功能,默认是关闭的,如需开启请部署完成后前往后台依次点击设置->函数->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/*
Serverless 技术体验总结
先说优点: 1、首先当然是便宜,这次的部署由于Cloudflare提供了免费的额度,在这次的体验当中基本没有超出免费额度,所以是完全0成本,没有花费一分钱。Serverless技术不需要提前购买服务器,可以省下一笔购买服务器的费用。另外无服务器技术通常允许按使用量付费,这意味着用户只需为他们所消耗的资源付费。这可以节省大量成本,特别是对于具有不同使用水平的应用程序。
2、可扩展性强。无服务器技术可以根据需求自动扩展资源,基本不需要人工干预。项目已经上线许多天了,无论流量有多大,都能够正常运行承载流量,可以在下面统计页面截图中看到该项目Demo上线后所承载的流量的统计截图,应对突然的流量激增也基本没有什么问题
3、部署简便。无需提前配置服务环境,与其他服务(如存储和数据库)集成简单,而无需管理底层基础设施。看上面的部署教程就知道了,部署仅需简单三步,即便是需要配置数据库(kv)也只是稍微增加了一些的步骤,没有变得多复杂。相比传统的在自己服务器上安装mysql等数据库软件,并进行配置不仅仅是操作简单,而且kv数据库的设置基本上就是创建了之后就立即可以使用,等待时间短
然后再来说说缺点: 1、程序调试起来非常困难。调试程序需要在本地使用Cloudflare提供的cli工具wrangler运行,这个工具个人用下来感觉并不好用,也有可能是我第一次使用没有摸清楚具体的使用方式,程序不能设置断点,有会使用的大佬也可以分享一下具体方法
2、对基础设施的控制有限。由于无服务器技术抽象出了底层基础设施,因此用户对其代码运行环境的控制力较弱。这可能会使故障排除和性能优化变得更加困难。在这次的开发过程中线上代码出现了一些bug,但Cloudflare提供的日志非常简单,只有访问记录,没有报错信息的输出,对于线上代码的故障定位和排除非常困难,只能是在本地运行,在本地尝试复现问题后定位bug
总的来说目前serverless这项技术,个人感觉还是适合一些个人项目,或是小的公司项目,针对大型项目可能还是不太适用