基于 Python WWW Pages 的 Serv00 Daemon, 实现进程保活/自动保号
如果觉得看不懂,可以参考 我在 Linux DO 站发布的帖子
有详细的部署教程和配图,更建议小白阅读~
- 自动拉起在 PM2 上托管的进程
- 使用 SSH 登录的方式自动保活 (续期)
Warning
声明: 这一段(甚至大部分readme)都是在凌晨写的 (不信看 commit (24-11-30) 和 commit (24-12-01)), 部分内容可能有争议/错误, 请勿开骂qwq
Serv00 自动续期有两种方案:
那你可能就要替我想了:为什么还要做这个项目? 直接用现成的不得了?
- 首! 先! github actions 不是一个很好的方案, 在于一段时间没推送到这个 repo 就会禁用定时 trigger (而且还不会通知你)
- 其! 次! 这个项目将两个功能整合到了一起; 还有自动脚本, 省去部署的麻烦
- 还! 有! 本项目的进程保活通过访问 url 实现, 非常稳定 (个人 s7/s9/s14 自测), 拉起间隔完全取决于你自己 (UptimeRobot 免费版最短 5 min, cron-job 最短 1 min) 3.5. 因为使用 Serv00 面板自带的网站功能, 可以保证本 Daemon 的自启而不会被杀掉, 更加稳定
- 最! 后! 本项目自动登录的推送功能单独拆分为一个文件, 方便修改;
内置 Discord 推送, 使用卡片渲染更加美观! - 好吧编不出来了(
总之用它就对了!
本项目使用 pm2 作为进程管理工具,在使用前请先了解 pm2 的基本使用方法 或自行搜索需要的用法 (很简单)
一行命令:
mkdir -p ~/.ssh && cd ~/.ssh && ssh-keygen -t rsa && cat id_rsa.pub >> authorized_keys
Important
在 ssh-keygen
生成密钥时请直接回车 (不要多) 使用默认值,不要更改默认保存位置,且请使用空密码以便直接连接
这行命令会做什么
# -1. 创建 ~/.ssh 目录 *(如有则忽略)*
mkdir -p ~/.ssh
# 0. 切目录到 ~/.ssh
cd ~/.ssh
# 1. 先检查有没有 id_rsa 和 id_rsa.pub
# *如果有可以直接跳过第 2 步*
ls -l
# 2. 如果没有: 生成一个新的密钥
# 建议*一路回车*, 直接不带密码保存到默认目录即可 **(必须不带密码)**
ssh-keygen -t rsa
# 3. 追加**公钥**到信任列表 (分清楚: 公钥带 `.pub` 后缀, 内容**较短**; 私钥没有, 内容**较长**, 且有如 `-----BEGIN OPENSSH PRIVATE KEY-----` 之类的标志)
# 一定用两个 >, 否则会把其他的清了!
cat id_rsa.pub >> authorized_keys
# 4. 测试效果
ssh localhost
wget -O install-daemon.py https://raw.githubusercontent.com/siiway/serv00-daemon/main/script/install-daemon.py && python3 install-daemon.py && rm install-daemon.py
如果没有安装 pm2 会自动下载脚本并安装.
在安装过程中会询问下面的信息 (不填回车就是默认):
- DaemonKey (
访问时需要携带的 key (妥善保管)
): 其实就是类似于密钥一类的东西, 默认随机生成一个uuid - DaemonCommand (
访问时需要执行的命令
): ← 在 pm2 中为pm2 resurrect
, 也是本项默认值- 这个命令不太清楚, 但能用就行 (如果pm2没启动就会恢复进程,启动了什么都不做)
- 使用pm2记得作更改后用
pm2 save
保存到 dump 文件,否则重启会丢失!
- LogFile (
日志文件的路径
): 也是顾名思义, 默认是/dev/null
, 即不保存日志 - SSHCommand (
ssh 连接命令, 如不想创建公钥可以使用 sshpass, 否则默认即可
): ← 不想创建公钥可以用sshpass -p "你的密码" ssh localhost "devil info account"
- WebhookUrl (
Discord 的 Webhook URL (在 编辑频道 > 整合 > Webhook 创建), 为空禁用推送
): ← 我自认为我已经说得很清楚了 - Timezone (
消息中显示时间的时区
): 类似Asia/Shanghai
的时区字符串, 在处理 Webhook 消息时会将时间转换到目标时区
Note
如果报错找不到库, 请手动安装: pip install flask requests
使用 上一步 的脚本安装完成后, 链接会将你带到这里, 接下来我们就要进行简单的收尾工作: 接入定时器 了.
虽然简单, 但这也是最重要的一步, 它决定了你的 Daemon 如何定时触发
Important
继续之前, 在你的 Devil 控制面板重启网站.
在这里我使用 UptimeRobot 作演示, 也可选择其他类似的 url 监测平台
其实更推荐 cron-job.org, 全免费, 且相比 UptimeRobot 限制更少 (上面提到的 Linux DO 帖子中就使用了 cron-job.org 作演示)
**!这里需要创建两个监视器!**
- 1) pm2 进程保活 (建议设置 5 分钟)
* http://USERNAME.serv00.net/daemon/MyKey
- 2) 登录 SSH 保号 (建议设置一天至一月不等)
* http://USERNAME.serv00.net/renew/MyKey
替换以下字段:
- http: 协议, 如果直接使用 用户名.serv00.net 可使用 https; 如使用类似 xxx.用户名.serv00.net 的子域名默认只能使用 http
- USERNAME.serv00.net: 部署的域名
- MyKey: 前面设置的密钥
- 注册, 登录
- 创建一个
Single monitor
- 选择监测类型为
HTTP / website monitoring
, 填写 url, 并选择Monitor interval
(最快 5 min 请求一次), 保存即可.
Tip
可以直接访问拼接的 url 测试是否能使用, 如果配置正确, 应该会显示类似下图的内容:
漏token了? 你说得很对, 但是已经被我重置了
也可以使用 cron-job 监视, 照填即可↓
如果对此项目有建议/想法,可 Issue 或 More contact.
在此推荐一篇 Serv00 应用部署教程 (上面pm2安装脚本作者的文章): https://saika.us.kg/2024/01/27/serv00_logs/
这个是搬运不带原文链接的,建议看评论 → https://bs.openface.cc/2024/06/serv00.html [Archive (25-01-14)]
serv00-daemon/script/install-pm2.sh
Line 13 in d5359bf
本项目使用 MIT 作为 LICENSE.