上一篇记录了我用 4 台机器搭建个人 DevOps 平台的整体思路,这篇就把 3 月份完整落地的实战做一次全面复盘。内容包括 UFW 防火墙加固、MySQL 与 Jenkins 自动备份、Jenkins 自动化部署、Nginx 双活架构、安全组最小化开放,全部是可直接复用的干货。

37 岁这年,我不想再只停留在 CRUD 层面,而是想亲手搭建一套真正属于自己的技术底座。这套体系不仅能提升我的部署效率,也能作为软考论文素材、简历项目,甚至未来开源分享。

一、安全加固:主机防火墙与数据备份

1. UFW 防火墙最小权限配置

遵循 “默认拒绝、按需开放” 原则,只开放业务必需端口,关闭所有风险入口。

bash

运行

sudo ufw enable
sudo ufw default deny incoming

# 开放必要端口
sudo ufw allow 3022/tcp   # SSH
sudo ufw allow 80/tcp     # Web服务
sudo ufw allow 18082/tcp  # Jenkins
sudo ufw allow 13000/tcp  # Grafana
sudo ufw allow 7000/tcp   # FRP
sudo ufw allow 7500/tcp   # FRP管理端口

# 查看规则
sudo ufw status numbered

数据库 3306、Redis 6379 等内部端口一律不对外开放,避免公网暴露风险。

2. MySQL 自动备份脚本

使用docker exec实现热备,不影响业务运行,并自动清理 7 天前旧备份。

bash

运行

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/data/backup/mysql"
mkdir -p $BACKUP_DIR

docker exec mysql mysqldump -uroot -p密码 库名 > $BACKUP_DIR/db_$DATE.sql
find $BACKUP_DIR -type f -mtime +7 -delete

配合 crontab 每日凌晨 2 点执行:

bash

运行

0 2 * * * /bin/bash /data/script/backup_mysql.sh

同时对 Jenkins 目录也做了定时备份,确保配置不丢失,实现 7×24 小时稳定运行。

二、Jenkins 自动化部署流水线

我基于 Jenkins Pipeline 搭建了完整 CI/CD 流程:代码拉取 → 后端 Maven 编译 → 前端 Node 构建 → SSH 上传 → 服务重启。

核心 Pipeline 结构

groovy

pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                git url: 'https://仓库地址', branch: 'master'
            }
        }
        stage('后端编译') {
            steps {
                sh 'mvn clean package -DskipTests'
            }
        }
        stage('前端编译') {
            steps {
                sh 'npm install && npm run build'
            }
        }
        stage('上传阿里云') {
            steps {
                sshPublisher(...)
            }
        }
        stage('重启服务') {
            steps {
                sh 'ssh xgk@服务器IP "sudo systemctl restart app"'
            }
        }
    }
}

安全加固:非 root + sudo 白名单

为了避免权限过大,我专门创建部署用户xgk,并通过visudo限制其仅能执行特定命令:

plaintext

xgk ALL=(ALL) NOPASSWD: /usr/bin/mv, /home/xgk/start_backend.sh, /usr/bin/systemctl restart app

前端静态资源通过/tmp中转,再用 sudo 移动到 Nginx 目录,既安全又避免权限问题。

三、Nginx 双活架构与统一入口

1. 双活负载均衡配置

通过upstream实现阿里云主节点 + 内网 HP 备用节点自动故障转移:

nginx

upstream backend {
    server 阿里云IP:8080 max_fails=3 fail_timeout=30s;
    server 内网HP_IP:8080 backup;
}

server {
    listen 80;
    server_name 你的域名;

    location /admin {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }

    location /api {
        proxy_pass http://backend;
        proxy_set_header Host $host;
    }
}

任意一台机器宕机,流量自动切到另一台,实现真正高可用。

2. 统一 80 端口入口

  • /admin → 管理后台
  • /api → 后端接口
  • /ai → AI 服务

统一入口后架构更规范,也减少多端口暴露带来的安全风险。

四、安全组最小化开放

阿里云安全组只保留以下端口,删除 “全部开放” 高危规则:

  • 80(Web)
  • 3022(SSH)
  • 7000、7500(FRP)
  • 18082(Jenkins)
  • 13000(Grafana)
  • 60022(业务端口)

彻底杜绝端口扫描、暴力破解等基础风险。

五、3 月成果总结

本月所有 DevOps 目标 100% 完成:

  1. 部署从小时级 → 分钟级,效率大幅提升
  2. 实现双活架构,解决单点故障
  3. 完成防火墙、备份、最小权限三位一体安全体系
  4. 沉淀可复用脚本:Nginx、Jenkinsfile、UFW 规则、备份脚本

六、4 月计划

  • 完善监控体系:Prometheus + Grafana + 告警
  • MySQL 主从复制
  • 进一步优化双活与负载均衡策略

✨ 我是 37 岁 Java 老码农,正在记录个人 DevOps 平台搭建与职业成长。后续会持续更新:

  • 《技术底稿》系列:DevOps / 云原生 / 软考实战
  • 《人生底稿》系列:30 年成长与 37 岁职业思考

👉 关注我,一起踏实成长,不焦虑、不内卷。💬 你在 DevOps 或云原生学习中有什么踩坑经历?欢迎在评论区交流~

后续会持续更新《人生底稿》《技术底稿》系列,关注我不迷路~

📚 系列导航:

更多推荐