麻烦佬友看看是不是

app.js


目录

实现了反向代理 却启动不了程序
重点是无法保活newapi程序

11 个赞

@xjfkkk 这你熟了tieba_087

2 个赞

serv00开不了3000端口,换个端口试一试?

1 个赞

我啥也不会 :tieba_087:

2 个赞

重点不在这 我用的是nodejs项目 可以这么搞

1 个赞


好像是0.0.0.0吧,不是127.0.0.1,后者要隧道才能访问

2 个赞

都说反向代理没问题了

1 个赞

你这个实际上还是开启了3000端口,然后再转发一次,因为serv00没开这个端口,所以启动不了

1 个赞

在其他机器nodejs环境可以试一下,如果没问题的话,就是我说的这个

1 个赞

Serv00 进程保活最终解决方案 | Saika’s Blog

1 个赞

还是无法启动程序 只能反向代理端口

1 个赞

@saika 大佬麻烦看看是哪个配置有问题

1 个赞

刚好,昨天我才刚刚跑了一个new-api分享公益api,晚点我把配置都贴过来,你自己对比吧。

1 个赞

首先,明确以下几点:

  1. 新添加的 WWW website 是 nodejs 类型;
  2. 工作路径为~/domains/DOMAIN/public_nodejs,文件都放在这里面;
  3. 提前放行一个端口给 new-api 使用;

在这里我将使用62814这个端口进行演示。


编写 app.js

const express = require("express");
const app = express();
const port = 3000;
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:62814', 
  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 new-api", function (err, stdout, stderr) { 
      if (stdout.includes("./new-api --port")) {  
        console.log("web 正在运行");
      } else {
        exec(
          "bash start.sh", 
          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": "example",
    "version": "1.0.0",
    "description": "A simple Express.js server",
    "author": "k0baya",
    "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"
    ]
  }

编写启动脚本 start.sh (可选)

CURRENT_VERSION=''
RELEASE_LATEST=''

get_current_version() {
    CURRENT_VERSION=$(cat VERSION.txt)
}

get_latest_version() {
    RELEASE_LATEST="$(curl -IkLs -o ${TMP_DIRECTORY}/NUL -w %{url_effective} https://github.com/k0baya/new-api-freebsd/releases/latest | grep -o "[^/]*$")"
    RELEASE_LATEST="v${RELEASE_LATEST#v}"
    if [[ -z "$RELEASE_LATEST" ]]; then
        echo "error: Failed to get the latest release version, please check your network."
        exit 1
    fi
}

download_web() {
    DOWNLOAD_LINK="https://github.com/k0baya/new-api-freebsd/releases/latest/download/new-api"
    if ! wget -qO "$ZIP_FILE" "$DOWNLOAD_LINK"; then
        echo 'error: Download failed! Please check your network or try again.'
        return 1
    fi
    cat ${RELEASE_LATEST} > VERSION.txt
    return 0
}

install_web() {
    install -m 755 ${TMP_DIRECTORY}/new-api ./new-api
}

run_web() {
    chmod +x new-api
    export TIKTOKEN_CACHE_DIR="$PWD"
    exec ./new-api --port 62814 --log-dir ./logs 2>&1 &
}

TMP_DIRECTORY="$(mktemp -d)"
ZIP_FILE="${TMP_DIRECTORY}/new-api"

cd "$(dirname "$0")"

get_current_version
get_latest_version
if [ "${RELEASE_LATEST}" = "${CURRENT_VERSION}" ]; then
    "rm" -rf "$TMP_DIRECTORY"
    run_web
    exit
fi
download_web
EXIT_CODE=$?
if [ ${EXIT_CODE} -eq 0 ]; then
    :
else
    "rm" -r "$TMP_DIRECTORY"
    run_web
    exit
fi
install_web
"rm" -rf "$TMP_DIRECTORY"
run_web

为了方便自动更新最新版本的 new-api,我在启动脚本内加入了自动检测并更新的功能,以做到一劳永逸。

接下来安装依赖:

npm22 install

然后去 uptimerobot 或者自建的 uptimekuma 挂一个监控,再打开网页,稍微等一会儿,脚本会自动下载最新的 new-api 并启动。一分钟左右之后刷新一下网页,可以看到成功进入 new-api。

至于前面其他佬友回复的要占用 3000 端口的问题,是不存在的,以上几位应该是完全没用使用过 Serv00 自带的 Phusion Passenger。

2 个赞

还是巨佬有办法 我看我应该是进程名写错了 但还是谢谢佬友给出的详细教程