1021 字
5 分钟
serv00部署gpt-load && Passenger进程保活
2025-10-21 22:47

0.前提,部署到make run那一步,还未进行pm2保活#

https://linux.do/t/topic/835935

点击展开查看详情

手上一直闲了两台serv00,没有工作干,突然想到之前star了T佬的github项目没有部署( tbphp/gpt-load: 智能密钥轮询的多渠道 AI 代理。 Multi-channel AI proxy with intelligent key rotation.)于是就尝试弄了一下,没想到就成功了,也算是不用放着吃灰了。我使用的是方法三源码构建的方式。

首先安装项目需要的环境,go,npm等(具体可以问下ai)。 然后克隆并构建

git clone https://github.com/tbphp/gpt-load.git
cd gpt-load
go mod tidy
# 创建配置
cp .env.example .env

随后要在serv00的控制台放行端口(示例: Sign in,只需要修改数字就行了)

image

在nano/vim编辑器修改.env改成如上未使用的端口。其他直接保持默认就ok了。 然后make run等待一段时间就ok了,大约需要6分钟左右。随后就能打开玩耍了 image 关于pm2保活: 可以先将go程序编译成一个可独立执行的文件: 在gpt-load文件夹下执行以下命令

go build -o gpt-load-server .

随后使用pm2 start ./gpt-load-server --name gpt-load命令即可启动pm2保活。

关于https协议 由于部分客户端不支持http协议,因此需要进行https的配置。 登陆serv00后台添加一个反向代理功能的网站,端口就写放行的端口,注意不要勾选”use https”,domain随便写一个以xxx.用户名.serv00.net结尾的就行了。(也可以使用自己的域名,添加A记录,IP指向serv00的IP应该就可以)

image

随后进行SSL证书的申请:(选择let’s encrypt的证书) image

随后回到www websites列表,打开”Force SSL”即可: image

随后便可以通过https://xxx.用户名.serv00.net 的方式进行访问。

git clone https://github.com/tbphp/gpt-load.git
cd gpt-load
go mod tidy
# 创建配置
cp .env.example .env
# 登陆serv00开放端口
make run
# 会打印出启动成功日志
pm2保活(可选)
go build -o gpt-load-server .
pm2 start ./gpt-load-server --name gpt-load

1.开始,参考下面讲的passenger保活进程,#

https://github.com/hkfires/Keep-Serv00-Alive

2.app.js代码:#

点击展开查看代码详情
const express = require("express");
const path = require("path");
const exec = require("child_process").exec;
const app = express();
const port = port;//前提里面设置的端口
const user = ""; // Serv00 用户名
const pName = "gpt-load-server"; // 我保活了这个
// 完整路径到二进制程序(注意:不需要 go run,直接运行编译后的文件)
//const Process = `/home/${user}/gpt-load/${pName}`;//这里我手动kill了gpt-load-server之后没有触发app.js里面重启gpt-load-server的逻辑
const Process = "gpt-load/gpt-load-server"; // 匹配路径中包含这一段
// 日志文件路径
const LogFile = `/home/${user}/gpt-load/gpt-load.log`;
function keepWebAlive() {
const currentDate = new Date();
const formattedDate = currentDate.toLocaleDateString();
const formattedTime = currentDate.toLocaleTimeString();
// 精确查找该进程是否在运行
exec(`pgrep -f "${Process}"`, (err, stdout) => {
if (stdout.trim()) {
console.log(`${formattedDate}, ${formattedTime}: ${pName} is Running (PID: ${stdout.trim()})`);
} else {
console.log(`${formattedDate}, ${formattedTime}: ${pName} is NOT Running, attempting to restart...`);
// 使用 nohup 启动,输出日志
exec(`cd /home/${user}/gpt-load && nohup ${Process} > ${LogFile} 2>&1 &`, (err) => {
if (err) {
console.error(`${formattedDate}, ${formattedTime}: Restart failed: ${err}`);
} else {
console.log(`${formattedDate}, ${formattedTime}: Restarted ${pName} successfully!`);
}
});
}
});
}
// 初始执行一次
keepWebAlive();
// 每 10 秒检查一次
setInterval(keepWebAlive, 10 * 1000);
app.use(express.static(path.join(__dirname, 'static')));
app.listen(port, () => {
console.log(`Web server is listening on port ${port}!`);
});

3.启动程序(要以绝对路径启动,不然…app.js没办法重启gpt-load-server)#

启动gpt-load-server

cd /home/username/gpt-load
nohup ./gpt-load-server > gpt-load.log 2>&1 &

启动app.js

cd /home/username/domains/username.serv00.net/public_nodejs
nohup node app.js > app.log 2>&1 &

4.验证#

手动杀掉gpt-load-server

pkill -f gpt-load-server

在public_nodejs目录

[id@s9]:<~/domains/id.serv00.net/public_nodejs>$ pkill -f gpt-load-server
[id@s9]:<~/domains/id.serv00.net/public_nodejs>$ tail -f app.log

查看app.log

tail -f app.log

显示下面则成功: image|690x236

5.serv00母鸡重启的话,需要重启app.js#

写一个start.sh脚本

#!/bin/bash
cd /home/username/gpt-load
nohup ./gpt-load-server > gpt-load.log 2>&1 &
cd /home/username/domains/username.serv00.net/public_nodejs
nohup node app.js > app.log 2>&1 &

赋权并运行

chmod +x start.sh
./start.sh

之后登陆则运行

./start.sh

即可


PS:最简单的还是pm2保活,官方也没看到说禁止,说的是最好用passenger,访问我用的域名+端口,可以自己试试passenger反代去掉端口

serv00部署gpt-load && Passenger进程保活
https://fuwari.vercel.app/posts/serv00部署gpt-load--passenger进程保活/
作者
BANLAN
发布于
2025-10-21
许可协议
CC BY-NC-SA 4.0