Taoの小窝
首页项目博客照片墙音乐技能栈说说杂谈友链关于
封面

从零搭建企业级 Web 服务运维体系:VMware + LNMP + 监控 + Docker 全实践

写作时间:2025-10-12 10:00:00
# 运维
# Linux
# Docker
# LNMP
# DevOps

在本地 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 个简历亮点;
  • 准备面试话术。

数据流向说明

  1. 用户请求:浏览器访问虚拟机 IP 的 80 端口;
  2. Nginx 接收请求:静态文件直接返回,PHP 请求转发给 PHP-FPM;
  3. PHP-FPM 处理:执行业务逻辑,必要时查询 MySQL 数据库;
  4. MySQL 返回数据:PHP 渲染页面后通过 Nginx 返回给用户;
  5. Prometheus 监控:定时拉取 Node Exporter 采集的 CPU、内存、磁盘等指标;
  6. 告警触发:指标超过阈值时,Alertmanager 发送邮件/钉钉通知;
  7. 数据保护:crontab 每天凌晨执行 mysqldump,保留最近 7 天备份;
  8. 容器化交付:最终用 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:本地虚拟机和生产环境有什么区别?

主要区别有三点:

  1. 可用性:生产环境通常有多台服务器、负载均衡、主从备份,而我本地只有一台虚拟机做功能验证。
  2. 安全性:生产环境有严格的安全组、防火墙、堡垒机、权限审计,本地为了学习方便做了简化。
  3. 规模性:生产环境面对的是真实流量和数据量,监控、日志、备份的粒度会更细。

但核心运维思路是一致的,比如服务部署、故障排查、备份恢复、监控告警这些能力,本地练好以后可以直接迁移到生产环境。

问题 3:如果让你把这套环境上云,你会怎么做?

我会分三步走:

  1. 基础设施迁移:购买云服务器(ECS),选择 CentOS 7/8 镜像,配置安全组开放 80/443/22 等端口,用 SSH 登录。
  2. 服务迁移:把本地 LNMP 的配置文件、网站代码、数据库备份上传到云服务器,恢复数据库,启动 Nginx 和 PHP-FPM,验证访问正常。
  3. 能力增强:接入云厂商的 SLB 做负载均衡,用 RDS 替代自建 MySQL 提升可靠性,用云监控补充 Prometheus 的监控,用 OSS 存放备份文件。

如果业务需要快速扩展,我还会把 LNMP 服务继续保留在 Docker 中,结合 Kubernetes 或云容器服务做编排。


项目成果

  • 完成 VMware + CentOS 7 虚拟化环境搭建;
  • 完成 LNMP 架构部署,浏览器可正常访问 PHP 站点;
  • 设计并落地 MySQL 定时备份方案,保留 7 天历史版本;
  • 搭建 Prometheus + Node Exporter + Alertmanager 监控告警体系;
  • 使用 Docker Compose 实现 LNMP 一键容器化部署;
  • 产出 6 份阶段文档和 1 份项目总结,可直接用于简历和面试。

学习心得

  1. 运维是"兜底"能力:开发再优秀,没有稳定的运行环境也是空谈;
  2. 文档是运维的生命线:每个配置、每次操作都要记录,方便回溯和交接;
  3. 监控比救火更重要:出了问题再排查成本很高,提前告警才能防患于未然;
  4. 容器化是未来趋势:Docker 让环境一致性变得简单,是 DevOps 的基石。

后续规划

  • 将环境迁移到云服务器(阿里云/腾讯云);
  • 增加日志收集系统(ELK Stack);
  • 使用 Ansible 实现配置自动化;
  • 引入 Kubernetes 做容器编排;
  • 完善 CI/CD 流水线。

总结

这个项目让我第一次完整地理解了"一套 Web 服务是如何跑起来的"。从操作系统安装到 Nginx 配置,从数据库备份到监控告警,从手动部署到 Docker 容器化,每一个环节都是企业运维的真实场景。

最重要的是,这个项目建立了一个可复现、可讲解、可迁移的运维实验环境。无论是写在简历上,还是面试中展开,都能自信地讲述每一个细节。

avatar

Tao

在数据与代码间探索的普通人 / 数据科学与大数据技术专业大三学生,坐标陕西西安。热爱技术实践与数据分析,正在找测试、数据分析方向的实习。

RECOMMENDED

Python + Pytest + Requests 接口自动化测试框架:从零搭建可维护的分层式测试工程

2025-12-20 12:00:00

数据分析入门:从数据清洗到可视化

2025-09-15 10:00:00

从零开始的数据分析学习项目:清洗、探索、可视化与机器学习入门

2025-08-15 10:00:00

Table of Contents