前言 [=废话]:
秉承着白嫖各种服务的原则,koyeb 搞了一个号有一段时间了,可以免费一个web service,但是用来部署白嫖gpt的服务,延时高,ip一般,后来想就用这个云服务给我自己的vps当心跳检测工具,也算是“废物”利用了,于是便搭起了uptime kuma。发现直接用作者的镜像搭 louislam/uptime-kuma,最后是运行不了的。然后选择官方这个方案:
主体思路就是用litestream将kuma数据库文件实时保存到一个S3对象储存,他用的是backblaze B2,而我把目光投向了我的大善人cloudflare,怕被反薅,cf R2我一直都没怎么用,是时候“宠幸”一下了。用教程仓库的脚本,把S3的环境变量改成cf R2桶的,分分钟就搭建好了,然而______。(此坑不填了 )于是我换上了rclone直接每隔一段时间备份kuma.db到R2桶,uptime 实例重启也都会从备份文件重载。
正文 [=手把手]
1.先准备一个R2桶,创建好管理员读和写的API令牌
2.进入koyeb账户,添加一个web service
选择从github 部署
填入公共仓库https://github.com/wobure123/koyeb-rclone-uptime.git
(没错,这是gpt和我一起喂的…)
下一步,务必选择builder:dockerfile
然后就是填下环境变量了
ACCESS_ID //id
ACCESS_SECRET_KEY //密钥
ENDPOINT //
BUCKET //桶名
一个个都填进去吧。
最后,右上角 点deploy,[- - - - - - ]一切顺利,等待koyeb出公共访问URL,访问便可。
过一会[我设置的每15分钟一备份]R2桶,出现如下备份文件
完美,白嫖完毕!
总结 [=无]
总结
如果非要再加点料,就是koyeb免费服务无自定义域名,我迂回用大善人的worker 设置了一个redirect,实现 https:status.mydomain 访问凑合着用吧,worker代码如下:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
// 创建一个新的 URL 对象,指向你想要重定向的 URL
const url = new URL(' your-url ')
// 创建一个新的响应,状态码为 302,表示临时重定向
const response = new Response(null, {
status: 302,
statusText: 'Found'
})
// 在响应的头部中设置 Location 字段,值为你想要重定向的 URL
response.headers.set('Location', url)
// 返回这个响应
return response
}
啊,还是不会设置?不好好研究大善人,对得起___嘛///<完>
- 关于域名
直接用大善人的worker反代一下更优雅
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
let targetURL = 'your-koyeb-app-url' + url.pathname + url.search
let requestInit = {
method: request.method,
headers: request.headers,
};
// Only include body if method is not GET or HEAD
if (request.method !== 'GET' && request.method !== 'HEAD') {
requestInit.body = request.body;
}
let response = await fetch(targetURL, requestInit)
// Create a new response object to modify headers
let newResponse = new Response(response.body, response)
// Add CORS headers to the response
newResponse.headers.set('Access-Control-Allow-Origin', '*')
newResponse.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
newResponse.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization')
return newResponse
}
- 关于保活
白嫖一切正常,收到邮件需要每两周登录一下,否则暂停服务:
用drissionpage写了个简单的每周自动登录脚本放服务器跑着…