Skip to content

jurnlee/1panel-scripts

Repository files navigation

1Panel Hub 同步工具

管理1panel的编排模板和计划任务脚本库,从 Git 仓库自动同步到 1Panel 数据库的脚本工具。

背景与痛点

问题描述

1Panel 是一款现代化的 Linux 服务器运维管理面板,支持通过 Web UI 管理 Docker Compose 模板和脚本库。 虽然官方也提供构建自己的本地应用商店,但制作本地应用商店比较麻烦,个人习惯最简单的方式便剩下手动维护compose与脚本文件,然而官方并不提供这些同步,收费版未知。

痛点:

  • 手动维护困难:模板和脚本分散在各个仓库,手动复制粘贴效率低下且容易出错
  • 版本管理缺失:无法追踪模板和脚本的变更历史,难以回滚到稳定版本
  • 团队协作困难:多人维护时缺乏统一的同步机制,容易出现数据不一致
  • 更新流程繁琐:每次更新都需要手动登录面板操作,无法自动化

解决方案

本工具通过 Git 仓库作为单一数据源,自动将模板和脚本同步到 1Panel 数据库,实现:

  • ✅ 版本化管理:所有配置文件通过 Git 管理,支持版本追踪和回滚
  • ✅ 自动化同步:配合 Cron 定时任务,实现无人值守自动更新
  • ✅ 灵活配置:通过 JSON 配置文件轻松扩展新的同步目录

项目亮点

特性 说明
零外部依赖 仅使用 Python 标准库,无需安装额外包
配置驱动 通过 JSON 配置文件管理同步规则,扩展新目录无需改代码
多文件类型支持 单个目录支持匹配多种文件类型(如 *.yaml + *.yml
多数据库支持 不同内容可写入不同数据库文件(如 core.dbagent.db
智能 UPSERT 自动判断插入或更新,避免重复数据
本地仓库支持 支持使用本地 Git 仓库,适合离线环境或自托管场景
自更新能力 Cron 脚本支持自动拉取本项目最新代码

目录结构

panel_hub/
├── __init__.py      # 包初始化
├── __main__.py      # 支持 python -m panel_hub
├── main.py          # 入口、CLI 参数解析
├── config.py        # 配置管理
├── git_syncer.py    # Git 仓库同步器
├── db_manager.py    # 数据库管理器
└── hub_syncer.py    # Hub 同步器

.env.example              # 环境变量示例,提炼自script-libraries目录下的脚本
sync-config.example.json  # 配置文件示例
sync-task.sh              # Cron 定时任务脚本
requirements.txt          # 依赖说明

快速开始

环境要求

  • Python 3.8+
  • Git(如需从远程仓库同步)
  • 1Panel 已安装(用于数据库写入)

安装部署

# 方式一:克隆项目
git clone https://github.com/jurnlee/1panel-scripts.git
cd 1panel-scripts

# 方式二:下载压缩包
wget https://github.com/jurnlee/1panel-scripts/archive/main.tar.gz
tar -xzf main.tar.gz
cd 1panel-scripts-main

配置文件

复制示例配置并修改:

cp sync-config.example.json sync-config.json

编辑 sync-config.json

{
    "git_repo_url": "https://github.com/your-org/1panel-hub.git",
    "git_branch": "main",
    "db_base_path": "/opt/1panel/db",
    "repo_path": "/opt/scripts/1panel-hub",
    "sync_configs": [
        {
            "source_dir": "compose-templates",
            "db_file": "agent.db",
            "table": "compose_templates",
            "columns": {"name": "name", "content": "content"},
            "file_pattern": ["*.yaml", "*.yml"]
        },
        {
            "source_dir": "script-libraries",
            "db_file": "core.db",
            "table": "script_libraries",
            "columns": {"name": "name", "content": "script"},
            "file_pattern": "*.sh"
        }
    ]
}

环境变量配置

脚本库中的部分脚本需要环境变量支持。创建 .env 文件:

cp .env.example .env

编辑 .env

# Docker 镜像同步配置
TARGET_REGISTRY=registry.cn-hangzhou.aliyuncs.com/your-mirrors/
DOCKER_PREFIXES_TO_REMOVE=docker.xuyan.run/:dockerhub.azk8s.cn/:registry.docker-cn.com/

# 其他配置
# PYTHON=python3
# LOG_LEVEL=INFO

sync-task.sh 会自动加载 .env 文件到环境变量,脚本库中的脚本即可直接使用。

配置项说明

字段 必填 说明
git_repo_url Git 仓库地址,用于自动克隆
git_branch Git 分支,默认 main
db_base_path 数据库基础路径,默认 /opt/1panel/db
repo_path 本地仓库路径,指定后跳过 Git 操作
sync_configs 同步配置列表

sync_configs 子项说明:

字段 说明
source_dir Git 仓库中的目录名
db_file 目标数据库文件名
table 目标数据库表名
columns 列名映射,name 对应名称列,content 对应内容列
file_pattern 文件匹配模式,支持字符串或数组

使用方式

命令行运行

# 使用配置文件(推荐)
python3 -m panel_hub 
## 等同于
python3 -m panel_hub --config sync-config.json

# 预览模式(不写入数据库)
python3 -m panel_hub --config sync-config.json --dry-run

# 使用本地仓库
python3 -m panel_hub --config sync-config.json --repo /path/to/local/repo

# 指定数据库路径(覆盖配置文件)
python3 -m panel_hub --config sync-config.json --db-base /custom/db/path

# 详细日志
python3 -m panel_hub --config sync-config.json -v

命令行参数

参数 简写 说明
--config -c 配置文件路径
--db-base 数据库基础路径
--repo 本地仓库路径
--repo-url Git 仓库地址
--branch Git 分支
--dry-run 预览模式
--verbose -v 详细日志

定时任务(Cron)

# 编辑 crontab
crontab -e

添加定时任务:

# 每小时执行一次
0 * * * * /opt/scripts/sync-cron.sh -c /opt/scripts/sync-config.json >> /var/log/panel-hub-sync.log 2>&1

# 每天凌晨 3 点执行
0 3 * * * /opt/scripts/sync-cron.sh -c /opt/scripts/sync-config.json >> /var/log/panel-hub-sync.log 2>&1

自定义同步目录

添加新的同步目录只需在 sync_configs 中添加配置:

{
    "sync_configs": [
        {
            "source_dir": "app-templates",
            "db_file": "core.db",
            "table": "app_templates",
            "columns": {"name": "name", "content": "template"},
            "file_pattern": ["*.json", "*.json5"]
        }
    ]
}

仓库结构要求

Git 仓库(repo_path 或自动克隆的仓库)应包含与配置对应的目录:

your-1panel-hub/
├── compose-templates/
│   ├── nginx.yaml
│   ├── mysql.yml
│   └── redis.yaml
├── script-libraries/
│   ├── backup.sh
│   └── monitor.sh
└── app-templates/
    └── wordpress.json

文件命名规则:

  • 文件名(不含扩展名)将作为数据库中的 name 字段
  • 文件内容将作为数据库中的内容字段
  • 注意:同名文件会自动更新而非重复插入

注意事项

权限要求

  • 数据库文件:读写权限(1Panel 默认数据库位于 /opt/1panel/db/
  • 仓库目录:读写权限(用于 git clone/pull)
  • 日志目录:写权限(用于记录日志)

生产环境建议

  1. 备份优先:首次运行前备份数据库

    cp /opt/1panel/db/core.db /opt/1panel/db/core.db.bak
    cp /opt/1panel/db/agent.db /opt/1panel/db/agent.db.bak
  2. 先预览后执行:使用 --dry-run 确认无误后再正式执行

  3. 合理设置定时频率:建议每天同步一次,避免过于频繁

  4. 监控日志:定期检查日志文件,关注同步失败的情况

故障排查

问题 可能原因 解决方案
Git 克隆失败 网络问题或仓库地址错误 检查网络连接和仓库地址
数据库不存在 路径错误或 1Panel 未安装 确认 db_base_path 路径正确
权限不足 运行用户无读写权限 检查文件权限或使用 sudo
找不到目录 仓库结构与配置不匹配 确认 source_dir 存在
数据未更新 名称冲突或文件未匹配 检查 file_pattern 和文件扩展名

开发与扩展

添加新的数据源类型

修改 panel_hub/hub_syncer.py 中的 _sync_config 方法,添加自定义处理逻辑。

自定义列映射

配置文件中的 columns 支持灵活映射:

{
    "columns": {
        "name": "template_name",
        "content": "template_body"
    }
}

许可证

MIT License

About

管理1panel的编排模板和计划任务脚本库

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors