Serv00的服务器白嫖还是挺舒服,跟着大佬们的教程部署了很多东西,使用pm2给应用保活,但是重启和杀进程外加清定时任务,导致进程还是时不时的死掉
这时候大佬@saika发布了进程保活最终解决方案,解决了这个痛点
以@saika示例作为参考,实践部署LLM Red Team的glm-free-api
本人学艺不精,直接使用nodejs启动不了项目,命令带不进去端口,只用使用pm2来启动
免责声明
本教程仅供学习和娱乐交流使用,请于24小时内自行清除相关存档,严禁商用,由此产生的一切法律后果自行承担 。
实践
项目地址
https://github.com/LLM-Red-Team/glm-free-api
注意serv00需要安装pm2
面板Port reservation点击Add port 添加要使用的glm-free-api端口,这里我使用的是
56863
接着按照下表 Add a New Website:
Key | alue |
---|---|
Domain | 自定义域名 |
Website Type | Node.js |
Node.js binary | Node.js v22.4.1 |
Environment | Production |
DNS support | True |
接着SSH登入,并进入domains目录下创建更新脚本
update_script.sh脚本
update_script.txt (1.7 KB)
赋予执行权限chmod +x update_script.sh
执行脚本下载最新fuclaude./update_script.sh glm-free-api
到这里glm-free-api已经下载完成,并且完成了编译
然后再进入刚刚你新建的域名目录下创建
ecosystem.config.js
module.exports = {
apps: [
{
name: "glm2api",
script: "./dist/index.js",
cwd: "/home/LOGIN/domains/glm2api",
env: {
SERVER_PORT: 56863
}
}
]
};
下一步根据进程保活最终解决方案来编写具体内容
app.js
const express = require("express");
const app = express();
const port = 3002;
var exec = require("child_process").exec;
const { createProxyMiddleware } = require("http-proxy-middleware");
const path = require('path');
const fs = require('fs');
const currentDir = __dirname;
process.chdir(currentDir);
app.use('/', createProxyMiddleware({
target: 'http://127.0.0.1:56863', //改成 Web 应用实际运行端口
changeOrigin: true,
ws: true,
onError: (err, req, res) => {
res.writeHead(500, {
'Content-Type': 'text/plain',
});
res.end('Please wait for a while and try to refresh the page.');
},
}));
function keep_web_alive() {
exec(`pgrep -laf 'glm'`, function (err, stdout, stderr) { //改成进程名,如:alist
if (stdout.includes('glm2api')) { //改成进程实际运行命令,如:alist server
console.log("web 正在运行");
} else {
exec(
"pm2 start /home/LOGIN/domains/DOMAIN/ecosystem.config.js", // 改成启动脚本或者启动命令,如:chmod +x start.sh && ./start.sh 或者 ./alist server
function (err, stdout, stderr) {
if (err) {
console.log("保活-调起web-命令行执行错误:" + err);
} else {
console.log("保活-调起web-命令行执行成功!");
}
}
);
}
});
}
setInterval(keep_web_alive, 10 * 1000);
app.listen(port, () => console.log(`Example app listening on port ${port}!`));
package.json
{
"name": "glm2api",
"version": "1.0.0",
"description": "A simple glm2api server",
"author": "hl128k",
"main": "app.js",
"license": "MIT",
"private": false,
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.19.2",
"http-proxy-middleware": "^3.0.0"
},
"engines": {
"node": "22"
},
"keywords": [
"node"
]
}
将app.js
和package.json
放入域名目录的public_nodejs
下,目录结构应是如下:
/home/LOGIN/domains/
├──DOMAIN
├──glm2api
├──0.0.x.tar.gz
└──update_script.sh
/home/LOGIN/domains/DOMAIN/
├──logs
├──public_nodejs
└──ecosystem.config.js
/home/LOGIN/domains/DOMAIN/public_nodejs/
├──app.js
└──package.json
在public_nodejs
目录下执行npm22 install
执行完成访问网页即可唤醒应用。监控网页即可对应用进行保活
其他的应用也是一样可以只需要更换此处命令即可
"pm2 start /home/LOGIN/domains/DOMAIN/ecosystem.config.js"
感谢
LLM Red Team的项目可以实践
@saika的进程保活教程