尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从虚拟机到Nginx部署:Linux运维入门完整指南

从虚拟机到Nginx部署:Linux运维入门完整指南 一套教程的时间从零开始在虚拟机里装好 Linux、学会常用命令、掌握系统管理最后把第一个服务部署到服务器上。这个路径是运维入门最稳的一条路线也是很多运维工程师真正上手前的第一课。文章会用一个最小可复现的流程展开先在 VMware Workstation 里创建虚拟机并安装 Linux再讲日常使用频率最高的命令和系统管理手段然后以 Nginx 静态站点为例完成服务部署最后补充网络不通、命令找不到、服务起不来这类高频问题的排查思路。整个过程不需要真实服务器只要一台内存不低于 8GB 的电脑就能完成。读完可以带走两样东西一套可以反复练手的 Linux 学习环境以及一张遇到问题时能按顺序自查的排障清单。1. 先理解虚拟机和 Linux 之间的关系再动手安装新手最容易犯的错是看到“虚拟机安装 Linux”就直接下载镜像开始装。装到一半发现内存不够、网卡配置不对、VMware Tools 装不上再回头查原因浪费的时间远超先花十分钟理解环境结构。1.1 虚拟机解决的是“物理资源复用”问题虚拟机Virtual MachineVM本质是通过虚拟化软件在一台物理电脑上模拟出 CPU、内存、硬盘、网卡等硬件资源。Linux 安装在虚拟机里时它感知到的是一台完整计算机并不知道自己是运行在真实硬件还是虚拟硬件上。对学习 Linux 来说虚拟机的价值非常直接不破坏本机系统不用重装电脑。可以随时创建快照练坏了马上回滚。可以同时跑多台 Linux模拟多服务器环境。网络、磁盘、硬件配置可以在虚拟软件里调整。日常运维学习的首选组合是 Windows 或 mac 上装 VMware Workstation再在虚拟机里安装 CentOS、Ubuntu 或 openEuler 等 Linux 发行版。如果公司已经在用某一种商业虚拟化平台原理也是类似的只是管理入口不同。1.2 选择发行版时要看“学习目的”而不是“网上推荐”Linux 发行版很多容易让新手纠结。这里给一个直接判断方法学运维入门、以后要进企业维护服务器优先选 RHEL 系的 CentOS Stream、Rocky Linux 或 AlmaLinux更偏开发环境日常写代码、跑 Node.js 或 Python选 Ubuntu Server 更顺手。原因在于企业服务器的生态差异。RHEL 系使用dnf或yum包管理器和 RPM 包格式配置文件路径、服务管理方式和底层的 SELinux 机制与 Ubuntu 不同。如果教程和面试问题都围绕 RHEL 系展开学习效率更高。从稳定性角度考虑CentOS 7 虽然是很多老项目在用的系统但已经进入维护周期的末期建议新学习时直接使用 Rocky Linux 9、AlmaLinux 9 或 Ubuntu 22.04/24.04。这些系统在线资料丰富新部署服务时的兼容性问题也少一些。2. 从虚拟机创建到系统安装完成完整操作过程环境准备阶段的目标不是“把系统装上”而是得到一个能联网、能传文件、能随时回滚的实验环境。下面以 VMware Workstation 中安装 Rocky Linux 9 为例步骤同样适用于多数主流发行版。2.1 硬件要求和软件准备学习环境对物理电脑的要求并不高但虚拟机要同时运行宿主系统和客户机资源会被分走一部分。建议最低配置如下项目最低要求推荐配置说明内存8GB16GB及以上虚拟机分配2GBHost系统至少剩余4GBCPU双核四核及以上虚拟机分配2核即可磁盘空闲30GB50GB以上动态分配磁盘初始占用较小虚拟化支持VT-x/AMD-V需在BIOS开启不开启无法运行64位虚拟机软件准备包括两部分VMware Workstation 安装包以及 Linux 的 ISO 镜像文件。镜像尽量从发行版官网或高校镜像站下载不要使用来路不明的精简版 ISO否则安装过程中容易出现“缺少软件包”“引导失败”等奇怪问题。下载 Rocky Linux 9 时选择x86_64架构的 DVD ISO 即可。如果准备安装带图形界面的版本DVD ISO 里已经包含常用桌面环境如果只想用纯命令行服务器选 Minimal ISO 更轻量。2.2 创建虚拟机时应避免的三个默认选择在 VMware Workstation 中点击“创建新的虚拟机”选择“典型推荐”模式然后引导选择 ISO 镜像。以下三个位置最容易出错。第一客户机操作系统类型选择。如果安装的是 64 位 Linux务必选择“Linux”分类下对应版本例如“Red Hat Enterprise Linux 9 64 位”。选错了虚拟机固件或硬件兼容模式安装时会出现“客户机操作系统已禁用 CPU。请关闭或重置虚拟机”的报错。第二固件类型。VMware 默认可能选择 UEFI也可能选择 BIOS。RHEL 系和 Ubuntu 22.04 之后都默认支持 UEFI 安装但旧教程大多基于 BIOS。如果安装过程中无法引导可以先检查虚拟机设置里的固件类型与实际系统是否匹配。第三网络连接方式。新手学习场景建议使用“NAT 模式”。NAT 模式下虚拟机通过宿主机的 IP 地址访问外网物理电脑能上网虚拟机一般也能上网不需要额外配置 IP。注意虚拟机创建完成后不要着急点“开启此虚拟机”。先在“虚拟机设置”里确认处理器、内存、网络适配器和 CD/DVD 是否都符合预期再开始安装。2.3 系统安装过程中的分区方式要理解后再选启动虚拟机后进入系统安装界面。分区是新手最担心的一步其实对学习环境来说选择“自动分区”完全足够。系统安装器会自动创建/boot、/和 swap 分区不会影响使用。如果后续要模拟企业服务器磁盘规划可以手动分区。这里给一个最常见的服务器分区方案挂载点大小文件系统说明/boot1GBxfs 或 ext4内核和引导文件/剩余空间xfs根文件系统swap2GB-4GBswap内存不足时的交换空间生产环境往往还会单独划分/home、/var、/data核心目的有两个防止日志打满根分区以及让不同业务数据隔离存放。学习阶段不需要这么复杂。安装过程中软件选择界面建议勾选“带 GUI 的服务器”或直接使用“最小安装”。第一次学习建议带图形界面便于浏览系统以后熟练了再回到最小安装能节省不少内存。2.4 安装完成后要做的一次快照系统安装完成后先做一次完整更新然后创建一个干净快照。后续练习服务部署或执行命令时如果改坏了系统直接回滚到这个快照即可。打开终端执行sudo dnf update -y然后确认网络是否正常ping -c 4 baidu.com如果ping能通进入 VMware 菜单“虚拟机 - 快照 - 拍摄快照”命名baseline-installed。3. 把精力集中在这些高频命令上其余命令用到再查命令学习最怕“从第一页背到最后一页”。Linux 命令有上千个但日常运维真正高频使用的只有几十个。按功能分组学习比按字母顺序记忆有效得多。3.1 文件和目录操作是使用频率最高的一组ls、cd、pwd、cp、mv、rm、mkdir、touch、find这九个命令构成了文件操作基础。不必每个参数都记住先掌握最常见写法# 查看当前目录下所有文件含隐藏文件 ls -la # 切换到 /var/log 目录 cd /var/log # 显示当前路径 pwd # 创建一个多级目录 mkdir -p /data/app/logs # 创建空文件或更新已存在文件的时间戳 touch /tmp/nginx.conf # 复制文件-r 表示递归复制目录 cp -r /etc/nginx /data/nginx_backup # 移动或重命名 mv /tmp/nginx.conf /etc/nginx/nginx.conf # 删除目录及其中所有内容-f 表示不询问 rm -rf /tmp/temp_dir # 按名称查找文件 find /var/log -name *.log -mtime -7这里要特别提醒rm -rf是运维事故高发命令。不要在任何重要目录下不加思考地执行它尤其是以/、/var、/etc开头的路径。可以先ls确认路径再删除。3.2 文本处理命令决定运维效率上限运维工作大量时间花在查看日志、修改配置、统计结果上。grep、awk、sed、cat、tail、head是文本处理的主力。# 查看服务日志最后100行并持续跟踪新日志 tail -100f /var/log/messages # 从日志中找出 ERROR 关键字并显示行号和上下文 grep -n ERROR /var/log/nginx/error.log # 查看文件前20行 head -20 /etc/ssh/sshd_config # 统计一个文件总行数通常配合日志分析 wc -l /var/log/nginx/access.log # 打印 CSV 第1列和第3列逗号分隔 awk -F, {print $1, $3} /data/users.csv # 把文本中所有 “error” 替换为 “warning”-i 表示直接改文件 sed -i s/error/warning/g /tmp/test.txtgrep、awk、sed 这三个工具值得单独花时间学。它们看起来只是三个命令其实是三套小型编程语言。不需要全部精通但至少要会grep 检索关键字。awk 按列处理和统计。sed 批量替换和文本编辑。3.3 用户、权限和进程是系统管理核心多用户是 Linux 与个人操作系统的重要差异。服务器上每个服务、每个运维人员都应该使用独立账号运行而不是全部通过 root 操作。# 创建用户并指定家目录 useradd -m zhangsan # 设置或修改密码 passwd zhangsan # 将用户加入 wheel 组允许 sudo usermod -aG wheel zhangsan # 查看当前用户 whoami # 查看进程 ps -ef # 动态查看进程和资源占用 top # 按端口查询进程 ss -tlnp | grep 8080 # 强制结束进程 kill -9 12345权限方面重点是理解rwx的含义以及chmod、chown的使用。r表示读w表示写x表示执行。数字表示法里r4、w2、x1所以755表示属主可读可写可执行属组和其他人可读可执行。# 给脚本添加执行权限 chmod x /data/deploy.sh # 将目录及内部所有文件的属主改为 nginx chown -R nginx:nginx /usr/share/nginx/html一个很容易犯的权限错误是把网站根目录直接chmod 777虽然解决了访问问题但任何用户都能改文件安全风险很大。更合理的做法是让目录属主为服务运行用户并保持755或750权限。3.4 网络和软件包管理命令要边用边记网络排查中最常用的命令是ping、ip、ss、curl。它们分别解决“通不通”“IP配置如何”“端口有没有监听”“服务返回什么”四类问题。# 测试网络连通性 ping -c 4 192.168.1.1 # 查看网卡和IP ip addr show # 查看接口是否配置了IP ip addr show ens160 # 查看端口监听状态 ss -tlnp # 测试本地HTTP服务响应 curl -I http://localhost:80软件安装方面RHEL 系使用dnfUbuntu 使用apt。# 搜索软件包 dnf search nginx # 安装软件 sudo dnf install -y nginx # 查看已安装软件 dnf list installed | grep nginx # 卸载软件 sudo dnf remove -y nginx学习网络命令时不需要一次学完所有选项只需要掌握一条排查链路先ping测试外网再ip addr看本地 IP再ss -tlnp查服务监听最后curl验证服务响应。4. 系统管理是区分“会用”和“会管”的关键输入命令能干活只能算入门真正到了生产环境难点是系统服务和资源出问题时能不能快速定位。系统管理这个环节要解决的核心问题是懂得服务如何启动、日志如何查看、资源如何监控。4.1 systemd 是服务管理的核心机制现在的 Linux 主流发行版统一使用 systemd 管理服务。不必纠结它的历史只需要掌握一组操作和背后的目录规则。服务和用户进程不同。用户进程关闭终端后就结束了而服务由 systemd 托管开机自启、异常退出重启、日志收集都交给它处理。最常用的服务操作如下# 启动服务 sudo systemctl start nginx # 停止服务 sudo systemctl stop nginx # 重启服务 sudo systemctl restart nginx # 查看服务状态 sudo systemctl status nginx # 设置开机自启 sudo systemctl enable nginx # 禁止开机自启 sudo systemctl disable nginx # 查看所有失败状态的服务 systemctl --failedsystemctl status nginx的输出里重点关注 Active 行。常见状态有两个active (running)表示运行中failed表示服务启动失败。如果服务失败后面往往跟着主要错误日志。systemd 服务配置文件以.service结尾位于/usr/lib/systemd/system/或/etc/systemd/system/。/etc/systemd/system/里的配置优先级更高适合写入自定义服务。4.2 日志是排查问题最重要的证据来源很多新手遇到服务问题第一反应是重装服务这其实会掩盖真正的系统问题。正确路径是先看日志。RHEL 系写日志的组件是rsyslog市场上也有更结构化的journald。在 systemd 系统上查看服务日志最方便的命令是# 查看服务最近50条日志 sudo journalctl -u nginx -n 50 # 持续跟踪服务新日志CtrlC 退出 sudo journalctl -u nginx -f # 查看当天所有服务日志 sudo journalctl --since today传统日志文件位置也值得记住日志文件内容/var/log/messages系统通用日志RHEL系/var/log/secure认证和登录安全日志/var/log/nginx/access.logNginx 访问日志/var/log/nginx/error.logNginx 错误日志/var/log/dnf.log软件包操作日志排查服务失败时按这个顺序查日志先systemctl status 服务名再看journalctl -u 服务名 -n 100最后看服务的独立日志文件。三步下来绝大多数启动失败原因都能定位。4.3 磁盘、内存、CPU 的检查命令要形成肌肉记忆系统资源问题通常不是“突然出现”的而是持续增长的结果。定期查看资源状态能帮助提前发现隐患。# 查看磁盘分区使用率 df -h # 查看目录占用空间 du -sh /var/log/ # 查看内存使用情况 free -h # 查看实时进程资源占用按CPU排序 top -o %CPUdf -h输出里Use%达到 90% 以上要警惕。根分区写满的后果不只是无法创建文件很多服务会直接异常。可以先做大文件清理再做根因排查。# 找出 / 目录下占用空间最大的10个文件 du -xhd1 / 2/dev/null | sort -hr | head -10free -h里关注 available 列而不是只看 used。available 代表操作系统实际可用于新进程的内存比单纯“剩余内存”更准确。4.4 计划任务和压缩备份是运维基本功服务器上很多工作不需要实时执行例如每天凌晨清理日志、每周备份数据库。cron是完成这些定时任务的工具。# 编辑当前用户的 crontab crontab -e # 查看当前用户的计划任务 crontab -l一条计划任务由五个时间字段和一条命令组成分时日月周命令02***/usr/bin/echo cron test*/30****/usr/bin/df -h /tmp/disk.log001**/usr/bin/tar -czf /backup/etc.tar.gz /etc写 cron 命令时推荐使用完整路径。使用which tar查询 tar 的完整路径避免因为 PATH 环境变量不同导致脚本执行失败。备份时最常用的组合是tar加gzip# 压缩备份 /etc 目录 sudo tar -czvf /backup/etc_$(date %F).tar.gz /etc5. 从零部署一个 Nginx 静态网站作为第一个真实项目系统管理掌握以后要进入“部署服务器”这个最终目标。第一个项目不宜贪大Nginx 静态网站足够练手又覆盖了解压、配置、网络、服务管理、防火墙全部步骤。5.1 安装 Nginx 并理解配置结构在 Rocky Linux 9 上安装 Nginxsudo dnf install -y nginx安装完成后不要急着启动。先了解 Nginx 的配置结构这比单纯启动服务重要得多。Nginx 主配置位于/etc/nginx/nginx.conf而站点配置一般放在/etc/nginx/conf.d/目录下以.conf结尾。这种设计把全局配置和站点配置分离便于管理多个服务。查看默认配置结构ls /etc/nginx/ cat /etc/nginx/nginx.conf主配置里嵌套了conf.d目录的加载逻辑。也就是说/etc/nginx/conf.d/下的所有.conf文件都会作为独立的 server 配置被 Nginx 加载。5.2 创建站点目录并写入测试页面静态网站需要一个网站根目录。在/usr/share/nginx/html下创建站点文件是 Nginx 包默认的网站路径。sudo mkdir -p /usr/share/nginx/html创建一个测试页面echo h1Hello Linux DevOps/h1 | sudo tee /usr/share/nginx/html/index.html这里使用tee而不是直接重定向到sudo echo是为了避免权限问题。sudo echo ... file中重定向动作由当前 shell 执行而不是由 sudo 执行所以文件无法写入 root 属主目录tee以 root 权限执行写文件没有这个问题。5.3 配置 server 块并测试配置是否正确自定义一个站点配置命名有业务含义避免使用default.conf覆盖系统默认行为。创建/etc/nginx/conf.d/hello.confserver { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html index.htm; location / { try_files $uri $uri/ 404; } }关键参数解释listen 80监听80端口这是HTTP默认端口。server_name localhost匹配请求中的Host头。root指定站点根目录。index指定默认首页文件。location /匹配所有路径请求。try_files先尝试按请求路径找文件找不到则尝试目录再找不到返回404。配置完成后先测试配置语法再重载服务而不是直接重启。这样可以避免配置错误导致服务短暂中断。# 测试Nginx配置语法 sudo nginx -t # 重载配置平滑生效 sudo systemctl reload nginx5.4 验证部署结果并处理防火墙服务启动后在虚拟机内先验证一次curl -I http://localhost curl http://localhost如果curl http://localhost返回 HTML 内容说明本机访问正常。接着验证外部访问。先看虚拟机 IPip addr show然后在物理电脑浏览器中访问http://虚拟机IP。如果无法访问最常见的原因是防火墙没有放行80端口。RHEL 系默认防火墙是 firewalld先查看当前状态sudo systemctl status firewalld sudo firewall-cmd --state如果防火墙在运行放行80端口sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --reload规则解释--permanent表示永久生效--add-servicehttp是放行HTTP服务对应的80端口--reload使规则重新加载。VMware NAT 模式下只要宿主机能上网虚拟机一般不需要额外端口转发。6. 部署中高频报错的完整排查思路不管用什么系统、什么服务部署流程中最常遇到的错误基本集中在网络、配置、权限三类。总结成一张排查表能省去大量搜索时间。6.1 网络不通先按链路逐层排查网络问题不能靠猜。按下面顺序一步步验证步骤命令预期结果如果失败说明什么1ip addr show网卡有IP虚拟机网卡或DHCP未获取地址2ping 网关IP有回复本机到网关不通3ping 8.8.8.8有回复网关之后的路由或公网不通4ping baidu.com有回复DNS解析不通或未配置5cat /etc/resolv.conf有nameserver缺少DNS配置虚拟机里最典型的网络问题是“宿主机能上网虚拟机无法联网”。大部分原因是虚拟机的网络适配器没有设置为 NAT或者网络服务没有启动。先检查虚拟机设置再在系统里执行systemctl status NetworkManager查看网络管理服务状态。6.2 服务启动失败先看服务状态和日志部署时输入systemctl start nginx结果提示失败或被忽略。处理分四步。第一步查看失败服务状态systemctl status nginx第二步查看服务的系统日志journalctl -u nginx -n 50第三步查看服务自身的错误日志。Nginx 的错误日志通常位于tail -50 /var/log/nginx/error.log第四步排查常见根因现象可能原因检查方式端口被占用80端口已被其他进程占用ss -tlnp | grep :80配置语法错误少了分号或大括号不配对nginx -t目录权限不足网页用户无法读取站点文件ls -la /usr/share/nginx/htmlSELinux 拦截进程无法读取非常规路径内容getenforce查看状态这里特别要提 SELinux。RHEL 系默认开启 SELinux如果网站根目录放在/home或/data下即使权限改成 777Nginx 也可能报 403 或 404。这属于系统安全机制而不是Nginx配置错误。学习阶段为了降低难度可以暂时将网站文件放在 Nginx 默认目录下。6.3 权限问题集中在文件所有者和执行权限“Permission denied”是 Linux 新手最常遇到的报错之一。遇到时不要直接 chmod 777按以下顺序分析。第一步看文件当前权限ls -l 文件名第二步判断当前和文件属主的关系。第三步根据文件类型调整权限。对于配置文件需要读取权限对于可执行程序需要执行权限对于目录需要x权限才能进入。举个常见问题执行脚本报/bin/bash: Permission denied。这通常是脚本文件没有执行权限执行下面命令即可chmod x deploy.sh ./deploy.sh如果文件确实所在用户不是当前用户且不方便切换可以考虑sudo执行sudo ./deploy.sh6.4 命令找不到时要区分“没安装”和“不在PATH”输入nginx返回command not found有两种可能。第一种是软件没装第二种是命令不在当前用户 PATH 中。用whereis nginx或find / -name nginx -type f确认。常见的处理方式# 查看命令路径 whereis nginx # 如果确实被安装在了 /usr/sbin/ 下直接执行完整路径 /usr/sbin/nginx -v普通用户的 PATH 一般包含/usr/local/bin和/usr/binroot 用户的 PATH 会包含/usr/sbin。所以一个常用的排查经验是普通用户执行系统管理命令时提示找不到可以尝试sudo 命令或完整路径。7. 学习路线和工程习惯比收集更多命令更重要命令可以边用边查但学习方法、排查思路和工程习惯需要从第一天就建立。最后这部分给出适合零基础的学习路径以及几个能直接影响面试和工作的实践原则。7.1 按场景划分的 Linux 学习路径建议按以下阶段递进不要跳过基础直接学容器编排和自动化平台。阶段学习目标建议练习第一阶段装好系统熟悉文件结构在一个目录里创建、复制、移动、删除文件第二阶段掌握文件权限和用户管理创建3个用户设置不同权限目录第三阶段掌握服务管理和日志查看安装Nginx反复启动、停止、看日志第四阶段掌握网络和端口排查部署一个网页通过浏览器访问第五阶段掌握脚本化和计划任务写一个备份脚本并用 cron 每天执行第六阶段进入容器和自动化学习 Docker、Ansible把上面步骤用自动化重做一遍这个路径坚持走完已经具备初级运维甚至中级运维的基础能力。后续无论是转向云计算、Kubernetes、DevOps还是继续深耕系统底层都从这个基础出发。7.2 第一次进生产环境前要养成的五个习惯习惯一操作前先确认当前目录和身份。pwd whoami习惯二重要操作先备份。cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date %F)习惯三命令不要盲目加-f。-f通常表示强制可能绕过确认和错误检查。习惯四生产环境先看监控再动服务最后重启。不要一上来就重启服务。习惯五遇到问题先记录现场再操作。运行history或手动记录命令能够帮助事后复盘。这五个习惯看起来简单却是很多线上事故的预防关键。7.3 生产环境部署前建议落到纸面的检查清单开发环境和生产环境的差异通常不在功能代码而在稳定性、权限、日志、回滚和监控。建议每次部署前都过一次下面的清单检查项确认内容硬件资源内存、磁盘、CPU 是否满足服务运行要求系统版本操作系统版本与软件包是否兼容端口规划服务端口是否与防火墙策略一致配置外置服务配置是否包含环境无关的变量日志路径服务日志是否写入固定目录且能正常轮转开机自启服务是否已设置 enable重启后能自动拉起备份方案重要数据目录是否有备份策略回滚方案配置或代码变更后能否快速恢复上一版本权限控制是否使用独立服务账号而非全部 root异常处理服务失败后是否有告警或自动恢复机制从学习环境到生产环境差异不一定在技术难度上而在这些“看起来不起眼”的工程化细节上。把这些清单落实成习惯才算完成了从“装好系统”到“能稳定提供服务的运维工程师”的跨越。
返回列表