提交 0e408812 authored 作者: 陈泽健's avatar 陈泽健

refactor(deploy): 将防火墙设置功能从主脚本中拆分为独立模块,减少主脚本代码量,便于维护

- 从new_auto.sh中移除firewalldjava函数代码
- 创建独立的auto_firewall_settings.sh脚本文件
- 将防火墙端口开放逻辑迁移至新的独立脚本
- 在主脚本中通过source方式调用防火墙设置功能
- 添加需求文档和计划执行文档
- 保持原有功能逻辑不变,仅进行代码结构重构
上级 b719ccea
# 主脚本模块化拆分防火墙设置
## 代码路径
- 需调用代码路径:[自动化部署脚本/x86架构/新统一平台/auto_firewall_settings.sh]
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh]
## 功能需求
### 功能目标
**目标:** 当前主脚本代码量过于庞大,不利于维护,现需将主脚本中的`firewalldjava`函数独立出来,通过在主脚本中调用`auto_firewall_settings`
### 需求描述
#### 调用逻辑
- 调用方式:
- 在主脚本中source导入`auto_firewall_settings.sh`,然后调用`firewalldjava`函数
```bash
# 在主脚本中导入防火墙设置查脚本(已有source导入,无需重复)
# source "$SCRIPT_DIR/auto_firewall_settings.sh"
# 调用防火墙设置函数
firewalldjava
```
- 接收脚本执行的返回参数,并使用log函数打印日志
- 0:防火墙设置成功,使用`log "INFO"`打印日志
- 1:防火墙设置失败,使用`log "ERROR"`打印错误日志,使用`return 1`退出当前函数部署操作
- 执行时机:
- 在主脚本中`check_files_upload`之后执行;
#### 脚本设计要求
- 主入口函数:
-`auto_firewall_settings.sh`中的函数`firewalldjava()`
- 主入口函数负责:
- 返回部署结果
- log函数依赖:
- 脚本中的log函数与主脚本保持一致
- 在主脚本中先source导入`auto_firewall_settings.sh`,再调用`firewalldjava`函数
- 变量初始化:
- 在主入口函数中初始化以下变量:
- `sudoset`:sudo命令前缀(根据用户权限判断)
- `SUDO`:sudo命令(兼容不同函数中的变量名)
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# 主脚本模块化拆分防火墙设置计划执行文档
## 需求来源
- 需求文档:`Docs/PRD/自动化部署脚本/新统一平台/需求文档/_PRD_主脚本模块化拆分防火墙操作_需求文档.md`
---
## 实现计划
### 1. 代码结构设计
```bash
auto_firewall_settings.sh
└── firewalldjava() # 已有函数
├── 增加变量初始化(sudoset/SUDO)
├── 开放防火墙端口
└── 返回结果
```
### 2. 实现步骤
- [ ] 在auto_firewall_settings.sh的firewalldjava函数开头增加变量初始化
- [ ] 在主脚本new_auto.sh中source导入auto_firewall_settings.sh
- [ ] 确认调用位置(check_files_upload之后)
### 3. 技术要点
#### 3.1 变量初始化
在firewalldjava函数开头增加:
```bash
# 初始化sudo相关变量
if [[ $(id -u) -ne 0 ]]; then
sudoset="sudo"
SUDO="sudo"
else
sudoset=""
SUDO=""
fi
```
#### 3.2 主脚本调用方式
```bash
# 导入防火墙设置脚本
source "$SCRIPT_DIR/auto_firewall_settings.sh"
# 调用防火墙设置函数
firewalldjava
```
### 4. 函数位置
- auto_firewall_settings.sh:firewalldjava函数(已存在,需增加变量初始化)
- new_auto.sh:在已有source导入区域添加auto_firewall_settings.sh导入
### 5. 返回值定义
| 返回值 | 含义 | 处理方式 |
|--------|------|----------|
| 0 | 防火墙设置成功 | 继续执行 |
| 1 | 防火墙设置失败 | log ERROR + return 1 |
### 6. 执行流程
```
check_files_upload → firewalldjava → 继续后续流程
```
---
## 代码修改
### 修改文件
1. `自动化部署脚本/x86架构/新统一平台/auto_firewall_settings.sh` - 增加变量初始化
2. `自动化部署脚本/x86架构/新统一平台/new_auto.sh` - 添加source导入
---
## 测试计划
- [ ] 测试firewalld服务未安装场景
- [ ] 测试端口开放成功场景
- [ ] 测试端口开放失败场景
- [ ] 测试非root用户场景
---
## 优化功能回填
> 本章节用于记录实现过程中发现的优化点和改进措施
| 日期 | 优化项 | 状态 | 备注 |
|------|--------|------|------|
| - | - | - | - |
#------------------------------开放防火墙端口-start------------------------------------------------------------------------------------------------------------------------
#--------开放服务端口---------------------
#==============================================================#
# 函数名: firewalldjava
# 功能: 开放 Java 服务所需防火墙端口(TCP/UDP)
# 说明: 自动检测 firewalld 状态,若开启则检查并开放以下端口:
# - TCP: 22(SSH), 443(HTTPS), 8848/9848(Nacos), 1883(MQTT), 8999(应用)
# - UDP: 123(NTP), 323(Telegraf/监控) —— 用于门口屏等设备
# 使用 --permanent 持久化规则,并在最后重新加载防火墙。
# 作者: [ubains]
# 日期: $(date +%Y-%m-%d)
#--------------------------------------------------------------#
# 参数: 无
# 返回: 0: 成功(或 firewalld 未运行)
# 1: firewalld 运行但操作失败
#--------------------------------------------------------------#
# 依赖: firewall-cmd, sudo(若使用 sudoset)
# 注意: 确保 $sudoset 已定义(如: sudoset="sudo")
#==============================================================#
function firewalldjava() {
log "INFO" "=================================================================="
log "INFO" "开始配置防火墙:开放服务所需端口"
log "INFO" "=================================================================="
# ------------------- 初始化变量 -------------------
# 初始化sudo相关变量
if [[ $(id -u) -ne 0 ]]; then
sudoset="sudo"
SUDO="sudo"
else
sudoset=""
SUDO=""
fi
# 定义 TCP 和 UDP 需要开放的端口
local tcp_ports=(22 443 8848 9848 1883 8883)
local udp_ports=(123 323)
# 检查 firewalld 是否正在运行
log "INFO" "正在检查 firewalld 服务状态..."
if ! $sudoset firewall-cmd --state >/dev/null 2>&1; then
log "WARN" "firewalld 未运行或未安装,跳过端口配置。"
log "INFO" "如需启用,请运行: sudo systemctl start firewalld && sudo systemctl enable firewalld"
return 0
fi
log "INFO" "✅ firewalld 已启用,开始配置端口..."
local failed=0
local changes_made=0
# ------------------- 开放 TCP 端口 -------------------
log "INFO" "🔍 检查并配置 TCP 端口: ${tcp_ports[*]}"
for port in "${tcp_ports[@]}"; do
if $sudoset firewall-cmd --zone=public --query-port="$port"/tcp >/dev/null 2>&1; then
log "INFO" "✅ TCP/$port 已开放,跳过"
else
log "INFO" "🔧 正在开放 TCP/$port ..."
if $sudoset firewall-cmd --zone=public --add-port="$port"/tcp --permanent >/dev/null 2>&1; then
log "INFO" "🎉 TCP/$port 开放成功(持久化)"
((changes_made++))
else
log "ERROR" "⛔ TCP/$port 开放失败,请手动检查"
((failed++))
fi
fi
done
# ------------------- 开放 UDP 端口 -------------------
log "INFO" "🔍 检查并配置 UDP 端口: ${udp_ports[*]}"
for port in "${udp_ports[@]}"; do
if $sudoset firewall-cmd --zone=public --query-port="$port"/udp >/dev/null 2>&1; then
log "INFO" "✅ UDP/$port 已开放,跳过"
else
log "INFO" "🔧 正在开放 UDP/$port ..."
if $sudoset firewall-cmd --zone=public --add-port="$port"/udp --permanent >/dev/null 2>&1; then
log "INFO" "🎉 UDP/$port 开放成功(持久化)"
((changes_made++))
else
log "ERROR" "⛔ UDP/$port 开放失败,请手动检查"
((failed++))
fi
fi
done
# ------------------- 重新加载防火墙 -------------------
if [[ $changes_made -gt 0 ]]; then
log "INFO" "🔄 检测到配置变更,正在重新加载 firewalld ..."
if $sudoset firewall-cmd --reload >/dev/null 2>&1; then
log "INFO" "✅ 防火墙重载成功!所有端口已生效。"
else
log "ERROR" "⛔ 防火墙重载失败,请手动执行: firewall-cmd --reload"
return 1
fi
else
log "INFO" "🟢 所有端口均已开放,无需重新加载。"
fi
# ------------------- 输出当前开放端口 -------------------
log "INFO" "📋 当前已开放的端口列表:"
$sudoset firewall-cmd --list-port 2>/dev/null || log "WARN" "无法获取端口列表"
# ------------------- 最终状态 -------------------
if [[ $failed -eq 0 ]]; then
log "INFO" "✅ 防火墙配置完成:所有端口检查通过。"
return 0
else
log "ERROR" "❌ 防火墙配置失败:共 $failed 个端口未能开放。"
return 1
fi
}
#------------------------------开放防火墙端口-end------------------------------------------------------------------------------------------------------------------------
......@@ -80,6 +80,14 @@ else
exit 1
fi
# 导入防火墙设置脚本
if [[ -f "$SCRIPT_DIR/auto_firewall_settings.sh" ]]; then
source "$SCRIPT_DIR/auto_firewall_settings.sh"
else
log "ERROR" "防火墙设置脚本不存在: $SCRIPT_DIR/auto_firewall_settings.sh"
exit 1
fi
#------------------------------检测模块-----------------------------------------------------
......@@ -414,110 +422,6 @@ fi
}
#------------------------------开放防火墙端口-start------------------------------------------------------------------------------------------------------------------------
#--------开放服务端口---------------------
#==============================================================#
# 函数名: firewalldjava
# 功能: 开放 Java 服务所需防火墙端口(TCP/UDP)
# 说明: 自动检测 firewalld 状态,若开启则检查并开放以下端口:
# - TCP: 22(SSH), 443(HTTPS), 8848/9848(Nacos), 1883(MQTT), 8999(应用)
# - UDP: 123(NTP), 323(Telegraf/监控) —— 用于门口屏等设备
# 使用 --permanent 持久化规则,并在最后重新加载防火墙。
# 作者: [ubains]
# 日期: $(date +%Y-%m-%d)
#--------------------------------------------------------------#
# 参数: 无
# 返回: 0: 成功(或 firewalld 未运行)
# 1: firewalld 运行但操作失败
#--------------------------------------------------------------#
# 依赖: firewall-cmd, sudo(若使用 sudoset)
# 注意: 确保 $sudoset 已定义(如: sudoset="sudo")
#==============================================================#
function firewalldjava() {
log "INFO" "=================================================================="
log "INFO" "开始配置防火墙:开放服务所需端口"
log "INFO" "=================================================================="
# 定义 TCP 和 UDP 需要开放的端口
local tcp_ports=(22 443 8848 9848 1883 8883)
local udp_ports=(123 323)
# 检查 firewalld 是否正在运行
log "INFO" "正在检查 firewalld 服务状态..."
if ! $sudoset firewall-cmd --state >/dev/null 2>&1; then
log "WARN" "firewalld 未运行或未安装,跳过端口配置。"
log "INFO" "如需启用,请运行: sudo systemctl start firewalld && sudo systemctl enable firewalld"
return 0
fi
log "INFO" "✅ firewalld 已启用,开始配置端口..."
local failed=0
local changes_made=0
# ------------------- 开放 TCP 端口 -------------------
log "INFO" "🔍 检查并配置 TCP 端口: ${tcp_ports[*]}"
for port in "${tcp_ports[@]}"; do
if $sudoset firewall-cmd --zone=public --query-port="$port"/tcp >/dev/null 2>&1; then
log "INFO" "✅ TCP/$port 已开放,跳过"
else
log "INFO" "🔧 正在开放 TCP/$port ..."
if $sudoset firewall-cmd --zone=public --add-port="$port"/tcp --permanent >/dev/null 2>&1; then
log "INFO" "🎉 TCP/$port 开放成功(持久化)"
((changes_made++))
else
log "ERROR" "⛔ TCP/$port 开放失败,请手动检查"
((failed++))
fi
fi
done
# ------------------- 开放 UDP 端口 -------------------
log "INFO" "🔍 检查并配置 UDP 端口: ${udp_ports[*]}"
for port in "${udp_ports[@]}"; do
if $sudoset firewall-cmd --zone=public --query-port="$port"/udp >/dev/null 2>&1; then
log "INFO" "✅ UDP/$port 已开放,跳过"
else
log "INFO" "🔧 正在开放 UDP/$port ..."
if $sudoset firewall-cmd --zone=public --add-port="$port"/udp --permanent >/dev/null 2>&1; then
log "INFO" "🎉 UDP/$port 开放成功(持久化)"
((changes_made++))
else
log "ERROR" "⛔ UDP/$port 开放失败,请手动检查"
((failed++))
fi
fi
done
# ------------------- 重新加载防火墙 -------------------
if [[ $changes_made -gt 0 ]]; then
log "INFO" "🔄 检测到配置变更,正在重新加载 firewalld ..."
if $sudoset firewall-cmd --reload >/dev/null 2>&1; then
log "INFO" "✅ 防火墙重载成功!所有端口已生效。"
else
log "ERROR" "⛔ 防火墙重载失败,请手动执行: firewall-cmd --reload"
return 1
fi
else
log "INFO" "🟢 所有端口均已开放,无需重新加载。"
fi
# ------------------- 输出当前开放端口 -------------------
log "INFO" "📋 当前已开放的端口列表:"
$sudoset firewall-cmd --list-port 2>/dev/null || log "WARN" "无法获取端口列表"
# ------------------- 最终状态 -------------------
if [[ $failed -eq 0 ]]; then
log "INFO" "✅ 防火墙配置完成:所有端口检查通过。"
return 0
else
log "ERROR" "❌ 防火墙配置失败:共 $failed 个端口未能开放。"
return 1
fi
}
#------------------------------开放防火墙端口-end------------------------------------------------------------------------------------------------------------------------
#x86架构ntp安装
function ntp_x86()
{
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论