k0baya / sb-for-serv00

Sing-box for Serv00
MIT License
123 stars 54 forks source link

保活方案效果非常好 #9

Closed sunboy0523 closed 1 month ago

sunboy0523 commented 1 month ago

谢谢您的无私分享,一直关注您serv00代理部署的库,持续都有优化更新方案,最近的保活方案效果非常好,看您博文也更新了保活方案的相关说明,小白还是不太明白,您方便的时候可以出一个单独保活的库吗?谢谢

k0baya commented 1 month ago

你可以列举一下具体不太明白的点,以及希望我针对哪些方面作补充说明,我可以在博客中完善一下。

sunboy0523 commented 1 month ago

你可以列举一下具体不太明白的点,以及希望我针对哪些方面作补充说明,我可以在博客中完善一下。

谢谢,其实您博客说明已经很清晰了,主要我太菜了,我还想着直接用您部署代理后的文件修改,添加其它需要保活的应用。

k0baya commented 1 month ago

你可以列举一下具体不太明白的点,以及希望我针对哪些方面作补充说明,我可以在博客中完善一下。

谢谢,其实您博客说明已经很清晰了,主要我太菜了,我还想着直接用您部署代理后的文件修改,添加其它需要保活的应用。

X-for-Serv00 这个仓库中的 app.js 针对这个项目添加了很多其他功能,比如订阅、查看进程、查看配置、重启等等,最基础的保活只需要用博客里贴出来那个就行了。举个例子,在面板中添加域名 example.com ,类型选择 nodejs。接着把 Alist 部署在/home/LOGIN/domains/example.com/public_nodejs这个路径下,使用64000这个端口运行 Alist。删掉/home/LOGIN/domains/example.com/public_nodejs/public/index.html这个文件,并且把app.jspackage.json放在alist同一路径下,接着把app.js中的保活部分进行修改:

app.use('/', createProxyMiddleware({
  target: 'http://127.0.0.1:64000', //改成 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 alist", function (err, stdout, stderr) { //改成进程名,如:alist
      if (stdout.includes("alist server")) {  //改成进程实际运行命令,如:alist server
        console.log("web 正在运行");
      } else {
        exec(
          "chmod +x alist && ./alist server", // 改成启动脚本或者启动命令,如: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.use('/', createProxyMiddleware部分反代的端口为 Alist 运行的端口,然后把function keep_web_alive部分检测的进程名称、命令,以及启动的命令改成实际情况。最后执行 npm22 install 安装依赖。

接下来在浏览器中访问http://example.comapp.js就会被唤醒,且app.js检测到 Alist 没有运行,就会尝试将 Alist 拉起,成功拉起后,又会被反代到http://example.com这个域名下,可以直接通过http://example.com访问使用 Alist。至此,访问即保活,访问即唤醒就完成了。

sunboy0523 commented 1 month ago

你可以列举一下具体不太明白的点,以及希望我针对哪些方面作补充说明,我可以在博客中完善一下。

谢谢,其实您博客说明已经很清晰了,主要我太菜了,我还想着直接用您部署代理后的文件修改,添加其它需要保活的应用。

X-for-Serv00 这个仓库中的 app.js 针对这个项目添加了很多其他功能,比如订阅、查看进程、查看配置、重启等等,最基础的保活只需要用博客里贴出来那个就行了。举个例子,在面板中添加域名 example.com ,类型选择 nodejs。接着把 Alist 部署在/home/LOGIN/domains/example.com/public_nodejs这个路径下,使用64000这个端口运行 Alist。删掉/home/LOGIN/domains/example.com/public_nodejs/public/index.html这个文件,并且把app.jspackage.json放在alist同一路径下,接着把app.js中的保活部分进行修改:

app.use('/', createProxyMiddleware({
  target: 'http://127.0.0.1:64000', //改成 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 alist", function (err, stdout, stderr) { //改成进程名,如:alist
      if (stdout.includes("alist server")) {  //改成进程实际运行命令,如:alist server
        console.log("web 正在运行");
      } else {
        exec(
          "chmod +x alist && ./alist server", // 改成启动脚本或者启动命令,如: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.use('/', createProxyMiddleware部分反代的端口为 Alist 运行的端口,然后把function keep_web_alive部分检测的进程名称、命令,以及启动的命令改成实际情况。最后执行 npm22 install 安装依赖。

接下来在浏览器中访问http://example.comapp.js就会被唤醒,且app.js检测到 Alist 没有运行,就会尝试将 Alist 拉起,成功拉起后,又会被反代到http://example.com这个域名下,可以直接通过http://example.com访问使用 Alist。至此,访问即保活,访问即唤醒就完成了。

非常感谢,我试试