在本地 VMware 虚拟机中,使用 CentOS 7 搭建一套完整的企业级 Web 服务运维体系,覆盖 LNMP、监控告警、MySQL 备份与 Docker 容器化部署。
项目概览
| 项目属性 | 内容 |
|---|---|
| 项目名称 | 企业级 Web 服务运维体系项目 |
| 项目代号 | Ops-Lab-2024 |
| 项目路径 | DevOps/linux-ops-resume-project |
| 技术栈 | VMware、CentOS 7、Nginx、MariaDB、PHP-FPM、Prometheus、Node Exporter、Alertmanager、Docker、Docker Compose |
| 核心目标 | 模拟企业内网环境,完成从 0 到 1 的运维体系落地 |
| 项目规模 | 7 个文档文件、约 2,610 行内容 |
为什么做这个项目?
很多企业在招聘运维工程师时,都希望候选人具备"能独立完成环境搭建、能排查问题、有完整项目经验"的能力。但对于没有真实企业环境的学习者来说,最现实的做法是:
- 在 Windows 笔记本上安装 VMware 虚拟机;
- 在虚拟机里部署 CentOS 7 服务器;
- 逐步搭建 LNMP、监控告警、备份、Docker 容器化等模块;
- 把整个流程整理成项目文档,写在简历上。
本项目就是这样一个本地可复现的企业级运维实验环境。它完整地模拟了企业内网的私有部署场景:独立的服务器、网络、存储和权限管理。
项目架构
┌─────────────────────────────────────────────────────────────┐
│ 宿主机:Windows 11 笔记本 │
│ 16 GB 内存 / i7 处理器 / VMware Workstation │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ VMware Workstation Player │ │
│ │ (虚拟化层:分配 CPU、内存、硬盘、网卡给虚拟机) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 虚拟机:CentOS7-Ops-Lab │ │
│ │ 4 GB 内存 / 4 核 CPU / 40 GB 硬盘 │ │
│ │ 网络模式:NAT(共享宿主机网络) │ │
│ │ IP:192.168.154.128(示例) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ LNMP 层 │ │ 监控告警层 │ │ 容器化层 │ │
│ │ │ │ │ │ │ │
│ │ Nginx │ │ Prometheus │ │ Docker │ │
│ │ MySQL │ │ Node Exporter│ │ Docker Compose│ │
│ │ PHP-FPM │ │ Alertmanager│ │ 容器化 PHP 站│ │
│ │ Web 站点 │ │ 邮件/钉钉告警│ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 数据备份层(MySQL 定时备份) │ │
│ │ crontab + mysqldump + 本地/远程保留策略 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
组件关系说明
| 层级 | 组件 | 作用 |
|---|---|---|
| 基础设施层 | Windows 11 + VMware | 提供虚拟化运行环境 |
| 操作系统层 | CentOS 7 | 承载所有服务,模拟企业服务器 |
| Web 服务层 | Nginx + PHP-FPM + MySQL | 运行 Web 应用,即 LNMP 架构 |
| 监控告警层 | Prometheus + Node Exporter + Alertmanager | 采集服务器指标,异常时发送告警 |
| 数据保护层 | crontab + mysqldump | 定时备份数据库,防止数据丢失 |
| 容器化层 | Docker + Docker Compose | 将服务打包成容器,提升部署效率 |
技术栈与作用
| 技术 | 作用 | 简历关键词 |
|---|---|---|
| VMware Workstation Player | 本地虚拟化平台 | 虚拟化技术、VMware |
| CentOS 7 | 企业级 Linux 服务器系统 | Linux 系统运维 |
| Nginx | 高性能 Web 服务器/反向代理 | Web 服务器、反向代理 |
| MySQL / MariaDB | 关系型数据库 | 数据库管理 |
| PHP-FPM | PHP 进程管理器,解析 PHP 请求 | 应用服务部署 |
| crontab | Linux 定时任务调度 | 定时任务、自动化运维 |
| mysqldump | MySQL 逻辑备份工具 | 数据备份与恢复 |
| Prometheus | 时序数据库 + 指标采集 | 监控体系搭建 |
| Node Exporter | 采集 Linux 系统指标 | 主机监控 |
| Alertmanager | 告警路由与通知 | 告警管理 |
| Docker | 容器化运行环境 | 容器化技术 |
| Docker Compose | 多容器编排工具 | 容器编排 |
项目实施阶段
阶段一:VMware + CentOS 7 部署
- 安装 VMware Workstation Player;
- 创建 CentOS 7 虚拟机,分配 4 GB 内存、4 核 CPU、40 GB 硬盘;
- 配置 NAT 网络,实现宿主机与虚拟机互通;
- 验收标准:虚拟机可以联网、可以用 SSH 连接。
阶段二:LNMP 环境搭建
- 使用
yum安装 Nginx、MariaDB、PHP-FPM; - 配置 Nginx 的
location规则,将 PHP 请求转发给 PHP-FPM; - 创建测试数据库和 PHP 探针页面;
- 调整文件权限和防火墙策略;
- 验收标准:浏览器访问虚拟机 IP 能看到 PHP 页面。
阶段三:MySQL 定时备份
- 编写 Shell 备份脚本;
- 使用
mysqldump全量导出数据库; - 通过
crontab每天凌晨 2 点自动执行; - 脚本自动删除 7 天前的旧备份,避免磁盘占满;
- 验收标准:每天自动生成
.sql备份文件。
阶段四:服务器资源监控告警
- 安装 Prometheus + Node Exporter;
- 配置告警规则:CPU > 80%、内存 > 85%、磁盘 > 90%;
- 使用 Alertmanager 发送邮件/钉钉告警;
- 验收标准:模拟高负载时收到告警通知。
阶段五:Docker 容器化部署
- 安装 Docker 和 Docker Compose;
- 分别为 Nginx、PHP-FPM、MySQL 编写 Dockerfile 或服务定义;
- 编写
docker-compose.yml统一编排网络、卷挂载、环境变量和端口映射; - 验收标准:
docker-compose up -d一条命令启动完整 LNMP 环境。
阶段六:项目总结与简历包装
- 整理项目架构图;
- 提炼技术点和亮点;
- 用 STAR 法则写 3-5 个简历亮点;
- 准备面试话术。
数据流向说明
- 用户请求:浏览器访问虚拟机 IP 的 80 端口;
- Nginx 接收请求:静态文件直接返回,PHP 请求转发给 PHP-FPM;
- PHP-FPM 处理:执行业务逻辑,必要时查询 MySQL 数据库;
- MySQL 返回数据:PHP 渲染页面后通过 Nginx 返回给用户;
- Prometheus 监控:定时拉取 Node Exporter 采集的 CPU、内存、磁盘等指标;
- 告警触发:指标超过阈值时,Alertmanager 发送邮件/钉钉通知;
- 数据保护:crontab 每天凌晨执行 mysqldump,保留最近 7 天备份;
- 容器化交付:最终用 Docker Compose 将 LNMP 服务打包,实现一键部署。
核心配置示例
Nginx 解析 PHP 配置
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
MySQL 定时备份脚本
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DB_NAME="mydb"
DB_USER="root"
DB_PASS="password"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.sql
# 删除 7 天前的旧备份
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
crontab 配置
# 每天凌晨 2 点执行备份
0 2 * * * /opt/scripts/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
Prometheus 告警规则
groups:
- name: server_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 2m
labels:
severity: warning
annotations:
summary: "CPU 使用率过高"
description: "实例 {{ $labels.instance }} 的 CPU 使用率超过 80%"
简历亮点(STAR 法则)
亮点 1:独立搭建企业级 Web 服务运维测试环境
- S(情境):为系统学习企业运维技术并积累项目经验,在本地 Windows 11 环境下规划并搭建一套完整的 Web 服务运维体系。
- T(任务):需要模拟真实企业服务器环境,完成从操作系统、Web 服务、数据备份、监控告警到容器化的全链路部署。
- A(行动):使用 VMware Workstation Player 虚拟化 CentOS 7 服务器,分配 4 GB 内存、4 核 CPU、40 GB 硬盘,配置 NAT 网络实现宿主机与虚拟机互通。
- R(结果):成功搭建稳定可用的企业级测试环境,为后续 LNMP、监控、备份、Docker 等模块提供统一基础设施支撑。
亮点 2:完成 LNMP 架构部署并上线 Web 应用
- S(情境):企业 Web 应用普遍采用 LNMP(Linux + Nginx + MySQL + PHP)架构。
- T(任务):在 CentOS 7 上部署 Nginx、MariaDB、PHP-FPM,并确保三者协同工作。
- A(行动):通过 yum 安装各组件,配置 Nginx 的
location规则将 PHP 请求转发给 PHP-FPM,创建测试数据库和 PHP 探针页面,调整文件权限和防火墙策略。 - R(结果):浏览器访问虚拟机 IP 可正常显示 PHP 页面,Nginx 成功解析 PHP 并与数据库交互,验证了 LNMP 架构的可用性。
亮点 3:设计并落地 MySQL 定时备份方案
- S(情境):数据库是企业核心资产,需要防范误操作、系统故障导致的数据丢失。
- T(任务):为 MariaDB 数据库设计一套自动化备份机制,并设置合理的保留策略。
- A(行动):编写 Shell 备份脚本,使用
mysqldump全量导出数据库,按日期命名备份文件;通过crontab每天凌晨 2 点自动执行;脚本中自动删除 7 天前的旧备份。 - R(结果):数据库每天自动生成
.sql备份文件,保留 7 天历史版本,具备基础的数据恢复能力。
亮点 4:搭建服务器资源监控告警体系
- S(情境):生产环境中需要实时掌握服务器健康状态,及时发现 CPU、内存、磁盘等资源瓶颈。
- T(任务):为 CentOS 7 虚拟机搭建一套资源监控和告警系统。
- A(行动):部署 Prometheus 作为监控核心,Node Exporter 采集主机指标;编写告警规则,当 CPU 使用率超过 80%、内存超过 85%、磁盘超过 90% 时触发告警;通过 Alertmanager 将告警发送到邮箱/钉钉。
- R(结果):成功实现服务器资源可视化监控,模拟高负载时可及时收到告警通知,提升了故障发现效率。
亮点 5:将 LNMP 服务容器化,实现一键交付
- S(情境):传统方式部署环境依赖复杂,不同环境之间容易出现"在我电脑上能跑"的问题。
- T(任务):使用 Docker 容器化技术,将 LNMP 服务打包成可移植的部署方案。
- A(行动):安装 Docker 和 Docker Compose,分别为 Nginx、PHP-FPM、MySQL 编写 Dockerfile 或服务定义,编写
docker-compose.yml统一编排网络、卷挂载、环境变量和端口映射。 - R(结果):通过
docker-compose up -d一条命令即可启动完整 LNMP 环境,实现了环境标准化和快速交付。
面试迁移话术
问题 1:你这个项目为什么没上云?
这个项目的核心目标是验证和掌握运维体系的落地能力,而不是追求基础设施的复杂度。本地 VMware 虚拟机环境完全复刻了企业内网的私有部署场景:有独立的服务器、网络、存储和权限管理。
实际上,企业云环境和本地虚拟机的运维逻辑是相通的:都要装系统、配服务、做监控、做备份、做容器化。如果给我一台云服务器,我可以用相同的流程在半小时内把这套环境迁移上去,并且云环境还能叠加 SLB、OSS、RDS、安全组等更多企业级能力。
问题 2:本地虚拟机和生产环境有什么区别?
主要区别有三点:
- 可用性:生产环境通常有多台服务器、负载均衡、主从备份,而我本地只有一台虚拟机做功能验证。
- 安全性:生产环境有严格的安全组、防火墙、堡垒机、权限审计,本地为了学习方便做了简化。
- 规模性:生产环境面对的是真实流量和数据量,监控、日志、备份的粒度会更细。
但核心运维思路是一致的,比如服务部署、故障排查、备份恢复、监控告警这些能力,本地练好以后可以直接迁移到生产环境。
问题 3:如果让你把这套环境上云,你会怎么做?
我会分三步走:
- 基础设施迁移:购买云服务器(ECS),选择 CentOS 7/8 镜像,配置安全组开放 80/443/22 等端口,用 SSH 登录。
- 服务迁移:把本地 LNMP 的配置文件、网站代码、数据库备份上传到云服务器,恢复数据库,启动 Nginx 和 PHP-FPM,验证访问正常。
- 能力增强:接入云厂商的 SLB 做负载均衡,用 RDS 替代自建 MySQL 提升可靠性,用云监控补充 Prometheus 的监控,用 OSS 存放备份文件。
如果业务需要快速扩展,我还会把 LNMP 服务继续保留在 Docker 中,结合 Kubernetes 或云容器服务做编排。
项目成果
- 完成 VMware + CentOS 7 虚拟化环境搭建;
- 完成 LNMP 架构部署,浏览器可正常访问 PHP 站点;
- 设计并落地 MySQL 定时备份方案,保留 7 天历史版本;
- 搭建 Prometheus + Node Exporter + Alertmanager 监控告警体系;
- 使用 Docker Compose 实现 LNMP 一键容器化部署;
- 产出 6 份阶段文档和 1 份项目总结,可直接用于简历和面试。
学习心得
- 运维是"兜底"能力:开发再优秀,没有稳定的运行环境也是空谈;
- 文档是运维的生命线:每个配置、每次操作都要记录,方便回溯和交接;
- 监控比救火更重要:出了问题再排查成本很高,提前告警才能防患于未然;
- 容器化是未来趋势:Docker 让环境一致性变得简单,是 DevOps 的基石。
后续规划
- 将环境迁移到云服务器(阿里云/腾讯云);
- 增加日志收集系统(ELK Stack);
- 使用 Ansible 实现配置自动化;
- 引入 Kubernetes 做容器编排;
- 完善 CI/CD 流水线。
总结
这个项目让我第一次完整地理解了"一套 Web 服务是如何跑起来的"。从操作系统安装到 Nginx 配置,从数据库备份到监控告警,从手动部署到 Docker 容器化,每一个环节都是企业运维的真实场景。
最重要的是,这个项目建立了一个可复现、可讲解、可迁移的运维实验环境。无论是写在简历上,还是面试中展开,都能自信地讲述每一个细节。