收起左侧

通过1panel实现Docker部署的clash的订阅文件自动更新并自动匹配NAS参数

0
回复
328
查看
[ 复制链接 ]

0

主题

9

回帖

0

牛值

江湖小虾

前言 & 流程介绍

首先感谢Maaaa 抛砖引玉,大家在看这个教程之前,请先参照Maaaa大大,在Docker 成功部署了Docker版的Clash, 我这个教程主要帮助通过

a. 1panel 添加shell计划任务,实现每天定时更新订阅(config.yaml)文件,

b. 根据大家的部署的nas ip地址,自动化修改下载下来的config.yaml的参数:

检索external-controller字段,自动加上NAS IP地址;

额外补充 Host 模式必需配置(确保局域网可访问):

自动补充 allow-lan: true(Host 模式必需),

c.并自动重启容器(这样才能重新加载更新后的config.yaml);

操作步骤

  1. 大家先要在 应用中心 下载1panel, 1panel的安装教程很多,我就在这里累述,大家可以参考论坛的文章;

  2. 1panel安装后,选择 计划任务, 创建 计划任务,任务类型:Shell 脚本;任务名称随意,如clash_refresh, 执行周期:每天;

    屏幕截图2025-12-10200231.png

  3. 脚本内容,填写如下,大家只需要替换脚本里的 核心配置项 红色 部分的内容; *

3.1 CONFIG_PATH 是你部署clash容器的放置config.yaml文件路径 ( 获取方法:在飞牛os的文件管理里,找到config.yaml,右键 详细信息,复制原始路径 )

3.2 SUBSCRIBE_URL 是您的clash订阅的地址(服务商提供的URL里复制粘贴),替换xxxxxx的内容,这里要特别留意,有的URL尾部需要加入参数,如&flag=clash,我的地址就需要添加,如果不添加,抓下面的订阅参数会有问题;

3.3 NAS_IP 就是你飞牛OS的IP地址

3.4 MIHOMO_CONTAINER_NAME 为你的clash容器的名称,如果大家参照的是Maaaa大大的流程部署的话,这个名称无需修改,如果是用的别的镜像方式部署的,请按照我下面备注的方式获取你的容器名。

3.5 DOCKER_CMD 为飞牛OS默认Docker路径(无需修改)。

3.6 脚本的地方就不要修改,因为在脚本的核心置顶项做了定义,后面的脚本都是引用,所以特别提醒,# 核心配置项(仅需维护红色的参数这里),不要对其他项目名称修改,影响到后面脚本的引用。

image.png

#!/bin/bash
# Mihomo 配置下载 + API 地址替换脚本(NAS IP:192.168.31.96)
# 核心配置项(仅需维护这里)
CONFIG_PATH="/vol1/1000/docker/clash/config.yaml"
SUBSCRIBE_URL="https://XXXXXXXXX&flag=clash"
NAS_IP="192.168.31.96"  # 修正为你的 NAS 实际 IP
MIHOMO_CONTAINER_NAME="mihomo"  # 飞牛OS上的Mihomo容器名(执行 docker ps 查看)
DOCKER_CMD="/usr/bin/docker"          # 飞牛OS默认Docker路径(无需修改)
# 1. 下载订阅配置(覆盖原有配置)
echo "===== 开始下载 Clash 订阅配置 ====="
wget -O "$CONFIG_PATH" "$SUBSCRIBE_URL" --connect-timeout 30 --tries 2
# 检查下载是否成功
if [ $? -ne 0 ]; then
    echo "❌ 错误:配置文件下载失败(网络问题/订阅链接无效)"
    exit 1
fi
echo "✅ 配置文件下载成功,路径:$CONFIG_PATH"
# 2. 替换 external-controller 为 NAS 实际 IP
echo "===== 开始替换 API 监听地址 ====="
# -i.bak:修改前自动备份原文件(生成 config.yaml.bak)
sed -i.bak \
  's/^external-controller: .*/external-controller: '"$NAS_IP"':9090/' \
  "$CONFIG_PATH"
# 3. 验证替换结果
if grep -q "external-controller: $NAS_IP:9090" "$CONFIG_PATH"; then
    echo "✅ API 地址替换成功:external-controller: $NAS_IP:9090"
    # 可选:确认无误后删除备份文件(注释掉则保留备份)
    # rm -f "${CONFIG_PATH}.bak"
else
    echo "⚠️ 警告:API 地址替换失败!可能是配置文件中无 external-controller 行"
    # 自动补充 external-controller 配置(避免缺失)
    echo -e "\nexternal-controller: $NAS_IP:9090" >> "$CONFIG_PATH"
    echo "✅ 已自动补充 external-controller 配置到文件末尾"
fi
# 4. 额外补充 Host 模式必需配置(确保局域网可访问)
if ! grep -q "allow-lan: true" "$CONFIG_PATH"; then
    echo -e "\nallow-lan: true" >> "$CONFIG_PATH"
    echo "✅ 自动补充 allow-lan: true(Host 模式必需)"
fi
# ====================== 飞牛OS新增:重启Mihomo容器逻辑 ======================
echo -e "\n===== 飞牛OS:开始重启 Mihomo 容器 ====="
# 步骤1:检查Docker命令是否存在(适配飞牛OS环境)
if [ ! -x "$DOCKER_CMD" ]; then
    echo "❌ 错误:飞牛OS未找到Docker命令,路径:$DOCKER_CMD"
else
    # 步骤2:检查容器是否存在(飞牛OS容器名大小写敏感)
    CONTAINER_EXIST=$($DOCKER_CMD ps -a --format "{{.Names}}" | grep -w "$MIHOMO_CONTAINER_NAME")
    if [ -z "$CONTAINER_EXIST" ]; then
        echo "❌ 错误:飞牛OS中容器 $MIHOMO_CONTAINER_NAME 不存在(执行 docker ps -a 核对)"
    else
        # 步骤3:获取飞牛OS中容器当前状态
        CONTAINER_STATUS=$($DOCKER_CMD inspect -f '{{.State.Status}}' "$MIHOMO_CONTAINER_NAME" 2>/dev/null)
        echo "ℹ️ 飞牛OS容器 $MIHOMO_CONTAINER_NAME 当前状态:$CONTAINER_STATUS"
        # 步骤4:重启/启动容器(适配飞牛OS容器管理逻辑)
        if [ "$CONTAINER_STATUS" = "running" ]; then
            $DOCKER_CMD restart "$MIHOMO_CONTAINER_NAME" >/dev/null 2>&1
        else
            $DOCKER_CMD start "$MIHOMO_CONTAINER_NAME" >/dev/null 2>&1
        fi
        # 步骤5:验证重启结果(飞牛OS容器启动需短暂等待)
        sleep 3
        NEW_STATUS=$($DOCKER_CMD inspect -f '{{.State.Status}}' "$MIHOMO_CONTAINER_NAME" 2>/dev/null)
        if [ "$NEW_STATUS" = "running" ]; then
            echo "✅ 飞牛OS容器 $MIHOMO_CONTAINER_NAME 重启/启动成功"
        else
            echo "❌ 飞牛OS容器 $MIHOMO_CONTAINER_NAME 重启失败,当前状态:$NEW_STATUS"
        fi
    fi
fi
# ==========================================================================
echo "===== 所有操作完成 ====="
echo "===== 所有操作完成 ====="
  1. 脚本修改完后,点击 确认;回到了 计划任务 的列表,如下图,这时候你可以点击“执行” 按钮,手动执行一次; 另外你也可以手动文本打开更新后的config.yaml检查下是不是已经正确修改了external-controller的地址;

屏幕截图2025-12-10204533.png

  1. 查看 报告,如果没有报错说明已经更新成功;

屏幕截图2025-12-10205328.png

  1. 这个脚本后续就会每天按照你的定义的时间进行更新,当然你也可以像手机客户端一样,进飞牛手机app,打开1panel,手动点“执行”,进行手动更新; *

补充:

  • 因为不同的服务商提供的节点文件config.yaml可能会有细微的不同,但基本上主要是external-controller(缺失,或者是没有指向NAS IP),或者是缺失allow-lan: true(Host 模式必需),这个脚本都可以自动化的修订,如果是修订其他的参数的,可以在脚本的:# 2. 替换 external-controller 为 NAS 实际 IP,类似 's/^external-controller: .*/external-controller: '"$NAS_IP"':9090/' \ ,添加新的字段修改;
收藏
送赞 2
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则