服务器运维实战教程:从零开始一步步学 - 编号55732

@@@@@ 2026-01-21 51

一台新服务器在未做任何安全配置的情况下连上公网,平均不到 10 分钟就会被自动化扫描工具发现并尝试暴力破解 SSH 密码——这不是危言耸听,而是 2023 年 Shodan 爬虫与蜜罐数据的真实统计。从零学习服务器运维,第一课不是装系统,而是学会“防住第一波攻击”。

初始环境搭建:从最小化系统到首次 SSH 加固

以 Ubuntu 22.04 LTS 为例,安装时不要勾选“预装 Docker”或“LAMP 套件”,只保留标准系统工具。完成安装后,你做的第一件事应该是修改 SSH 默认端口(从 22 改为 2222 或更高)、禁用 root 密码登录、创建具有 sudo 权限的普通用户。一个常见场景是:你刚装好系统,想用 scp 传文件,却发现默认端口被扫,日志里全是“Failed password for root”记录。此时应立刻执行 sudo sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config 并重启服务,同时用 ssh-keygen 生成密钥对并上传到服务器,彻底关闭密码认证。

日常监控与故障排查:用实际日志代替“感觉服务器慢”

很多新手运维者遇到网站加载慢,第一反应是重启 Nginx 或者清缓存。但更有效的做法是查看 /var/log/syslogdmesg,定位到底是磁盘 I/O 瓶颈还是内存溢出。举个例子:你发现 PHP-FPM 进程占用 90% CPU,用 top 看到每个子进程都很活跃,但执行 strace -p [PID] 发现大量进程在等待 MySQL 查询返回。这说明瓶颈在数据库层,而非 Web 层。此时优化 SQL 语句或增加查询缓存,比单纯升级云服务器配置更对症。

服务部署与回滚:用 systemd 管理应用而非裸启动

很多人习惯用 nohup python app.py & 跑后台服务,一旦服务器重启或进程意外退出,服务就无声消失。正确的做法是写一个 systemd 服务单元文件,放在 /etc/systemd/system/ 下。例如你部署一个 Node.js 应用,需要确保在崩溃后自动重启:在 [Service] 段添加 Restart=always,并用 WorkingDirectory 指定目录。同时,修改代码后不要直接覆盖原文件,而是用 ln -sf 创建软链接到“当前版本”目录,旧版本保留在 releases/ 文件夹下。这样一旦新版本有问题,只需 unlink current && ln -s releases/v1.2 current 就能在 1 秒内完成回滚。

  • 误区一: 用 root 账户日常操作。一旦误执行 rm -rf / 或中毒,整个系统都会瘫痪。建议始终用普通用户 + sudo,且 sudo 权限只给必要命令。
  • 误区二: 忽略系统更新。apt upgrade 虽然简单,但很多人因为怕重启服务而长期不执行,导致被已知漏洞利用。建议每月固定一天夜间执行无人值守更新。
  • 误区三: 备份只备份数据不备份配置。恢复数据时发现 Nginx 配置、定时任务全部丢失,等于重做。用 etckeeper 自动跟踪 /etc 目录变更,比手动打包更可靠。