 
 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.gitcd gpt-loadgo mod tidy# 创建配置cp .env.example .env随后要在serv00的控制台放行端口(示例: Sign in,只需要修改数字就行了)

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

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

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

随后便可以通过https://xxx.用户名.serv00.net 的方式进行访问。
git clone https://github.com/tbphp/gpt-load.gitcd gpt-loadgo mod tidy# 创建配置cp .env.example .env# 登陆serv00开放端口make run# 会打印出启动成功日志
pm2保活(可选)go build -o gpt-load-server .pm2 start ./gpt-load-server --name gpt-load1.开始,参考下面讲的passenger保活进程,
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-loadnohup ./gpt-load-server > gpt-load.log 2>&1 &启动app.js
cd /home/username/domains/username.serv00.net/public_nodejsnohup 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显示下面则成功:

5.serv00母鸡重启的话,需要重启app.js
写一个start.sh脚本
#!/bin/bashcd /home/username/gpt-loadnohup ./gpt-load-server > gpt-load.log 2>&1 &
cd /home/username/domains/username.serv00.net/public_nodejsnohup node app.js > app.log 2>&1 &赋权并运行
chmod +x start.sh./start.sh之后登陆则运行
./start.sh即可
PS:最简单的还是pm2保活,官方也没看到说禁止,说的是最好用passenger,访问我用的域名+端口,可以自己试试passenger反代去掉端口
 
  