侧边栏壁纸
博主头像
龍騰博客 博主等级

行动起来,活在当下

  • 累计撰写 192 篇文章
  • 累计创建 31 个标签
  • 累计收到 12 条评论

目 录CONTENT

文章目录

让 Filebrowser 目录自动同步 v2rayN / v2rayNG 最新版(保姆级教程)

管理员
2026-09-21 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

效果

  • 每天凌晨 4 点,VPS 自动检查 GitHub 官方 Release。

  • 有新版本 → 自动下载新文件,下载成功后再删除旧版本。

  • 没有新版本 → 什么都不做。

  • 文件直接写进 Filebrowser 挂载的目录,网页刷新即可看到,不需要改 compose,也不需要重启容器

先了解三件事

  1. v2rayN 官方发布的是 zip 便携包(解压后里面才有 v2rayN.exe),所以同步的是 zip,不是单独的 exe。

  2. 安卓版不叫 v2rayN,叫 v2rayNG,是另一个仓库 2dust/v2rayNG

  3. 本教程默认目录:

    • Filebrowser 目录:/root/filebrowser

    • 文件存放目录:/root/filebrowser/my-files/proxy/

    如果你的路径不同,请把下面所有命令和脚本里的路径一起改掉。


第 1 步:SSH 登录 VPS,安装工具

apt update && apt install -y curl jq
  • curl:下载文件

  • jq:解析 GitHub 返回的 JSON

第 2 步:创建同步脚本

整段复制粘贴到终端,回车执行:

cat > /root/filebrowser/sync-proxy.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

DIR=/root/filebrowser/my-files/proxy
STATE=/root/filebrowser/.sync-state
mkdir -p "$DIR" "$STATE"

# 格式:名字;GitHub仓库;文件名正则
ITEMS=(
  "v2rayN;2dust/v2rayN;^v2rayN-windows-64.*\.zip$"
  "v2rayNG;2dust/v2rayNG;^v2rayNG_[0-9.]+_(arm64-v8a|armeabi-v7a)\.apk$"
)

for item in "${ITEMS[@]}"; do
  IFS=';' read -r name repo regex <<< "$item"
  echo "[$(date '+%F %T')] 检查 $name"

  json=$(curl -fsSL --retry 3 "https://api.github.com/repos/$repo/releases/latest")
  tag=$(jq -r .tag_name <<< "$json")

  if [ "$(cat "$STATE/$name.tag" 2>/dev/null)" = "$tag" ]; then
    echo "  已是最新 $tag,跳过"; continue
  fi

  tmp=$(mktemp -d)
  jq -r --arg re "$regex" '.assets[] | select(.name|test($re)) | "\(.name) \(.browser_download_url)"' <<< "$json" > "$tmp/list"
  if [ ! -s "$tmp/list" ]; then echo "  没匹配到文件,跳过"; rm -rf "$tmp"; continue; fi

  # 先全部下载到临时目录,成功后才替换旧文件
  while read -r fname url; do
    echo "  下载 $fname"
    curl -fL --retry 3 -o "$tmp/$fname" "$url"
  done < "$tmp/list"

  # 删除上一个版本的旧文件
  if [ -f "$STATE/$name.files" ]; then
    while read -r old; do rm -f "$DIR/$old"; done < "$STATE/$name.files"
  fi

  awk '{print $1}' "$tmp/list" > "$STATE/$name.files"
  while read -r fname _; do mv -f "$tmp/$fname" "$DIR/$fname"; done < "$tmp/list"
  echo "$tag" > "$STATE/$name.tag"
  rm -rf "$tmp"
  echo "  已更新到 $tag"
done
EOF
chmod +x /root/filebrowser/sync-proxy.sh

脚本里两条规则的含义

软件

正则

下载哪些文件

v2rayN

^v2rayN-windows-64.*\.zip$

Windows x64 的所有 zip(含 -desktop 版)

v2rayNG

^v2rayNG_[0-9.]+_(arm64-v8a|armeabi-v7a)\.apk$

arm64 和 armeabi-v7a 两个 apk,排除 fdroid 版

常见改法:

  • 只要 WPF 界面的 Windows 版:^v2rayN-windows-64\.zip$

  • 只要 arm64 的 apk:把 (arm64-v8a|armeabi-v7a) 改成 arm64-v8a

第 3 步:手动运行一次

/root/filebrowser/sync-proxy.sh
ls -lh /root/filebrowser/my-files/proxy/

正常输出类似:

[2026-09-21 11:33:10] 检查 v2rayN
  下载 v2rayN-windows-64.zip
  ...
  已更新到 7.24.9
[2026-09-21 11:33:40] 检查 v2rayNG
  下载 v2rayNG_2.2.6_arm64-v8a.apk
  ...
  已更新到 2.2.6

ls 应该能看到 zip 和 apk 文件。

如果提示“没匹配到文件”

说明官方文件名和脚本里的正则对不上。先看官方当前的文件名:

curl -s https://api.github.com/repos/2dust/v2rayN/releases/latest | jq -r '.assets[].name'
curl -s https://api.github.com/repos/2dust/v2rayNG/releases/latest | jq -r '.assets[].name'

然后修改脚本里对应的正则:

nano /root/filebrowser/sync-proxy.sh

(改完 Ctrl+O 回车保存,Ctrl+X 退出。)

第 4 步:设置每天自动运行

(crontab -l 2>/dev/null; echo "0 4 * * * /root/filebrowser/sync-proxy.sh >> /root/filebrowser/sync.log 2>&1") | crontab -

确认已添加:

crontab -l

应该看到:

0 4 * * * /root/filebrowser/sync-proxy.sh >> /root/filebrowser/sync.log 2>&1

含义:每天 4:00(按 VPS 系统时区)运行脚本,输出追加到 sync.log

注意:sync.log 要等 cron 第一次运行后才会出现。第一次手动运行的输出只显示在屏幕上,所以此时看不到日志文件是正常的。

第 5 步:清理手动放的旧文件

脚本只会删除它自己下载的旧版本,你之前手动放进去的旧文件需要自己删:

ls -lh /root/filebrowser/my-files/proxy/
rm /root/filebrowser/my-files/proxy/旧文件名

第 6 步:验证

  1. 浏览器打开 http://VPS的IP:8080,进入 proxy 目录,确认能看到最新文件。

  2. 第二天早上查看日志,确认 cron 自动运行成功:

tail -n 20 /root/filebrowser/sync.log

应该能看到当天 4 点的记录,没有新版本时显示“已是最新,跳过”。


日常维护

需求

命令

看运行日志

tail -n 20 /root/filebrowser/sync.log

手动立即检查更新

/root/filebrowser/sync-proxy.sh

强制重新下载 v2rayN

rm /root/filebrowser/.sync-state/v2rayN.tag && /root/filebrowser/sync-proxy.sh

强制重新下载 v2rayNG

rm /root/filebrowser/.sync-state/v2rayNG.tag && /root/filebrowser/sync-proxy.sh

强制全部重新下载

rm -rf /root/filebrowser/.sync-state && /root/filebrowser/sync-proxy.sh

修改运行时间

crontab -e

停止自动同步

crontab -e,删掉那一行

想同步其他软件怎么办

在脚本的 ITEMS=( ... ) 里加一行,格式为 名字;GitHub仓库;文件名正则,例如:

"clash;MetaCubeX/mihomo;^mihomo-windows-amd64-v[0-9.]+\.zip$"

名字不要和已有的重复,因为它会用来记录版本状态。


常见问题

Q1:日志显示 curl: (28) 或超时,下载不了? VPS 访问 GitHub 不通(国内机房常见)。需要给 VPS 配代理,或换一台能访问 GitHub 的机器。

Q2:日志显示 API rate limit exceeded GitHub 未登录接口每小时限 60 次(按 IP 计算)。每天运行一次通常不会超;如果同一 IP 有别的程序也在调用,第二天自动恢复。

Q3:cron 没有自动运行?

systemctl status cron

如果不是 active (running)

systemctl enable --now cron

Q4:Filebrowser 网页里看不到新文件? 刷新网页(F5)。如果还没有,确认文件在 /root/filebrowser/my-files/proxy/ 下,而不是别的目录。

Q5:下载中途断网会不会把现有文件弄丢? 不会。脚本先把新文件全部下载到临时目录,全部成功后才删除旧版本并替换。


文件位置速查

内容

路径

同步脚本

/root/filebrowser/sync-proxy.sh

下载的文件

/root/filebrowser/my-files/proxy/

版本记录

/root/filebrowser/.sync-state/

运行日志

/root/filebrowser/sync.log

0

评论区