起因 Serv00的服务器白嫖还是挺舒服,跟着大佬们的教程部署了很多东西,使用pm2给应用保活,但是重启和杀进程外加清定时任务,导致进程还是时不时的死掉
这时候大佬@saika 发布了进程保活最终解决方案 ,解决了这个痛点
以@saika 示例作为参考,实践部署始皇的fuclaude
实践 面板Port reservation点击Add port 添加要使用的fuclaude端口,这里我使用的是 30277 接着按照下表 Add a New Website:
Key
alue
Domain
自定义域名
Website Type
Node.js
Node.js binary
Node.js v22.4.1
Environment
Production
DNS support
True
接着SSH登入,并进入刚刚你新建的域名目录下的 public_nodejs 路径下创建
update_to_github.sh脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 # !/bin/sh # 设置变量 REPO="wozulong/fuclaude" DOWNLOAD_DIR="./fuclaude_update" TARGET_DIR="./fuclaude" ZIP_PASSWORD="linux.do" PORT="30277" # 请替换为你的实际端口 PASSWORD="pwd" # 请替换为你的实际密码 # 获取最新版本的下载链接 LATEST_RELEASE=$(curl -s "https://api.github.com/repos/$REPO/releases/latest") DOWNLOAD_URL=$(echo "$LATEST_RELEASE" | jq -r '.assets[] | select(.name | contains("freebsd-amd64")) | .browser_download_url') # 检查是否获取到下载链接 if [ -z "$DOWNLOAD_URL" ]; then echo "无法获取下载链接,请检查仓库和资产名称。" exit 1 fi # 创建下载目录 mkdir -p "$DOWNLOAD_DIR" # 下载最新版本 curl --max-time 600 -L -o "$DOWNLOAD_DIR/fuclaude.zip" "$DOWNLOAD_URL" # 检查下载是否成功 if [ $? -ne 0 ]; then echo "下载失败,请检查网络连接或下载链接。" exit 1 fi # 解压下载的文件 unzip -P "$ZIP_PASSWORD" -o "$DOWNLOAD_DIR/fuclaude.zip" -d "$DOWNLOAD_DIR" # 检查解压是否成功 if [ $? -ne 0 ]; then echo "解压失败,请检查压缩包密码。" exit 1 fi # 检查解压后的文件夹名称 EXTRACTED_DIR=$(find "$DOWNLOAD_DIR" -mindepth 1 -maxdepth 1 -type d) # 检查解压后的文件夹是否存在 if [ ! -d "$EXTRACTED_DIR" ]; then echo "解压后的文件夹不存在,请检查压缩包内容。" exit 1 fi # 替换目标目录中的文件 cp -r "$EXTRACTED_DIR"/* "$TARGET_DIR" # 检查复制是否成功 if [ $? -ne 0 ]; then echo "复制文件失败,请检查目标目录路径和权限。" exit 1 fi # 编辑 config.json 文件 sed -i '' 's/"bind": "127.0.0.1:8181"/"bind": "0.0.0.0:'"$PORT"'"/; s/"signup_enabled": *false/"signup_enabled": true/; s/"show_session_key": *false/"show_session_key": true/; s/"site_password": *"[^"]*"/"site_password": "'"$PASSWORD"'"/' "$TARGET_DIR/config.json" # 检查编辑是否成功 if [ $? -ne 0 ]; then echo "编辑 config.json 文件失败,请检查文件路径和权限。" exit 1 fi # 清理临时文件 rm -rf "$DOWNLOAD_DIR" echo "更新成功!"
赋予执行权限chmod +x update_to_github.sh
执行脚本下载最新fuclaude./update_to_github.sh
到这里fuclaude已经下载完成
下一步根据进程保活最终解决方案 来编写具体内容
app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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:30277' , 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 fuclaude" , function (err, stdout, stderr ) { if (stdout.includes ("./fuclaude" )) { console .log ("web 正在运行" ); } else { exec ( "cd ./fuclaude && ./fuclaude" , 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 { "name" : "fuclaude" , "version" : "1.0.0" , "description" : "A simple fuclaude server" , "author" : "hl128k" , "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" ] }
将app.js
和package.json
也放入public_nodejs
下,目录结构应是如下:
1 2 3 4 5 /home/LOGIN/domains/DOMAIN/public_nodejs/ ├──fuclaude ├──app.js ├──package.json └──update_to_github.sh
执行npm22 install
执行完成访问网页即可唤醒应用。监控网页即可对应用进行保活
其他的应用也是一样可以只需要更换此处命令即可"cd ./fuclaude && ./fuclaude"
感谢 @cself 的fuclaude 部署教程 @saika 的进程保活教程