🎓 第30课:毕业项目:自动化运维平台

阶段五:自动化第6/6课

一、毕业项目概述

本项目将综合运用前29课所学知识,构建一个完整的自动化运维平台,涵盖配置管理、监控告警、备份恢复、日志分析等核心功能。

1.1 项目架构

┌─────────────────────────────────┐
│      自动化运维平台               │
├─────────────────────────────────┤
│  Ansible Playbooks               │
│  ├── 系统初始化 (01-06)          │
│  ├── 用户与服务 (07-12)          │
│  ├── 网络配置 (13-18)            │
│  └── 自动化部署 (25-27)          │
├─────────────────────────────────┤
│  监控告警 (28)                    │
│  备份恢复 (29)                    │
│  日志分析 (22)                    │
│  Shell脚本 (19-24)               │
└─────────────────────────────────┘

二、项目结构

ops-platform/
├── ansible/
│   ├── inventory/
│   ├── group_vars/
│   ├── roles/
│   │   ├── common/
│   │   ├── nginx/
│   │   ├── mysql/
│   │   └── monitoring/
│   ├── site.yml
│   └── deploy.sh
├── scripts/
│   ├── backup.sh
│   ├── health-check.sh
│   ├── log-analyze.sh
│   └── security-audit.sh
├── monitoring/
│   ├── prometheus.yml
│   ├── alert_rules.yml
│   └── grafana-dashboards/
└── docs/
    └── README.md

三、核心Playbook

# site.yml
---
- name: 全平台部署
  hosts: all
  become: yes
  roles:
    - common

- name: Web服务器
  hosts: webservers
  become: yes
  roles:
    - nginx

- name: 数据库服务器
  hosts: dbservers
  become: yes
  roles:
    - mysql

- name: 监控
  hosts: monitoring
  become: yes
  roles:
    - monitoring

四、一键部署脚本

#!/bin/bash
# deploy.sh - 一键部署
set -euo pipefail

ENV="${1:-staging}"
INVENTORY="inventory/$ENV.ini"

echo "===== 部署到 $ENV ====="

# 语法检查
ansible-playbook -i "$INVENTORY" site.yml --syntax-check

# Dry run
echo "\n--- 预演 ---"
ansible-playbook -i "$INVENTORY" site.yml --check

# 确认
read -p "确认部署到$ENV? [y/N] " confirm
[[ "$confirm" =~ ^[Yy]$ ]] || exit 0

# 部署
echo "\n--- 部署 ---"
ansible-playbook -i "$INVENTORY" site.yml

echo "\n===== 部署完成 ====="

五、健康检查脚本

#!/bin/bash
# health-check.sh - 全面健康检查
set -euo pipefail

check_disk() {
    local threshold=80
    df -h | awk "NR>1 && int(\$5)>$threshold {print "⚠️  "\$6" 已用"\$5}"
}

check_memory() {
    local avail=$(free | grep Mem | awk '{print $7}')
    [[ $avail -lt 100000 ]] && echo "⚠️  内存不足: $(free -h | grep Mem | awk '{print $7}') 可用"
}

check_load() {
    local load=$(cat /proc/loadavg | awk '{print $1}')
    local cores=$(nproc)
    echo "负载: $load / $cores核"
}

check_services() {
    for svc in nginx sshd cron; do
        systemctl is-active "$svc" &>/dev/null && echo "✅ $svc" || echo "❌ $svc"
    done
}

echo "===== 健康检查 ====="
check_disk
check_memory
check_load
check_services

六、课程总结

🎓 30课学习路径回顾

阶段课程核心技能
文件系统01-06分区、LVM、权限、维护
用户与进程07-12用户管理、systemd、cron
网络配置13-18网络、防火墙、SSH、Nginx
Shell脚本19-24Bash、awk/sed、正则、调试
自动化25-30Ansible、监控、备份、项目
🎓

🏆 毕业成就:Linux系统管理员

🎉 恭喜完成全部30课学习!

✅ 文件系统:从分区到LVM到维护

✅ 用户与进程:用户管理、systemd、定时任务

✅ 网络配置:网络、防火墙、SSH、Web服务

✅ Shell脚本:Bash编程、文本处理、正则

✅ 自动化:Ansible、监控、备份、综合项目

你已具备Linux系统管理员的全面技能!

附录:自动化运维平台学习资源

推荐书籍

书名作者重点
Linux命令行与Shell脚本编程大全BlumShell脚本全面覆盖
UNIX/Linux系统管理技术手册Nemeth系统管理圣经
Ansible: Up and RunningLintnerAnsible实战
鸟哥的Linux私房菜鸟哥中文经典入门

在线资源

认证路径

认证机构级别
LFCSLinux Foundation基础系统管理
LFCELinux Foundation高级系统工程师
RHCSARed HatRed Hat管理员
RHCERed HatRed Hat工程师
CKA/CKADCNCFKubernetes管理员/开发者

实践环境

常用速查表

# 文本处理速查
grep -E 'pattern' file     # 扩展正则搜索
sed -i 's/old/new/g' file  # 替换
awk '{print $1}' file     # 提取列
sort | uniq -c | sort -rn   # 频次统计
cut -d: -f1 file            # 切列
tr 'A-Z' 'a-z'             # 转小写

# 系统管理速查
systemctl status/start/stop/restart service
journalctl -u service -f    # 跟踪日志
df -h / du -sh *            # 磁盘使用
ps aux --sort=-%mem         # 内存排序
ss -tlnp                    # 监听端口
iptables -L -n              # 防火墙规则
crontab -e                  # 编辑定时任务
useradd -m -s /bin/bash user # 创建用户

# 网络诊断速查
ip addr / ip route          # 网络配置
ping / traceroute           # 连通测试
dig / nslookup              # DNS查询
curl -I url                 # HTTP头检查
nc -zv host port            # 端口测试
tcpdump -i eth0 port 80     # 抓包

七、实机验证记录

$ uname -a
Linux VM-4-3-ubuntu 6.8.0-101-generic #101-Ubuntu SMP PREEMPT_DYNAMIC Mon Feb  9 10:15:05 UTC 2026 x86_64 x86_64 x86_64 GNU/Linux
$ uptime
22:26:08 up 20:10,  0 user,  load average: 0.46, 0.63, 0.61
$ free -h
total        used        free      shared  buff/cache   available
Mem:           7.5Gi       2.3Gi       1.2Gi        49Mi       4.4Gi       5.2Gi
Swap:          9.9Gi       159Mi       9.8Gi
$ df -h | head -5
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           769M  1.1M  768M   1% /run
/dev/vda2        79G   29G   47G  39% /
tmpfs           3.8G   49M  3.8G   2% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock

九、运维成熟度

级别名称特征
L1手动全手动,无文档
L2脚本化有脚本,手动触发
L3自动化Ansible,版本控制
L4自服务开发自助,运维审核
L5AIOps自愈,智能运维
# Flask运维平台示例
from flask import Flask
import subprocess
app = Flask(__name__)

@app.route('/api/health')
def health():
    r = subprocess.run(['./health-check.sh'], capture_output=True, text=True)
    return r.stdout

@app.route('/api/deploy/')
def deploy(env):
    if env not in ['staging', 'production']: return 'Invalid', 400
    r = subprocess.run(['./deploy.sh', env], capture_output=True, text=True)
    return r.stdout

# 改进循环:
# 事故复盘 → 改进项 → 自动化机会 → Playbook/脚本
# 月度量: MTTR, 变更成功率, 告警准确率

专题:DevOps文化与实践

在实际生产环境中,DevOps文化与实践是系统管理员必须深入掌握的核心能力。本节将探讨常见场景、最佳实践和避坑指南。

常见问题与解决方案

问题1:脚本在生产环境运行异常

开发环境和生产环境的差异是脚本出错的常见原因。建议:

问题2:性能不达预期

优化策略:

问题3:可维护性差

改善方法:

最佳实践总结

#!/bin/bash
# DevOps文化与实践最佳实践模板
set -euo pipefail

# 1. 参数校验
[[ $# -lt 1 ]] && echo "Usage: $0 <arg>" >&2 && exit 1

# 2. 环境检查
require_cmd() {
    command -v "$1" >/dev/null || { echo "需要: $1" >&2; exit 1; }
}

# 3. 清理机制
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT

# 4. 日志记录
log() { echo "[$(date +%T)] $*"; }
err() { log "ERROR: $*" >&2; exit 1; }

# 5. 主逻辑
main() {
    log "开始处理: $1"
    # 业务逻辑
    log "处理完成"
}

main "$@"

进阶方向