Serv00应用保活部署实践 fuclaude

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脚本

#!/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

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', //改成 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 fuclaude", function (err, stdout, stderr) { //改成进程名,如:alist
      if (stdout.includes("./fuclaude")) {  //改成进程实际运行命令,如:alist server
        console.log("web 正在运行");
      } else {
        exec(
          "cd ./fuclaude && ./fuclaude", // 改成启动脚本或者启动命令,如: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.listen(port, () => console.log(`Example app listening on port ${port}!`));

package.json

{
    "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.jspackage.json也放入public_nodejs下,目录结构应是如下:

/home/LOGIN/domains/DOMAIN/public_nodejs/
├──fuclaude
├──app.js
├──package.json
└──update_to_github.sh

执行npm22 install

执行完成访问网页即可唤醒应用。监控网页即可对应用进行保活

其他的应用也是一样可以只需要更换此处命令即可
"cd ./fuclaude && ./fuclaude"

感谢

本文参考
@cself的fuclaude 部署教程
@saika的进程保活教程

6 个赞

感谢大佬教程

靠了,我的服务器部署fuclaude就是用不了

先赞一下,再试一下

感谢大佬教程