mirror of
https://github.com/yyhuni/xingrin.git
synced 2026-01-31 19:53:11 +08:00
79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
"""
|
||
远程节点部署脚本服务
|
||
|
||
脚本文件位置:backend/scripts/worker-deploy/
|
||
- bootstrap.sh: 环境初始化(安装基础依赖)
|
||
- install.sh: 安装 Docker + 拉取镜像
|
||
- uninstall.sh: 卸载脚本
|
||
- start-agent.sh: 启动 agent 容器
|
||
- agent.sh: 心跳上报(在容器内运行)
|
||
|
||
新架构说明:
|
||
- 远程节点只需安装 Docker 和运行 agent
|
||
- 扫描任务由主服务器通过 SSH docker run 执行
|
||
"""
|
||
|
||
from pathlib import Path
|
||
from django.conf import settings
|
||
|
||
# 脚本目录
|
||
SCRIPTS_DIR = Path(__file__).parent.parent.parent.parent / "scripts" / "worker-deploy"
|
||
|
||
|
||
def _read_script(filename: str) -> str:
|
||
"""读取脚本文件内容"""
|
||
script_path = SCRIPTS_DIR / filename
|
||
if script_path.exists():
|
||
return script_path.read_text()
|
||
else:
|
||
raise FileNotFoundError(f"脚本文件不存在: {script_path}")
|
||
|
||
|
||
def get_bootstrap_script() -> str:
|
||
"""获取环境初始化脚本"""
|
||
return _read_script("bootstrap.sh")
|
||
|
||
|
||
def get_deploy_script() -> str:
|
||
"""获取安装脚本(安装 Docker + 拉取镜像)"""
|
||
script = _read_script("install.sh")
|
||
# 注入镜像版本配置(确保远程节点使用相同版本)
|
||
docker_user = getattr(settings, 'DOCKER_USER', 'yyhuni')
|
||
image_tag = settings.IMAGE_TAG # 必须有值,settings.py 启动时已校验
|
||
version_export = f'export DOCKER_USER="{docker_user}"\nexport IMAGE_TAG="{image_tag}"\n'
|
||
# 在 set -e 后插入版本配置
|
||
script = script.replace('set -e\n', f'set -e\n\n{version_export}', 1)
|
||
return script
|
||
|
||
|
||
def get_uninstall_script() -> str:
|
||
"""获取卸载脚本"""
|
||
return _read_script("uninstall.sh")
|
||
|
||
|
||
def get_start_agent_script(
|
||
heartbeat_api_url: str = None,
|
||
worker_id: int = None
|
||
) -> str:
|
||
"""
|
||
获取 agent 启动脚本
|
||
|
||
:param heartbeat_api_url: 心跳上报地址
|
||
:param worker_id: Worker ID
|
||
"""
|
||
script = _read_script("start-agent.sh")
|
||
|
||
# 替换变量
|
||
script = script.replace("{{HEARTBEAT_API_URL}}", heartbeat_api_url or '')
|
||
script = script.replace("{{WORKER_ID}}", str(worker_id) if worker_id else '')
|
||
script = script.replace("{{WORKER_API_KEY}}", getattr(settings, 'WORKER_API_KEY', ''))
|
||
|
||
# 注入镜像版本配置(确保远程节点使用相同版本)
|
||
docker_user = getattr(settings, 'DOCKER_USER', 'yyhuni')
|
||
image_tag = settings.IMAGE_TAG # 必须有值,settings.py 启动时已校验
|
||
version_export = f'export DOCKER_USER="{docker_user}"\nexport IMAGE_TAG="{image_tag}"\n'
|
||
# 在 set -e 后插入版本配置
|
||
script = script.replace('set -e\n', f'set -e\n\n{version_export}', 1)
|
||
|
||
return script
|