【技术底稿】02:37 岁老码农,3 月 DevOps 实战全复盘:从安全加固到自动化部署
上一篇记录了我用 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% 完成:
- 部署从小时级 → 分钟级,效率大幅提升
- 实现双活架构,解决单点故障
- 完成防火墙、备份、最小权限三位一体安全体系
- 沉淀可复用脚本:Nginx、Jenkinsfile、UFW 规则、备份脚本
六、4 月计划
- 完善监控体系:Prometheus + Grafana + 告警
- MySQL 主从复制
- 进一步优化双活与负载均衡策略
✨ 我是 37 岁 Java 老码农,正在记录个人 DevOps 平台搭建与职业成长。后续会持续更新:
- 《技术底稿》系列:DevOps / 云原生 / 软考实战
- 《人生底稿》系列:30 年成长与 37 岁职业思考
👉 关注我,一起踏实成长,不焦虑、不内卷。💬 你在 DevOps 或云原生学习中有什么踩坑经历?欢迎在评论区交流~
后续会持续更新《人生底稿》《技术底稿》系列,关注我不迷路~
📚 系列导航:
更多推荐

所有评论(0)