feat(deploy): 实现 enable_nginx_site 步骤 3(两段式建链)+ 步骤 4(清 default)

This commit is contained in:
deploy-bot
2026-06-02 22:07:05 +08:00
parent a6df8dcb92
commit b124fe78af
+30 -1
View File
@@ -306,7 +306,36 @@ def enable_nginx_site(remote_conf: str, domain: str) -> bool:
log_error("提示: 权限可能不足(检查 /etc/nginx/sites-enabled 写权限)")
return False
log_info("清理步骤完成")
return True # Task 3 替换为完整建链+清默认
# ===== 步骤 3: 建链(两段式:先二次检查,再 ln -snf) =====
log_info("建链步骤: 创建 symlink...")
# 第一段:二次检查 target 不存在(防并发进程干扰)
guard_cmd = f'if [ -e {target} ]; then echo "二次检查失败:target 仍存在" >&2; exit 1; fi'
ok, _, err = ssh_command(guard_cmd, timeout=30)
if not ok:
log_error(f"建链步骤失败 - 二次检查: {err}")
log_error("提示: 并发进程干扰(其他进程在步骤 2 后、步骤 3 前创建了同名项)")
log_error("上下文: 目标 = " + target)
return False
# 第二段:执行 ln -snf(独立 SSH 调用,错误信息不会被二次检查误报)
link_cmd = f'ln -snf {remote_conf} {target}'
ok, _, err = ssh_command(link_cmd, timeout=30)
if not ok:
log_error(f"建链步骤失败 - ln 执行: {err}")
log_error("提示: 确认 scp_file 是否成功上传了 sites-available 下的 conf 文件")
log_error("上下文: 目标 = " + target)
return False
log_info("建链步骤完成")
# ===== 步骤 4: 清理 default 站点(失败仅 warning =====
log_info("清默认步骤: 移除 default 站点...")
ok, _, err = ssh_command("rm -f /etc/nginx/sites-enabled/default", timeout=30)
if not ok:
log_warn(f"清默认步骤失败(不阻塞): {err}")
log_warn("提示: default 文件可能仍存在,nginx 可能有端口冲突;步骤 5 验证会确认")
else:
log_info("清默认步骤完成")
return True # Task 4 替换为完整 5 步(含验证)
# ============================================================================