这次我们来看一个面向零基础新手的 Linux 运维工程师全技能学习路径。对于想入行或转行运维的朋友来说,最头疼的往往不是某个具体技术,而是面对 Linux、监控、容器、数据库等一大堆名词,不知道从哪里开始,也不知道学到什么程度才算“会了”。

这篇文章的重点不是罗列所有命令,而是帮你理清一条从零到一、可落地、能验证的学习主线。我们会围绕 Linux 操作系统基础、Zabbix 企业监控、Docker 容器化、MySQL 数据库 以及 Nginx Web 服务 这五大核心技能展开,每个部分都给出明确的学习目标、实操验证方法和避坑指南。读完本文,你将知道如何搭建自己的实验环境,按顺序验证每一项技能,并最终形成一套可应对初级运维岗位需求的能力组合。

1. 核心能力速览:运维工程师技能树

对于新手,首先需要明确要学什么、以及这些技能在实际工作中解决什么问题。下表梳理了本文涵盖的五大核心技能及其关键点:

技能模块 核心解决什么问题 关键学习目标 推荐实验环境
Linux 操作系统 服务器管理、命令行操作、系统排障 掌握常用命令、用户权限、进程管理、网络配置、软件包管理 VMware/VirtualBox + CentOS 7/8 或 Ubuntu Server
Zabbix 监控 实时掌握服务器及应用的健康状态、预警故障 完成 Zabbix Server/Agent 部署、监控项配置、触发器告警、可视化图表 单机或双机部署(Server + 被监控主机)
Docker 容器化 实现应用快速部署、环境隔离、简化运维 学会 Docker 安装、镜像拉取与管理、容器生命周期管理、Dockerfile 编写 支持虚拟化的 Linux 环境(需开启 VT-x/AMD-V)
MySQL 数据库 数据存储、查询、备份恢复,支持业务应用 完成 MySQL 安装、用户与权限管理、基础 SQL 操作、备份与恢复 单独虚拟机或与应用同机部署
Nginx Web服务 提供 HTTP 服务、负载均衡、反向代理 实现 Nginx 安装、虚拟主机配置、静态资源服务、反向代理设置 与 PHP/Python/Java 应用结合测试

这套组合拳覆盖了从底层系统到上层应用监控的完整链条。学习的关键在于 动手实验 ,下面我们从环境准备开始。

2. 适用场景与使用边界

这套学习路径主要适用于以下几类人群和场景:

  • 零基础转行人员 :希望系统学习运维技能,寻求入门切入点。
  • 在校计算机相关专业学生 :需要将理论知识与实践操作结合,构建项目经验。
  • 开发人员 :希望了解运维知识,实现更好的 DevOps 协作。
  • IT 技术支持/桌面运维 :计划向服务器运维、云计算运维方向转型。

使用边界与注意事项:

  1. 实验环境与生产环境的区别 :本文所有操作均在实验环境(虚拟机)中进行。生产环境涉及高可用、安全加固、性能调优等更复杂的问题,需在掌握基础后进一步学习。
  2. 技术选型 :本文以 CentOS/Red Hat 系和 MySQL 为例,因为其在企业中使用广泛。实际工作中可能遇到 Ubuntu、Debian、PostgreSQL 等,其核心思想相通,掌握一种后迁移学习成本较低。
  3. 合法合规 :所有软件均使用开源版本,请在官方渠道下载。实验环境仅供个人学习使用,请勿用于攻击、渗透或干扰任何未经授权的系统。

3. 环境准备与前置条件

工欲善其事,必先利其器。一个稳定、隔离的实验环境是学习的第一步。

3.1 硬件与软件准备

  • 主机电脑 :建议 8GB 以上内存,100GB 以上可用磁盘空间。需要支持 CPU 虚拟化技术(Intel VT-x 或 AMD-V),这在 BIOS/UEFI 设置中开启。
  • 虚拟化软件 VMware Workstation Player (免费)或 Oracle VirtualBox (免费)。两者任选其一,本文命令以 CentOS 为例,在不同虚拟化软件上操作大同小异。
  • 操作系统镜像
  • 远程连接工具 Xshell SecureCRT 或系统自带的 ssh 命令。用于在物理机上连接虚拟机。

3.2 基础虚拟机创建流程(以 VMware + CentOS 7 为例)

  1. 创建新虚拟机 :选择“典型”配置,稍后安装操作系统。
  2. 选择客户机操作系统 :选择“Linux”,版本选择“CentOS 7 64位”。
  3. 命名与位置 :为虚拟机起名(如 Linux-Base ),并指定存放路径(磁盘空间充足的位置)。
  4. 指定磁盘容量 :建议 40GB 以上,选择“将虚拟磁盘拆分成多个文件”。
  5. 自定义硬件 (关键步骤):
    • 内存 :分配至少 2GB(2048 MB)。
    • 处理器 :分配 2 个核心。
    • 网络适配器 :选择“桥接模式”或“NAT 模式”。桥接模式可使虚拟机获得独立局域网 IP,更像一台真实服务器;NAT 模式通过主机共享上网,更简单。
    • CD/DVD :选择下载好的 CentOS 7 ISO 镜像文件。
  6. 完成并启动 :启动虚拟机,开始安装 CentOS。

3.3 操作系统安装要点

启动后进入安装界面:

  1. 语言与时区 :建议安装界面选择英文,时区选择 Asia/Shanghai
  2. 软件选择 务必选择“Server with GUI”或“Minimal Install” 。新手可选带图形界面(GUI)的,方便熟悉;追求效率或资源紧张选最小化安装。
  3. 安装目的地 :进入后直接点击完成即可,会自动分区。
  4. 网络和主机名 打开以太网连接 ,并设置主机名,如 linux-server
  5. 开始安装 :在安装过程中,设置 root 密码 并创建一个 普通用户 (如 ops ),并为其赋予管理员权限。
  6. 安装完成重启 :重启后接受许可协议,完成初始设置。

安装完成后,使用 ip addr 命令查看 IP 地址,然后就可以用远程连接工具通过 SSH 登录了。至此,你的第一台 Linux 实验服务器就绪。

4. Linux 操作系统核心技能实操

Linux 是运维的基石。以下不是命令大全,而是必须掌握并能解释其用途的核心操作。

4.1 系统状态与文件管理

  • 目标 :能快速查看系统状态,熟练进行文件操作。
  • 验证命令
    # 查看系统信息
    uname -a
    cat /etc/redhat-release  # 查看CentOS版本
    free -h                  # 查看内存使用(人类可读格式)
    df -h                    # 查看磁盘使用
    top                      # 动态查看进程与资源占用(按q退出)
    
    # 文件与目录操作
    pwd                      # 显示当前目录
    ls -la                   # 详细列出所有文件(包括隐藏文件)
    mkdir -p /opt/test       # 递归创建目录
    touch /opt/test/file.txt # 创建空文件
    cp /opt/test/file.txt /tmp/ # 复制文件
    mv /tmp/file.txt /tmp/newname.txt # 移动或重命名
    rm -rf /opt/test         # 强制递归删除(谨慎使用!)
    find / -name "*.conf" 2>/dev/null | head -5 # 查找文件
    

4.2 用户、权限与进程管理

  • 目标 :理解用户/组概念,会管理权限,能控制进程。
  • 验证命令
    # 用户与组
    useradd devuser          # 创建用户
    passwd devuser           # 为用户设置密码
    usermod -aG wheel devuser # 将用户加入wheel组(拥有sudo权限)
    id devuser               # 查看用户信息
    
    # 权限管理
    chmod 755 /opt/script.sh # 更改文件权限(所有者rwx,同组和他人rx)
    chown devuser:devgroup /opt/data # 更改文件所有者和所属组
    ls -l /opt/script.sh     # 查看文件权限
    
    # 进程管理
    ps aux | grep nginx      # 查看nginx相关进程
    kill -9 <PID>            # 强制结束进程(慎用)
    systemctl status sshd    # 查看sshd服务状态
    systemctl start/stop/restart sshd # 启动/停止/重启服务
    systemctl enable sshd    # 设置开机自启
    

4.3 网络配置与软件包管理

  • 目标 :能配置网络,会用 yum/dnf 安装软件。
  • 验证命令
    # 网络配置
    ip addr show             # 查看IP地址(新版)
    ifconfig                 # 查看IP地址(旧版,可能需安装net-tools)
    ping -c 4 8.8.8.8       # 测试网络连通性
    curl -I http://www.baidu.com # 测试HTTP连接
    
    # 软件包管理 (CentOS 7/8)
    yum update -y            # 更新所有包(CentOS 7)
    yum install -y vim wget net-tools tree # 安装常用工具
    yum remove tree          # 移除软件包
    yum search nginx         # 搜索软件包
    
    # 软件包管理 (Rocky Linux 8/9, CentOS 8)
    dnf update -y            # 更新所有包
    dnf install -y epel-release # 安装EPEL扩展源
    dnf install -y nginx     # 安装nginx
    

学习验证 :在虚拟机上完成以上所有命令操作,并理解其输出。尝试关闭再启动网络服务,安装并启动一个如 nginx 的服务,并通过 curl localhost 验证。

5. Zabbix 监控部署与配置实战

监控是运维的“眼睛”。Zabbix 是一款成熟的企业级开源监控解决方案。

5.1 环境准备与架构

本次实验采用 All-in-One 部署,即 Zabbix Server、Web 前端、数据库(MySQL/MariaDB)和 Zabbix Agent 都安装在同一台虚拟机上。这适合学习和测试。

  • 实验机 :使用前面安装好的 CentOS 7 虚拟机,确保内存 >= 2GB。
  • 架构 Zabbix Server + Web + DB (MariaDB) + Zabbix Agent (本地)

5.2 安装步骤(CentOS 7 + MariaDB)

  1. 配置 SELinux 和防火墙 (生产环境需精细配置,实验环境可临时关闭):

    setenforce 0                    # 临时关闭SELinux
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 永久关闭
    systemctl stop firewalld        # 停止防火墙
    systemctl disable firewalld     # 禁用防火墙开机启动
    
  2. 安装 MariaDB 数据库

    yum install -y mariadb-server mariadb
    systemctl start mariadb
    systemctl enable mariadb
    mysql_secure_installation       # 运行安全初始化脚本,设置root密码(如:zabbix)
    
  3. 创建 Zabbix 数据库和用户

    mysql -uroot -p
    # 在MySQL提示符下执行:
    create database zabbix character set utf8 collate utf8_bin;
    create user zabbix@localhost identified by 'zabbix_password'; # 设置一个强密码
    grant all privileges on zabbix.* to zabbix@localhost;
    flush privileges;
    quit;
    
  4. 安装 Zabbix 仓库和 Server/Web/Agent

    rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
    yum clean all
    yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-agent
    
  5. 导入初始数据库 schema

    zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p'zabbix_password' zabbix
    
  6. 配置 Zabbix Server 数据库连接

    vim /etc/zabbix/zabbix_server.conf
    

    找到并修改以下参数:

    DBHost=localhost
    DBName=zabbix
    DBUser=zabbix
    DBPassword=zabbix_password
    
  7. 配置 Zabbix Web 前端时区

    vim /etc/httpd/conf.d/zabbix.conf
    

    找到 php_value date.timezone 一行,取消注释并修改为:

    php_value date.timezone Asia/Shanghai
    
  8. 启动服务并设置开机自启

    systemctl restart zabbix-server zabbix-agent httpd
    systemctl enable zabbix-server zabbix-agent httpd
    

5.3 访问与初始配置

  1. 在物理机浏览器访问: http://<你的虚拟机IP>/zabbix
  2. 跟随安装向导:
    • Welcome :点击 Next。
    • Check of pre-requirements :确保所有项都是 OK,点击 Next。
    • Configure DB connection
      • Database type: MySQL
      • Database host: localhost
      • Database port: 0
      • Database name: zabbix
      • User: zabbix
      • Password: zabbix_password
      • 点击 Test connection,显示 OK 后点击 Next。
    • Zabbix server details :Server name 可填写 Zabbix server ,其他默认,点击 Next。
    • Pre-installation summary :确认无误后点击 Next。
    • Install :完成后点击 Finish。
  3. 登录 :默认用户名 Admin ,密码 zabbix

5.4 添加第一台主机并验证监控

  1. 登录后 ,点击左侧菜单栏【Configuration】-> 【Hosts】。
  2. 点击右上角 Create host
  3. Host 标签页
    • Host name: Linux-Server (可自定义)
    • Visible name: Linux-Server
    • Groups: 点击 Select,选择 Linux servers
    • Agent interfaces: 点击 Add,IP地址填写 127.0.0.1 ,Port 10050
  4. Templates 标签页
    • 点击 Select,搜索并选择 Template OS Linux by Zabbix agent ,然后点击 Add。
  5. 点击 Add 保存。
  6. 等待几分钟,回到【Monitoring】-> 【Hosts】,查看 Linux-Server Availability 列,如果 ZBX 图标变为绿色,表示 Agent 连接成功。
  7. 点击主机名进入,查看【Latest data】,可以看到 CPU、内存、磁盘、网络等监控项已经开始收集数据。

至此,你已成功部署了一个能监控自身基础指标的 Zabbix 监控系统。 这是理解监控概念的第一步。

6. Docker 容器化入门与实践

Docker 的核心价值在于“一次构建,处处运行”。我们通过安装和运行几个典型容器来感受它。

6.1 Docker 安装(CentOS 7)

# 1. 卸载旧版本(如有)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 2. 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

# 3. 设置稳定的仓库(使用阿里云镜像加速)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4. 安装 Docker Engine
yum install -y docker-ce docker-ce-cli containerd.io

# 5. 启动 Docker 并设置开机自启
systemctl start docker
systemctl enable docker

# 6. 验证安装
docker version
docker run hello-world # 运行测试镜像,如果成功会输出欢迎信息

6.2 Docker 核心操作验证

  • 目标 :理解镜像、容器、仓库的概念和基本操作。

  • 验证命令与步骤

    1. 拉取并运行一个 Nginx 容器

      # 拉取镜像(从Docker Hub)
      docker pull nginx:latest
      # 查看本地镜像
      docker images
      # 运行容器:-d 后台运行,-p 映射端口(主机端口:容器端口),--name 指定容器名
      docker run -d -p 8080:80 --name my-nginx nginx
      # 查看运行中的容器
      docker ps
      

      此时,在物理机浏览器访问 http://<虚拟机IP>:8080 ,应该能看到 Nginx 欢迎页。

    2. 进入容器内部

      docker exec -it my-nginx /bin/bash
      # 进入容器后,可以查看文件系统
      ls /usr/share/nginx/html/
      exit # 退出容器
      
    3. 容器生命周期管理

      docker stop my-nginx    # 停止容器
      docker start my-nginx   # 启动已停止的容器
      docker restart my-nginx # 重启容器
      docker rm -f my-nginx   # 强制删除运行中的容器
      docker ps -a            # 查看所有容器(包括已停止的)
      
    4. 数据持久化(挂载卷)

      # 在主机创建目录
      mkdir -p /opt/nginx-html
      echo "<h1>Hello from Host Directory</h1>" > /opt/nginx-html/index.html
      # 运行新容器,将主机目录挂载到容器内
      docker run -d -p 8081:80 -v /opt/nginx-html:/usr/share/nginx/html --name nginx-with-volume nginx
      

      访问 http://<虚拟机IP>:8081 ,将显示你自定义的 HTML 内容。这解决了容器内数据丢失的问题。

学习验证 :成功运行 hello-world nginx 容器,并能通过端口访问。理解 docker ps docker exec docker run -v 的作用。

7. MySQL 数据库安装与基础运维

MySQL 是运维必须打交道的数据库。我们从安装、安全配置到基础操作走一遍。

7.1 MySQL 8.0 安装(CentOS 7)

# 1. 下载并安装MySQL官方Yum仓库
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
rpm -Uvh mysql80-community-release-el7-7.noarch.rpm

# 2. 安装MySQL服务器
yum install -y mysql-community-server

# 3. 启动MySQL并设置开机自启
systemctl start mysqld
systemctl enable mysqld

# 4. 查看初始临时密码
grep 'temporary password' /var/log/mysqld.log
# 输出类似:`A temporary password is generated for root@localhost: JqkfT3j&l2i?`

7.2 安全配置与远程连接

  1. 运行安全脚本并修改root密码

    mysql_secure_installation
    
    • 输入上一步获取的临时密码。
    • 提示更改密码:输入 Y ,设置一个强密码(需包含大小写字母、数字、特殊字符)。
    • 移除匿名用户:输入 Y
    • 禁止root远程登录: 根据需求选择 。实验环境为了连接方便可以选 n ,生产环境务必选 Y
    • 移除test数据库:输入 Y
    • 重新加载权限表:输入 Y
  2. (可选)配置远程连接 (如果上一步禁止了root远程登录,则需要创建新用户):

    mysql -uroot -p
    

    在 MySQL 提示符下执行:

    -- 创建一个新用户,并允许从任何主机连接(生产环境应限制IP)
    CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'YourStrongPassword123!';
    -- 授予所有数据库的所有权限(生产环境应按需授权)
    GRANT ALL PRIVILEGES ON *.* TO 'remoteuser'@'%' WITH GRANT OPTION;
    -- 刷新权限
    FLUSH PRIVILEGES;
    EXIT;
    
  3. (可选)开放防火墙端口 (如果防火墙开启):

    firewall-cmd --permanent --add-port=3306/tcp
    firewall-cmd --reload
    

7.3 基础 SQL 操作与备份恢复

  • 目标 :会进行基本的库、表、数据操作,并完成备份恢复。

  • 验证操作

    1. 登录与基本操作

      mysql -uremoteuser -p -h<虚拟机IP>
      
      -- 查看所有数据库
      SHOW DATABASES;
      -- 创建测试数据库和表
      CREATE DATABASE testdb;
      USE testdb;
      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          username VARCHAR(50) NOT NULL,
          email VARCHAR(100)
      );
      -- 插入数据
      INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com'), ('bob', 'bob@example.com');
      -- 查询数据
      SELECT * FROM users;
      -- 更新数据
      UPDATE users SET email = 'alice_new@example.com' WHERE username = 'alice';
      -- 删除数据
      DELETE FROM users WHERE username = 'bob';
      
    2. 数据库备份与恢复

      # 在Linux命令行执行备份(导出)
      mysqldump -uremoteuser -p -h<虚拟机IP> testdb > /tmp/testdb_backup.sql
      # 模拟数据丢失,删除数据库(在MySQL内)
      # DROP DATABASE testdb;
      # 恢复数据库(导入)
      mysql -uremoteuser -p -h<虚拟机IP> -e "CREATE DATABASE testdb_restored;"
      mysql -uremoteuser -p -h<虚拟机IP> testdb_restored < /tmp/testdb_backup.sql
      # 登录验证数据
      mysql -uremoteuser -p -h<虚拟机IP> -e "USE testdb_restored; SELECT * FROM users;"
      

学习验证 :成功安装 MySQL,能用命令行和远程工具连接,完成数据库、表的创建和增删改查,并成功进行一次逻辑备份与恢复。

8. Nginx Web 服务配置与管理

Nginx 以其高性能和稳定性,广泛用于静态资源服务和反向代理。

8.1 Nginx 安装与启停

# CentOS 7 安装(来自EPEL源,需先安装EPEL)
yum install -y epel-release
yum install -y nginx

# 启动Nginx并设置开机自启
systemctl start nginx
systemctl enable nginx

# 检查状态和版本
systemctl status nginx
nginx -v

安装完成后,访问 http://<虚拟机IP> ,应能看到 Nginx 默认欢迎页。

8.2 核心配置实战:虚拟主机与反向代理

Nginx 的核心是配置文件 /etc/nginx/nginx.conf 及其包含的 conf.d/*.conf

  1. 配置虚拟主机(Server Block)

    cd /etc/nginx/conf.d
    cp default.conf test-site.conf
    vim test-site.conf
    

    修改 test-site.conf 内容如下:

    server {
        listen       80;
        server_name  test.local; # 用于本地测试的域名,需在物理机hosts文件解析
    
        # 指定网站根目录
        root   /usr/share/nginx/test-site;
        index  index.html index.htm;
    
        location / {
            try_files $uri $uri/ =404;
        }
    
        # 记录访问日志
        access_log  /var/log/nginx/test-site.access.log;
        error_log   /var/log/nginx/test-site.error.log;
    }
    
  2. 创建网站目录和测试页面

    mkdir -p /usr/share/nginx/test-site
    echo "<h1>Welcome to Test Site</h1><p>This is a virtual host test.</p>" > /usr/share/nginx/test-site/index.html
    chown -R nginx:nginx /usr/share/nginx/test-site
    
  3. 在物理机配置 hosts 解析 (以 Windows 为例,编辑 C:\Windows\System32\drivers\etc\hosts ,添加一行):

    <你的虚拟机IP> test.local
    
  4. 测试配置并重载 Nginx

    nginx -t # 测试配置文件语法,必须显示 `syntax is ok` 和 `test is successful`
    systemctl reload nginx # 平滑重载配置,不影响在线服务
    

    在物理机浏览器访问 http://test.local ,应能看到自定义的欢迎页面。

  5. 配置反向代理 (模拟将请求转发给后端应用,如 Tomcat): 编辑一个新的配置文件 proxy.conf

    server {
        listen       8088;
        server_name  _;
    
        location / {
            # 将请求代理到本机的8080端口(假设有个应用运行在8080)
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    测试并重载 Nginx 后,访问 http://<虚拟机IP>:8088 ,Nginx 会将请求转发给 127.0.0.1:8080 。你可以用 docker run -p 8080:80 nginx 启动一个容器来测试这个反向代理是否生效。

学习验证 :成功通过自定义域名访问到虚拟主机页面,并理解反向代理配置的基本格式。掌握 nginx -t systemctl reload nginx 这两个关键运维命令。

9. 技能串联与综合实验

单独学会每个组件是第一步,能将它们串联起来解决实际问题才是运维能力的体现。这里设计一个简单的综合实验:

场景 :部署一个 Python Flask 应用,使用 Nginx 做反向代理,用 Docker 容器运行 MySQL 作为数据库,并使用 Zabbix 监控整个服务器的资源状态。

  1. 启动 MySQL 容器

    docker run -d --name flask-mysql \
        -e MYSQL_ROOT_PASSWORD=rootpass \
        -e MYSQL_DATABASE=flaskdb \
        -e MYSQL_USER=flaskuser \
        -e MYSQL_PASSWORD=flaskpass \
        -p 3307:3306 \
        mysql:8.0
    
  2. 编写 Flask 应用 ( /opt/flask-app/app.py ):

    from flask import Flask
    import pymysql
    import os
    
    app = Flask(__name__)
    
    # 从环境变量读取数据库配置
    db_host = os.getenv('DB_HOST', 'localhost')
    db_port = int(os.getenv('DB_PORT', 3307))
    db_user = os.getenv('DB_USER', 'flaskuser')
    db_pass = os.getenv('DB_PASS', 'flaskpass')
    db_name = os.getenv('DB_NAME', 'flaskdb')
    
    def get_db_connection():
        return pymysql.connect(host=db_host, port=db_port,
                             user=db_user, password=db_pass,
                             database=db_name, charset='utf8mb4')
    
    @app.route('/')
    def hello():
        try:
            conn = get_db_connection()
            cursor = conn.cursor()
            cursor.execute('SELECT VERSION()')
            version = cursor.fetchone()
            conn.close()
            return f'Connected to MySQL. Version: {version[0]}'
        except Exception as e:
            return f'Database connection failed: {str(e)}'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    
  3. 创建 Flask 应用的 Dockerfile ( /opt/flask-app/Dockerfile ):

    FROM python:3.9-slim
    WORKDIR /app
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY . .
    CMD ["python", "app.py"]
    
  4. 创建 requirements.txt ( /opt/flask-app/requirements.txt ):

    Flask==2.3.3
    PyMySQL==1.1.0
    
  5. 构建并运行 Flask 应用容器

    cd /opt/flask-app
    docker build -t flask-app .
    docker run -d --name my-flask-app \
        -e DB_HOST=<虚拟机IP> \
        -e DB_PORT=3307 \
        -e DB_USER=flaskuser \
        -e DB_PASS=flaskpass \
        -e DB_NAME=flaskdb \
        -p 5000:5000 \
        flask-app
    
  6. 配置 Nginx 反向代理 : 创建 /etc/nginx/conf.d/flask-proxy.conf

    server {
        listen       80;
        server_name  app.local; # 同样需要在物理机hosts文件解析
    
        location / {
            proxy_pass http://127.0.0.1:5000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    

    测试并重载 Nginx。

  7. 在 Zabbix 中添加对这台服务器的监控

    • 确保 Zabbix Agent 已安装并运行 ( systemctl status zabbix-agent )。
    • 在 Zabbix Web 界面,像之前一样添加主机,IP 填写虚拟机 IP,链接 Template OS Linux by Zabbix agent 模板。
    • 观察监控数据是否正常采集。

验证 :在物理机浏览器访问 http://app.local ,应显示成功连接到 MySQL 数据库的版本信息。同时在 Zabbix 上可以观察到这台服务器的 CPU、内存、磁盘、网络以及 Nginx、MySQL、Docker 相关进程的监控状态(需配置相应监控项)。

10. 常见问题与排查方法

问题现象 可能原因 排查方式 解决方案
虚拟机无法上网 网络适配器配置错误、DNS问题 ping 8.8.8.8 cat /etc/resolv.conf ip addr 检查虚拟机网络设置(NAT/桥接),确认 /etc/sysconfig/network-scripts/ 下网卡配置文件正确。
Zabbix Web 安装向导报错 数据库连接失败、权限不足、SELinux/防火墙 查看 /var/log/zabbix/zabbix_server.log 、检查数据库服务状态、确认密码 核对 zabbix_server.conf 中的数据库连接信息;临时关闭 SELinux 和防火墙进行测试。
Zabbix Agent 状态为灰色 Agent 未启动、端口被防火墙阻挡、网络不通 systemctl status zabbix-agent telnet <server_ip> 10050 、检查防火墙规则 启动 Agent 服务,在 Server 和 Agent 的防火墙放行 10050/10051 端口。
Docker 命令报错 Cannot connect to the Docker daemon Docker 服务未启动、用户无权限 systemctl status docker 、将用户加入 docker 启动 Docker 服务,执行 sudo usermod -aG docker $USER 并重新登录。
MySQL 远程连接被拒绝 未授权远程登录、防火墙阻挡 mysql -uroot -p 登录后执行 SELECT host, user FROM mysql.user; 创建远程用户并授权,或在现有用户授权语句中使用 'user'@'%' 。开放防火墙 3306 端口。
Nginx 配置重载失败 配置文件语法错误 nginx -t 查看具体错误行 根据 nginx -t 的输出提示,修正配置文件中的语法错误。
综合实验应用无法连接数据库 数据库容器端口映射错误、应用配置的IP/端口不对、数据库用户权限不足 在应用容器内执行 telnet <宿主机IP> 3307 、检查数据库容器日志 docker logs flask-mysql 确认数据库容器端口映射正确,应用连接配置使用宿主机 IP 和映射后的端口,确保数据库用户有远程连接权限。

11. 学习路径建议与下一步

通过以上步骤,你已经完成了一个从零开始的、覆盖 Linux 运维核心技能的闭环实验。这只是一个起点,要成为一名合格的运维工程师,建议按以下路径深化:

  1. Linux 深化 :学习 Shell 脚本编程、计划任务 cron 、日志分析 ( journalctl , logrotate )、性能分析工具 ( vmstat , iostat , sar )、安全加固(SSH 密钥、fail2ban)。
  2. Zabbix 深化 :学习自定义监控项、触发器表达式、动作(告警通知)、模板的继承与宏、自动发现、低级自动发现(LLD)、监控图表聚合与屏幕。
  3. Docker 深化 :学习 Docker Compose 编排多容器应用、Dockerfile 最佳实践、私有镜像仓库搭建、容器网络与存储、Docker Swarm/Kubernetes 基础概念。
  4. MySQL 深化 :学习索引优化、慢查询日志分析、主从复制、备份策略(物理备份 xtrabackup )、数据库监控。
  5. Nginx 深化 :学习负载均衡配置、HTTPS 证书配置、缓存优化、安全配置(防爬虫、限流)、与 keepalived 搭配实现高可用。
  6. 自动化与编排 :学习 Ansible 自动化配置管理,这是将上述所有手动操作转化为代码的关键一步。
  7. 云原生与监控 :了解 Kubernetes 基础,学习 Prometheus + Grafana 这套云原生时代的监控组合。

最重要的建议是: 不要停留在“看过”。为每个知识点创建一个实验目录,记录你的操作命令、配置文件、遇到的问题和解决方案。这个记录本身就是你宝贵的经验库和面试作品集。遇到报错时,善用搜索引擎,阅读官方文档,理解错误日志。运维的成长,就是在不断解决问题的过程中实现的。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐