PS:Serv00免费服务器搭建代理节点有被封号风险(不怕就用)。

效果

转自原项目:sing-box-yg

准备工作

  1. Serv00免费服务器---参考上一期文章:注册一台免费十年VPS服务器

  2. 拥有或者注册一个:Github账号

开始部署

  1. 登录进入Github创建一个新仓库,名称随便填(用英文),可见性选择私有。

  2. 进入仓库,选择Actions(操作),点击set up a workflow yourself (建立工作流程),复制下面的代码全部粘贴进去,然后Commit changes(提交更改)。

  3. name: Keep Servers Alive
    # 如果你已安装了Serv00本地SSH脚本,不要再运行此github部署了,这样会造成进程爆满,必须二选一!
    on:
      #如使用保活网页,请禁用cron,保持下面两行开头的#符号,以防止cron与网页保活重复运行造成进程爆满
      #schedule:
       #- cron: '0 0 1,11,21 * *'  # 每月 1/11/21 日的 00:00(UTC)运行一次,约等于每 10 天一次
      workflow_dispatch: 
    
    jobs:
      keep_servers_alive:
        runs-on: ubuntu-latest
        env:
        # serv00变量添加规则:
        # RES(必填):n表示每次不重置部署,y表示每次重置部署。REP(必填):n表示不重置随机端口(三个端口留空),y表示重置端口(三个端口留空)。SSH_USER(必填)表示serv00账号名。SSH_PASS(必填)表示serv00密码。REALITY表示reality域名(留空表示serv00官方域名:你serv00账号名.serv00.net)。SUUID表示uuid(留空表示随机uuid)。TCP1_PORT表示vless的tcp端口(留空表示随机tcp端口)。TCP2_PORT表示vmess的tcp端口(留空表示随机tcp端口)。UDP_PORT表示hy2的udp端口(留空表示随机udp端口)。HOST(必填)表示登录serv00服务器域名。ARGO_DOMAIN表示argo固定域名(留空表示临时域名)。ARGO_AUTH表示argo固定域名token(留空表示临时域名)。
        # 必填变量:RES、REP、SSH_USER、SSH_PASS、HOST
        # 注意[]"",:这些符号不要乱删,按规律对齐
        # 每行一个{serv00服务器},一个服务也可,末尾用,间隔,最后一个服务器末尾无需用,间隔
        # {"RES":"n", "REP":"n", "SSH_USER":"你的serv00账号名", "SSH_PASS":"你的serv00账号密码", "REALITY":"你serv00账号名.serv00.net", "SUUID":"自设UUID", "TCP1_PORT":"vless的tcp端口", "TCP2_PORT":"vmess的tcp端口", "UDP_PORT":"hy2的udp端口", "HOST":"s1.serv00.com", "ARGO_DOMAIN":"argo固定域名(留空表示临时域名)", "ARGO_AUTH":"argo固定域名token(留空表示临时域名)"},
          ACCOUNTS: >
            [
            {"RES":"y", "REP":"y", "SSH_USER":"你的serv00账号名", "SSH_PASS":"你的serv00账号密码", "REALITY":"你serv00账号名.serv00.net", "SUUID":"自设UUID", "TCP1_PORT":"", "TCP2_PORT":"", "UDP_PORT":"", "HOST":"s1.serv00.com", "ARGO_DOMAIN":"", "ARGO_AUTH":""} 
            ]
        steps:
          - name: Checkout Repository
            uses: actions/checkout@v2
    
          - name: Install required packages
            run: |
              sudo apt-get update
              sudo apt-get install -y sshpass curl jq
    
          - name: Process each account
            run: |
              run_remote_command() {
              local RES=$1
              local REP=$2
              local SSH_USER=$3
              local SSH_PASS=$4
              local REALITY=${5}
              local SUUID=$6
              local TCP1_PORT=$7
              local TCP2_PORT=$8
              local UDP_PORT=$9
              local HOST=${10}
              local ARGO_DOMAIN=${11}
              local ARGO_AUTH=${12}
              if [ -z "${ARGO_DOMAIN}" ]; then
              echo "Argo域名为空,申请Argo临时域名"
              else
              echo "Argo已设置固定域名:${ARGO_DOMAIN}"
              fi
              remote_command="export reym=$REALITY UUID=$SUUID vless_port=$TCP1_PORT vmess_port=$TCP2_PORT hy2_port=$UDP_PORT reset=$RES resport=$REP ARGO_DOMAIN=${ARGO_DOMAIN} ARGO_AUTH=${ARGO_AUTH} && bash <(curl -Ls https://raw.githubusercontent.com/yonggekkk/sing-box-yg/main/serv00keep.sh)"
              echo "Executing remote command on $HOST as $SSH_USER with command: $remote_command"
              sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "$remote_command"
               }
                     echo "*****************************************************"
                     echo "*****************************************************"
                     echo "甬哥Github项目  :github.com/yonggekkk"
                     echo "甬哥Blogger博客 :ygkkk.blogspot.com"
                     echo "甬哥YouTube频道 :www.youtube.com/@ygkkk"
                     echo "自动远程部署并保活Serv00三合一协议脚本【Github】"
                     echo "版本:V25.3.26"
                     echo "*****************************************************"
                     echo "*****************************************************"
                  count=0  
               for account in $(echo "${ACCOUNTS}" | jq -c '.[]'); do
                  count=$((count+1))
                  RES=$(echo $account | jq -r '.RES')
                  REP=$(echo $account | jq -r '.REP')
                  SSH_USER=$(echo $account | jq -r '.SSH_USER')
                  SSH_PASS=$(echo $account | jq -r '.SSH_PASS')
                  REALITY=$(echo $account | jq -r '.REALITY')
                  SUUID=$(echo $account | jq -r '.SUUID')
                  TCP1_PORT=$(echo $account | jq -r '.TCP1_PORT')
                  TCP2_PORT=$(echo $account | jq -r '.TCP2_PORT')
                  UDP_PORT=$(echo $account | jq -r '.UDP_PORT')
                  HOST=$(echo $account | jq -r '.HOST')
                  ARGO_DOMAIN=$(echo $account | jq -r '.ARGO_DOMAIN')
                  ARGO_AUTH=$(echo $account | jq -r '.ARGO_AUTH') 
              if sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" -q exit; then
                echo "🎉恭喜!✅第【$count】台服务器连接成功!🚀服务器地址:$HOST ,账户名:$SSH_USER" 
              if [ -z "${ARGO_DOMAIN}" ]; then
               check_process="ps aux | grep '[c]onfig' > /dev/null && ps aux | grep [l]ocalhost:$TCP2_PORT > /dev/null"
                else
               check_process="ps aux | grep '[c]onfig' > /dev/null && ps aux | grep '[t]oken $ARGO_AUTH' > /dev/null"
               fi
              if ! sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "$check_process" || [[ "$RES" =~ ^[Yy]$ ]]; then
                echo "⚠️检测到主进程或者argo进程未启动,或者执行重置"
                 echo "⚠️现在开始修复或重置部署……请稍等"
                 output=$(run_remote_command "$RES" "$REP" "$SSH_USER" "$SSH_PASS" "${REALITY}" "$SUUID" "$TCP1_PORT" "$TCP2_PORT" "$UDP_PORT" "$HOST" "${ARGO_DOMAIN}" "${ARGO_AUTH}")
                echo "远程命令执行结果:$output"
              else
                echo "🎉恭喜!✅检测到所有进程正常运行中 "
                SSH_USER_LOWER=$(echo "$SSH_USER" | tr '[:upper:]' '[:lower:]')
                sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no "$SSH_USER@$HOST" "
                echo \"配置显示如下:\"
                cat domains/${SSH_USER_LOWER}.serv00.net/logs/list.txt
                 echo \"====================================================\"
                 "
                fi
               else
                echo "===================================================="
                echo "💥杯具!❌第【$count】台服务器连接失败!🚀服务器地址:$HOST ,账户名:$SSH_USER"
                echo "⚠️可能账号名、密码、服务器名称输入错误,或者当前服务器在维护中"  
                echo "===================================================="
               fi
                done
  4. 进入添加的文件修改代码(第21行),按照规律填写serv00服务器账号密码,UUID,端口留空(随机),Argo留空(临时)。

  5. 设置好点击Actions(操作),Keep Servers Alive→Run workflow,再次点击绿色的Run workflow(运行工作流程)。

  6. 等待几分钟部署完成后,打开运行的项目,选择Process each account展开,会显示所有配置的信息。cPozSBxBPy-tuya.webp

  7. 查看多功能主页地址和随机配置的端口,后面还用得到,现在把生成的订阅链接导入到Clash Verge Rev或者v2rayN直接就可以用了。

  8. 进入多功能主页地址,会显示几种路径/up是保活,/re是重启,/rp是重置节点端口,/jc是查看当前系统进程,/list/你的uuid 是节点及订阅信息,可手动执行。(有时候进程被清空了直接进入多功能网页/re重启就可以恢复了)嘻嘻。

  9. 最后进入文件把第21行的RES和REP都改成 n(不让它重新部署和固定端口)。

Argo固定隧道(可选)

  1. 必须托管一个域名到cloudflare。进入cloudflare主页,选择Zero Trust,网络→Tunnels(隧道),添加隧道,选择Cloudflared,名称随便写,保存隧道。

  2. 复制保存运行命令,下一步。输入子域和解析的域名,类型HTTP,URL写:127.0.0.1:你的Argo固定端口,完成设置。

  3. 选择配置,查看公共主机名(Argo域名)。

  4. 打开Github配置文件,在第21行填写argo固定域名和argo固定域名token(刚才复制的运行命令)。

  5. argo固定token是ey开头后面那段,前面没用的删掉。提交后重新运行一遍。

"ARGO_DOMAIN":"你的argo固定域名", "ARGO_AUTH":"eyJhIjoiOTM3YzFjYWI88552NTFiYTM4ZTY0ZDQzRmlNelF0TkRBd1pUQTRNVEJqTUdVeCJ9"

自动保活

  1. 如果不想登录网页手动保活,就直接让Github帮忙自动运行,把下面两段原来的#去掉就行(时间可以直接修改)。

  schedule:
   - cron: '0 0 1,11,21 * *'  # 每月 1/11/21 日的 00:00(UTC)运行一次,约等于每 10 天一次

测试节点

解锁chatgpt和奈飞

Youtube最高跑10万