app.js
目录
实现了反向代理 却启动不了程序
重点是无法保活newapi程序
@xjfkkk 这你熟了
serv00开不了3000端口,换个端口试一试?
我啥也不会
重点不在这 我用的是nodejs项目 可以这么搞
都说反向代理没问题了
你这个实际上还是开启了3000端口,然后再转发一次,因为serv00没开这个端口,所以启动不了
在其他机器nodejs环境可以试一下,如果没问题的话,就是我说的这个
还是无法启动程序 只能反向代理端口
@saika 大佬麻烦看看是哪个配置有问题
刚好,昨天我才刚刚跑了一个new-api分享公益api,晚点我把配置都贴过来,你自己对比吧。
首先,明确以下几点:
~/domains/DOMAIN/public_nodejs
,文件都放在这里面;在这里我将使用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。
还是巨佬有办法 我看我应该是进程名写错了 但还是谢谢佬友给出的详细教程