2024.7更新
发现长时间运行还是会存在容器启动失败的问题,虽然不会丢数据,但仍不建议使用该方案。可采取以下:
- 服务器自建
- HetrixTools - Uptime Monitor 目前在使用该方案,可以自定义域名且可选择包括各大洲在内的的四个监控节点同时监控。 点击 我的监控 查看演示。
起因是这两天连续刷到好几个监控站点部署的帖子,其中有一个吸引了我的注意[(NEW)白嫖一个始皇同款网站监控面板:uptime-kuma],他提供了个新颖的思路,通过第三方容器化服务去搭建Uptime Kuma,但有一个问题,Hugging face在48小时如果不去点击就会自动清空容器数据。这就恶心人了,一个监控容器自己会抹去数据。好在经过一番检索,找到了个较为完美的方法:Hugging face+Serverless数据库。具体如下:
创建在线数据库
这里有一位民间大神收集了网络上现有的一些提供免费云数据库的商家。在这里选用 Avien,它免费提供一个5GB存储空间的MySQL数据库,我们在这里创建一个Free plan
的MySQL数据库,服务位置选择North America
。稍等片刻,数据库创建完成后复制下链接地址,保存起来。
部署Docker容器
不同于在服务器上部署Docker容器,在Hugging face创建一个容器十分简单。
这里要感谢sugar404提供的容器模板!
先注册账号,然后点击此处,即可部署,Space hardware
选择默认的free
下面则是填写一些环境变量:
环境变量 | 填写内容 |
---|---|
UPTIME_KUMA_DB_TYPE | mariadb |
UPTIME_KUMA_DB_HOSTNAME | 数据库连接地址 |
UPTIME_KUMA_DB_PORT | 数据库端口 |
UPTIME_KUMA_DB_USERNAME | 用户名 |
UPTIME_KUMA_DB_NAME | 数据库名 |
UPTIME_KUMA_DB_PASSWORD | 数据库密码 |
填写完毕后点击Duplicate Space
部署,等到最上面显示Running即部署完成。
自定义域名
Hugging face本身是不支持自定义域名的,这里通过Cloudflare的worker来实现。
首先复制下来Hugging face提供的二级域名:
点击右上角的Settings
, Embed this Space
并复制二级域名:
转到Cloudflare,新建一个worker脚本
//替换xxx.hf.space
export default {
async fetch(request, env) {
const _url = new URL(request.url);
const hostname = _url.hostname;
_url.hostname = "xxx.hf.space";
const req = new Request(_url, request);
req.headers.set('origin', 'https://xxx.hf.space');
const res = await fetch(req);
let newres = new Response(res.body, res);
let location = newres.headers.get('location');
if (location !== null && location !== "") {
// 可选 - >
// 去除原始路径中的 /dashboard
location = location.replace('/dashboard', '');
// 添加 /status/web 路径
location = location + '/status/web';
// <- 可选
location = location.replace('://xxx.hf.space', '://'+hostname);
newres.headers.set('location', location);
}
return newres;
},
};
之后为此worker自定义一个域名即可。
最后
其实类似的Serverless还有很多实现,大抵都是通过Vercel,Netlify或是本文所用的Hugging face来充当前端,再使用一些云数据库来保存状态,个人都是足够用的。