Linux 服务器全攻略:从基础到实战的技术指南

在当今云计算与企业 IT 架构中,Linux 服务器凭借其开源、稳定、安全和高性能的特性,占据了绝对主导地位。无论是中小型企业的业务服务器、大型互联网公司的分布式集群,还是云端的容器与虚拟机,Linux 都是首选操作系统。本文将从基础概念出发,深入讲解 Linux 服务器的核心技术、最佳实践、常见工具及实战案例,帮助读者从零开始掌握 Linux 服务器的搭建、管理与优化。

目录#

  1. Linux 服务器基础
    • 1.1 什么是 Linux 服务器?
    • 1.2 主流 Linux 服务器发行版及选型
    • 1.3 Linux 服务器与桌面版的区别
  2. Linux 服务器安装与初始化配置
    • 2.1 系统安装流程(以 Ubuntu Server 为例)
    • 2.2 初始化配置:更新系统与基础工具
    • 2.3 网络配置:静态 IP 与 DNS
    • 2.4 用户与权限管理:禁用 root 直接登录
  3. Linux 服务器核心组件解析
    • 3.1 包管理系统:APT/DNF/YUM 实战
    • 3.2 服务管理:Systemd 与服务生命周期
    • 3.3 文件系统结构:服务器场景下的重点目录
  4. 网络配置与安全加固
    • 4.1 网络基础:IP、子网与路由
    • 4.2 防火墙配置:UFW 与 iptables
    • 4.3 SSH 安全加固:从密码登录到密钥认证
    • 4.4 安全审计:Fail2ban 与 auditd
  5. 服务器日常管理与监控
    • 5.1 远程管理:SSH 进阶与 Mosh
    • 5.2 系统监控:从 top 到 Prometheus
    • 5.3 日志管理:Journalctl 与 Logrotate
    • 5.4 备份策略:Rsync 与增量备份实战
  6. 常见服务器应用部署
    • 6.1 Web 服务器:Nginx 与 Apache 配置
    • 6.2 数据库服务器:MySQL/PostgreSQL 安装与优化
    • 6.3 容器化部署:Docker 基础与实践
  7. 性能优化与调优
    • 7.1 资源监控:识别性能瓶颈
    • 7.2 内核参数调优:sysctl 配置
    • 7.3 磁盘与文件系统优化
  8. 故障排查实战
    • 8.1 服务启动失败:日志与状态诊断
    • 8.2 网络故障:从 Ping 到 Traceroute
    • 8.3 磁盘满了?CPU 跑满?内存泄漏?
  9. 总结
  10. 参考资料

1. Linux 服务器基础#

1.1 什么是 Linux 服务器?#

Linux 服务器是运行 Linux 操作系统、提供特定网络服务(如 Web、数据库、存储、计算)的计算机或虚拟机。与桌面版 Linux 相比,服务器版通常无图形界面(最小化安装),并针对稳定性、安全性和性能进行了优化,支持多用户并发访问和长时间不间断运行(目标是“7x24 小时无故障”)。

1.2 主流 Linux 服务器发行版及选型#

选择合适的发行版是服务器部署的第一步,以下是企业中最常用的几个版本:

发行版特点适用场景包管理器
Ubuntu Server易用性强、社区活跃、更新快中小型企业、开发测试环境APT
CentOS StreamRHEL 上游版本、稳定、企业级支持生产环境、需要长期支持的业务DNF
Debian极致稳定、软件包保守对稳定性要求极高的场景(如数据库)APT
Red Hat Enterprise Linux (RHEL)商业支持、认证丰富、适合企业级金融、政府等对合规性要求高的场景DNF
SUSE Linux Enterprise Server (SLES)欧洲市场流行、系统管理工具完善企业级虚拟化、SAP 环境Zypper

选型建议:

  • 新手入门:优先选择 Ubuntu Server(文档丰富、社区支持好)。
  • 生产环境稳定性优先:Debian 或 CentOS Stream(注意 CentOS Linux 已停止维护,推荐 Stream 或迁移至 Rocky Linux)。
  • 商业支持需求:RHEL 或 SLES(需付费订阅)。

1.3 Linux 服务器与桌面版的区别#

维度Linux 服务器版Linux 桌面版
界面默认无 GUI(可手动安装,但不推荐)预装 GUI(如 GNOME、KDE)
服务与进程预装服务器服务(如 SSH、NFS)预装桌面应用(如浏览器、办公软件)
资源占用最小化设计,内存/CPU 占用低为 GUI 分配更多资源
内核优化针对高并发、长时间运行优化针对桌面交互体验优化
生命周期长期支持(LTS 版本通常 5-10 年)短期更新(如 Ubuntu 桌面版 9 个月)

2. Linux 服务器安装与初始化配置#

2.1 系统安装流程(以 Ubuntu Server 22.04 LTS 为例)#

Ubuntu Server 是新手友好的选择,以下是简化安装步骤:

  1. 下载 ISO:从 Ubuntu 官网 获取 22.04 LTS ISO。
  2. 制作启动盘:使用 dd 命令(Linux/macOS)或 Rufus(Windows)将 ISO 写入 U 盘:
    dd if=ubuntu-22.04-live-server-amd64.iso of=/dev/sdb bs=4M status=progress  # 注意:/dev/sdb 为 U 盘设备名,需替换
  3. 启动安装:服务器从 U 盘启动,选择 "Install Ubuntu Server"。
  4. 基础配置:
    • 语言、键盘布局(默认英文即可,避免中文乱码)。
    • 网络配置:推荐设置静态 IP(生产环境服务器需固定 IP)。
    • 磁盘分区:简单场景可选择 "Use an entire disk"(自动分区);复杂场景需手动配置 LVM 或 RAID。
    • 用户设置:创建管理员用户(如 admin),并勾选 "Install OpenSSH server"(必选,用于远程管理)。
  5. 完成安装:等待安装结束,重启服务器,移除 U 盘。

2.2 初始化配置:更新系统与基础工具#

服务器首次启动后,需执行以下操作:

1. 更新系统#

sudo apt update  # 更新软件包索引
sudo apt upgrade -y  # 更新已安装软件包(-y 自动确认)
sudo apt dist-upgrade -y  # 处理依赖变更(如内核升级)
sudo reboot  # 若内核更新,需重启

2. 安装基础工具#

sudo apt install -y vim htop net-tools curl wget  # 常用工具:编辑器、进程监控、网络工具等

2.3 网络配置:静态 IP 与 DNS#

服务器需固定 IP 以保证服务可访问,以 Ubuntu Server 22.04 为例(使用 netplan 管理网络):

1. 查看网络接口#

ip addr  # 找到网卡名称,如 eth0 或 ens33

2. 编辑 netplan 配置文件#

配置文件路径通常为 /etc/netplan/*.yaml(如 /etc/netplan/00-installer-config.yaml):

network:
  version: 2
  renderer: networkd  # 使用 systemd-networkd 管理网络
  ethernets:
    eth0:  # 替换为实际网卡名称
      dhcp4: no  # 禁用 DHCP
      addresses: [192.168.1.100/24]  # 静态 IP 及子网掩码(/24 即 255.255.255.0)
      gateway4: 192.168.1.1  # 网关 IP
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]  # DNS 服务器(谷歌 DNS + 国内 DNS)

3. 应用配置#

sudo netplan apply  # 应用配置
ip addr show eth0  # 验证 IP 是否生效

2.4 用户与权限管理:禁用 root 直接登录#

默认情况下,Linux 服务器的 root 用户权限过高,直接登录存在安全风险。最佳实践是:创建普通管理员用户,通过 sudo 提权,禁用 root SSH 登录。

1. 创建管理员用户(若安装时未创建)#

sudo adduser admin  # 创建用户 admin
sudo usermod -aG sudo admin  # 将 admin 添加到 sudo 组(获得管理员权限)

2. 禁用 root SSH 登录#

编辑 SSH 配置文件 /etc/ssh/sshd_config:

sudo vim /etc/ssh/sshd_config

修改以下参数:

PermitRootLogin no  # 禁用 root 直接登录
PasswordAuthentication yes  # 暂时允许密码登录(后续将改为密钥登录)

重启 SSH 服务使配置生效:

sudo systemctl restart sshd

3. Linux 服务器核心组件解析#

3.1 包管理系统:APT/DNF/YUM 实战#

包管理系统是 Linux 服务器的“应用商店”,用于安装、更新、卸载软件。不同发行版使用不同工具:

Ubuntu/Debian:APT(Advanced Package Tool)#

  • 常用命令:

    sudo apt update  # 更新软件包索引
    sudo apt install <package>  # 安装软件(如 sudo apt install nginx)
    sudo apt remove <package>  # 卸载软件(保留配置)
    sudo apt purge <package>  # 彻底卸载(删除配置)
    sudo apt upgrade  # 更新已安装软件
    sudo apt autoremove  # 自动删除无用依赖
  • 搜索软件:

    apt search nginx  # 搜索 nginx 相关包

CentOS/RHEL:DNF(Dandified YUM,YUM 的继任者)#

  • 常用命令:
    sudo dnf check-update  # 检查可更新包
    sudo dnf install <package>  # 安装软件
    sudo dnf remove <package>  # 卸载软件
    sudo dnf update  # 更新所有软件
    sudo dnf repolist  # 查看已启用的软件源

3.2 服务管理:Systemd 与服务生命周期#

Systemd 是目前主流 Linux 发行版的 init 系统(进程管理器),用于启动、停止、管理系统服务(如 Nginx、MySQL)。

核心概念:Unit 文件#

服务的配置文件称为 Unit 文件,存放于 /etc/systemd/system/(自定义服务)或 /usr/lib/systemd/system/(系统默认服务)。例如,Nginx 的 Unit 文件路径为 /usr/lib/systemd/system/nginx.service。

常用 systemctl 命令#

命令作用
systemctl start <service>启动服务(如 systemctl start nginx)
systemctl stop <service>停止服务
systemctl restart <service>重启服务(配置变更后需执行)
systemctl enable <service>设置开机自启
systemctl disable <service>禁用开机自启
systemctl status <service>查看服务状态(重点关注 Active: active (running))
systemctl daemon-reload重新加载 Unit 文件(修改配置后执行)

示例:启动 Nginx 并设置开机自启

sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx  # 验证状态

3.3 文件系统结构:服务器场景下的重点目录#

Linux 文件系统采用树形结构,以下是服务器管理中需重点关注的目录:

目录路径作用描述服务器场景重点关注
/etc系统配置文件目录sshd_config(SSH 配置)、nginx/(Nginx 配置)
/var可变数据目录(日志、缓存、数据库)/var/log/(日志文件)、/var/www/(Web 根目录)、/var/lib/mysql/(MySQL 数据)
/usr系统软件安装目录/usr/bin/(可执行程序)、/usr/share/(共享数据)
/home用户家目录普通用户数据,避免存放服务数据(权限问题)
/tmp临时文件目录空间清理(系统会自动删除过期文件)
/mnt//media挂载外部存储(如硬盘、NFS 共享)手动挂载临时存储

最佳实践:服务数据(如日志、数据库)优先存放在 /var 下,避免占用根分区空间。

4. 网络配置与安全加固#

4.1 网络基础:IP、子网与路由#

服务器网络通信依赖 IP 地址、子网掩码和路由:

  • IP 地址:服务器在网络中的唯一标识(如 192.168.1.100)。
  • 子网掩码:划分网络与主机部分(如 /24 表示前 24 位为网络位,后 8 位为主机位)。
  • 网关:连接不同网络的设备(通常是路由器 IP),服务器通过网关访问外部网络。
  • 路由:数据从源 IP 到目标 IP 的路径,可通过 ip route 查看路由表:
    ip route  # 输出示例:default via 192.168.1.1 dev eth0 (默认路由通过 eth0 网卡走网关 192.168.1.1)

4.2 防火墙配置:UFW 与 iptables#

防火墙是服务器安全的第一道防线,用于控制进出网络的流量。Linux 中常用工具包括 UFW(简单) 和 iptables(高级)。

UFW(Uncomplicated Firewall):新手友好#

UFW 是 iptables 的前端工具,简化了防火墙规则配置,默认安装在 Ubuntu 中。

  • 启用 UFW:

    sudo ufw enable  # 启用防火墙(开机自启)
    sudo ufw default deny incoming  # 默认拒绝所有入站流量
    sudo ufw default allow outgoing  # 默认允许所有出站流量
  • 开放常用端口:

    sudo ufw allow 22/tcp  # 允许 SSH(22 端口,TCP 协议)
    sudo ufw allow 80/tcp  # 允许 HTTP(80 端口)
    sudo ufw allow 443/tcp  # 允许 HTTPS(443 端口)
    sudo ufw allow from 192.168.1.0/24 to any port 3306/tcp  # 仅允许 192.168.1.0 网段访问 MySQL(3306 端口)
  • 查看规则与状态:

    sudo ufw status numbered  # 查看已配置规则(带编号,方便删除)
    sudo ufw delete 1  # 删除编号为 1 的规则

iptables:高级防火墙(适用于复杂场景)#

iptables 功能更强大,但语法较复杂。例如,允许 SSH 入站流量:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # 追加规则:允许 TCP 22 端口入站
sudo iptables -A INPUT -j DROP  # 默认拒绝所有入站流量(注意:此规则需放在最后)

注意:iptables 规则默认保存在内存中,重启后丢失。需通过 iptables-save 保存(Ubuntu 需安装 iptables-persistent):

sudo apt install iptables-persistent
sudo netfilter-persistent save  # 保存规则(重启后自动加载)

4.3 SSH 安全加固:从密码登录到密钥认证#

SSH 是远程管理服务器的主要方式,其安全性至关重要。默认的密码登录存在被暴力破解的风险,推荐使用 密钥认证 并禁用密码登录。

步骤 1:生成 SSH 密钥对(客户端操作)#

在本地电脑(如 Windows/macOS/Linux)生成密钥对:

ssh-keygen -t ed25519  # 生成 ed25519 类型密钥(比 RSA 更安全)
# 按提示输入密钥保存路径(默认 ~/.ssh/id_ed25519),建议设置密码(密钥密码,增强安全性)

生成后,公钥路径为 ~/.ssh/id_ed25519.pub,私钥路径为 ~/.ssh/id_ed25519(私钥需妥善保管,不可泄露)。

步骤 2:将公钥上传至服务器#

使用 ssh-copy-id 工具(Windows 需安装 Git Bash 或 WSL):

ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]  # admin 为服务器用户名,192.168.1.100 为服务器 IP

手动上传(若 ssh-copy-id 不可用):
将公钥内容复制到服务器的 ~/.ssh/authorized_keys 文件中:

# 本地查看公钥内容
cat ~/.ssh/id_ed25519.pub
 
# 服务器端操作:创建 .ssh 目录并设置权限
mkdir -p ~/.ssh && chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys  # 粘贴公钥内容,保存退出
chmod 600 ~/.ssh/authorized_keys  # 必须设置为 600(仅所有者可读写)

步骤 3:禁用 SSH 密码登录#

编辑服务器的 /etc/ssh/sshd_config:

sudo vim /etc/ssh/sshd_config

修改以下参数:

PasswordAuthentication no  # 禁用密码登录
ChallengeResponseAuthentication no  # 禁用挑战响应认证
PermitEmptyPasswords no  # 禁止空密码登录

重启 SSH 服务:

sudo systemctl restart sshd

验证:断开当前连接,重新使用 ssh [email protected] 登录,若无需输入密码(或仅需输入密钥密码),则配置成功。

4.4 安全审计:Fail2ban 与 auditd#

Fail2ban:防御 SSH 暴力破解#

Fail2ban 可监控日志(如 /var/log/auth.log),当检测到多次失败的 SSH 登录尝试时,自动通过防火墙封禁攻击者 IP。

  • 安装:

    sudo apt install fail2ban  # Ubuntu/Debian
    sudo dnf install fail2ban  # CentOS/RHEL
  • 配置:
    复制默认配置文件并修改(避免直接修改 /etc/fail2ban/jail.conf,防止更新覆盖):

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    sudo vim /etc/fail2ban/jail.local

    重点配置 SSH 防护([sshd] 段落):

    [sshd]
    enabled = true  # 启用 SSH 防护
    port = ssh  # 端口(默认 22,若修改了 SSH 端口需同步修改)
    filter = sshd  # 使用内置的 sshd 日志过滤规则
    logpath = /var/log/auth.log  # SSH 日志路径(Ubuntu 路径)
    maxretry = 5  # 最大失败尝试次数
    bantime = 3600  # 封禁时间(秒,3600=1 小时)
    findtime = 600  # 检测窗口(秒,600=10 分钟内失败 5 次则封禁)
  • 启动与验证:

    sudo systemctl enable --now fail2ban  # 启动并设置开机自启
    sudo fail2ban-client status sshd  # 查看 SSH 防护状态(包括已封禁 IP)

auditd:系统审计工具#

auditd 用于监控系统调用、文件访问、权限变更等操作,生成审计日志,帮助追踪安全事件。

  • 安装与启动:

    sudo apt install auditd  # Ubuntu/Debian
    sudo systemctl enable --now auditd
  • 添加审计规则:
    例如,监控 /etc/passwd(用户信息文件)的修改:

    sudo auditctl -w /etc/passwd -p w -k passwd-change  # -w 监控路径,-p w 监控写入操作,-k 自定义标签
  • 查看审计日志:

    sudo ausearch -k passwd-change  # 搜索标签为 passwd-change 的日志

5. 服务器日常管理与监控#

5.1 远程管理:SSH 进阶与 Mosh#

SSH 进阶:配置别名与端口转发#

  • 配置 SSH 别名:
    编辑本地 ~/.ssh/config 文件,添加服务器别名,避免每次输入 IP 和用户名:

    Host myserver  # 别名
      HostName 192.168.1.100  # 服务器 IP
      User admin  # 登录用户
      IdentityFile ~/.ssh/id_ed25519  # 私钥路径
      Port 22  # SSH 端口(若修改过需同步)

    之后可直接通过 ssh myserver 登录。

  • 端口转发(跳板机场景):
    通过跳板机访问内网服务器:

    ssh -L 8080:internal-server:80 myserver  # 将本地 8080 端口转发到内网服务器的 80 端口

Mosh:替代 SSH 的移动网络优化工具#

SSH 在网络不稳定(如移动网络)时容易断开连接,Mosh(Mobile Shell)可解决此问题,支持漫游和断续连接。

  • 安装:

    # 服务器端
    sudo apt install mosh
     
    # 客户端(以 macOS 为例,Windows 需通过 WSL 或 Mosh 客户端)
    brew install mosh  # macOS
  • 使用:

    mosh [email protected]  # 用法与 SSH 类似,需开放 UDP 60000-61000 端口(防火墙配置)

5.2 系统监控:从 top 到 Prometheus#

命令行监控工具#

  • htop:top 的增强版,支持鼠标操作、进程排序、资源占用可视化(需安装:sudo apt install htop)。
  • vmstat:监控系统内存、进程、IO 状态:
    vmstat 2 5  # 每 2 秒输出一次,共 5 次
  • iostat:监控磁盘 IO 性能(需安装 sysstat):
    sudo apt install sysstat
    iostat -x 1  # 每秒输出一次磁盘详细 IO 统计

企业级监控:Prometheus + Grafana#

对于多服务器或复杂场景,推荐使用 Prometheus(指标收集)+ Grafana(可视化)搭建监控平台。

  • 核心组件:

    • Prometheus:定时拉取目标服务器的指标数据(通过 Exporter)。
    • Node Exporter:部署在服务器上,暴露硬件和系统指标(CPU、内存、磁盘等)。
    • Grafana:对接 Prometheus,绘制监控面板。
  • 快速部署(Docker 方式):

    # 启动 Node Exporter(服务器端)
    docker run -d --name node-exporter -p 9100:9100 -v /proc:/host/proc:ro -v /sys:/host/sys:ro -v /:/rootfs:ro --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($$|/)"
     
    # 启动 Prometheus(监控服务器)
    docker run -d --name prometheus -p 9090:9090 -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
     
    # 启动 Grafana
    docker run -d --name grafana -p 3000:3000 grafana/grafana
  • 配置 Prometheus 拉取 Node Exporter 数据:
    在 prometheus.yml 中添加:

    scrape_configs:
      - job_name: 'node'
        static_configs:
          - targets: ['192.168.1.100:9100']  # Node Exporter 地址
  • Grafana 可视化:
    访问 http://grafana-ip:3000,添加 Prometheus 数据源,导入 Node Exporter 官方面板(ID:8919),即可查看服务器资源监控图表。

5.3 日志管理:Journalctl 与 Logrotate#

Journalctl:Systemd 日志管理工具#

Systemd 统一管理系统日志,存储在二进制日志文件中(/var/log/journal/),通过 journalctl 命令查看。

  • 常用命令:

    journalctl  # 查看所有日志(按时间倒序)
    journalctl -u nginx  # 查看 Nginx 服务日志
    journalctl --since "1 hour ago"  # 查看 1 小时内的日志
    journalctl -f  # 实时跟踪日志(类似 tail -f)
    journalctl -xe  # 查看最近错误日志(带详细信息)
  • 日志持久化:
    默认情况下,journal 日志可能受大小限制,修改 /etc/systemd/journald.conf 开启持久化:

    Storage=persistent  # 持久化存储到 /var/log/journal/
    SystemMaxUse=5G  # 最大占用空间

Logrotate:日志轮转工具#

日志文件会不断增长,占用磁盘空间,Logrotate 可自动切割、压缩、删除旧日志。

  • 配置文件路径:

    • 全局配置:/etc/logrotate.conf
    • 应用配置:/etc/logrotate.d/(如 /etc/logrotate.d/nginx)
  • 示例:Nginx 日志轮转配置(/etc/logrotate.d/nginx):

    /var/log/nginx/*.log {
        daily  # 每天轮转一次
        missingok  # 日志文件不存在时忽略
        rotate 14  # 保留 14 天的日志
        compress  # 压缩旧日志(.gz)
        delaycompress  # 延迟压缩(下次轮转时压缩前一次的日志)
        notifempty  # 日志为空时不轮转
        create 0640 www-data adm  # 新建日志文件的权限和所有者
        sharedscripts  # 所有日志文件轮转后执行一次脚本
        postrotate
            if [ -f /var/run/nginx.pid ]; then
                kill -USR1 `cat /var/run/nginx.pid`  # 向 Nginx 发送信号,重新打开日志文件
            fi
        endscript
    }

5.4 备份策略:Rsync 与增量备份实战#

数据备份是服务器管理的核心任务,避免数据丢失。推荐 3-2-1 备份策略:3 份数据副本、2 种存储介质、1 份异地备份。

Rsync:文件同步工具#

Rsync 支持增量备份(仅传输变化的文件),效率高,适合本地或远程备份。

  • 本地备份示例:
    将 /var/www(Web 目录)备份到 /backup/www:

    rsync -av --delete /var/www/ /backup/www/  # -a 归档模式(保留权限),-v 详细输出,--delete 删除目标端不存在的文件
  • 远程备份示例(通过 SSH):
    将本地 /data 备份到远程服务器 backup-server 的 /backup/data:

    rsync -av -e ssh /data/ admin@backup-server:/backup/data/
  • 定时备份:
    通过 crontab 设置定时任务(每天凌晨 3 点执行):

    crontab -e  # 编辑当前用户的定时任务
    # 添加以下行
    0 3 * * * rsync -av --delete /var/www/ /backup/www/ >> /var/log/rsync-backup.log 2>&1

增量备份与全量备份结合#

  • 全量备份:每周日执行一次,生成完整备份包。
  • 增量备份:周一至周六执行,仅备份与上次全量/增量备份相比变化的文件。

示例脚本(全量 + 增量备份):

#!/bin/bash
BACKUP_DIR="/backup"
SRC_DIR="/var/www"
DATE=$(date +%Y%m%d)
FULL_BACKUP_DAY="0"  # 周日(0 代表周日,1-6 代表周一至周六)
 
if [ $(date +%w) -eq $FULL_BACKUP_DAY ]; then
    # 全量备份
    tar -zcvf $BACKUP_DIR/full_$DATE.tar.gz $SRC_DIR
else
    # 增量备份(基于上次全量备份)
    LAST_FULL=$(ls -t $BACKUP_DIR/full_*.tar.gz | head -1)
    tar -zcvf $BACKUP_DIR/incremental_$DATE.tar.gz --newer-mtime=$(date -r $LAST_FULL +%Y%m%d) $SRC_DIR
fi

6. 常见服务器应用部署#

6.1 Web 服务器:Nginx 与 Apache 配置#

Web 服务器是最常用的服务器应用,用于托管网站和 API。

Nginx:轻量、高性能的 Web 服务器#

  • 安装:

    sudo apt install nginx
    sudo systemctl enable --now nginx
  • 基础配置(静态网站):
    Nginx 配置文件路径:/etc/nginx/nginx.conf(主配置)、/etc/nginx/sites-available/(站点配置)。
    创建站点配置 /etc/nginx/sites-available/mywebsite:

    server {
        listen 80;
        server_name example.com www.example.com;  # 域名
     
        root /var/www/mywebsite;  # 网站根目录
        index index.html index.htm;  # 默认首页
     
        location / {
            try_files $uri $uri/ =404;  # 尝试访问文件,不存在则返回 404
        }
    }
  • 启用站点:

    sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/  # 创建软链接到 sites-enabled
    sudo nginx -t  # 测试配置是否有误
    sudo systemctl restart nginx
  • 验证:
    访问服务器 IP 或域名,应能看到 /var/www/mywebsite/index.html 的内容。

Apache:老牌、功能丰富的 Web 服务器#

  • 安装:

    sudo apt install apache2
    sudo systemctl enable --now apache2
  • 基础配置:
    Apache 配置文件路径:/etc/apache2/apache2.conf(主配置)、/etc/apache2/sites-available/(站点配置)。
    创建站点配置 /etc/apache2/sites-available/mywebsite.conf:

    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot /var/www/mywebsite
        <Directory /var/www/mywebsite>
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
  • 启用站点与模块:

    sudo a2ensite mywebsite.conf  # 启用站点
    sudo a2enmod rewrite  # 启用 rewrite 模块(URL 重写)
    sudo apache2ctl configtest  # 测试配置
    sudo systemctl restart apache2

6.2 数据库服务器:MySQL/PostgreSQL 安装与优化#

MySQL 8.0 安装与安全配置#

  • 安装:

    sudo apt install mysql-server  # Ubuntu
    sudo systemctl enable --now mysql
  • 安全初始化(必须执行):

    sudo mysql_secure_installation

    按提示设置 root 密码、删除匿名用户、禁用 root 远程登录、删除测试数据库。

  • 创建数据库与用户:

    # 登录 MySQL
    sudo mysql -u root -p
     
    # 创建数据库
    CREATE DATABASE mydb;
     
    # 创建用户并授权(允许本地访问)
    CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
    GRANT ALL PRIVILEGES ON mydb.* TO 'dbuser'@'localhost';
    FLUSH PRIVILEGES;
  • 远程访问配置(如需):
    编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,注释 bind-address = 127.0.0.1,然后授权远程用户:

    CREATE USER 'dbuser'@'%' IDENTIFIED BY 'StrongPassword123!';  # % 表示所有 IP
    GRANT ALL PRIVILEGES ON mydb.* TO 'dbuser'@'%';

PostgreSQL 14 安装与基础使用#

  • 安装:

    sudo apt install postgresql postgresql-contrib  # Ubuntu
    sudo systemctl enable --now postgresql
  • 切换至 postgres 用户(PostgreSQL 默认禁用密码登录,需通过系统用户切换):

    sudo -u postgres psql  # 直接登录 PostgreSQL
  • 创建数据库与用户:

    CREATE DATABASE mydb;
    CREATE USER dbuser WITH ENCRYPTED PASSWORD 'StrongPassword123!';
    GRANT ALL PRIVILEGES ON DATABASE mydb TO dbuser;

6.3 容器化部署:Docker 基础与实践#

Docker 可将应用及其依赖打包为容器,实现环境一致性和快速部署。

  • 安装 Docker(Ubuntu):

    # 安装依赖
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
     
    # 添加 Docker GPG 密钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
     
    # 添加 Docker 源
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
     
    # 安装 Docker
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io
     
    # 允许当前用户管理 Docker(无需 sudo)
    sudo usermod -aG docker $USER

    (需注销并重新登录使权限生效)

  • 常用 Docker 命令:

    docker pull nginx  # 拉取 Nginx 镜像
    docker run -d -p 8080:80 --name mynginx nginx  # 启动 Nginx 容器(映射本地 8080 到容器 80)
    docker ps  # 查看运行中的容器
    docker exec -it mynginx /bin/bash  # 进入容器内部
    docker stop mynginx  # 停止容器
    docker rm mynginx  # 删除容器
  • 部署静态网站到 Docker Nginx:
    将本地网站文件挂载到容器:

    docker run -d -p 80:80 -v /var/www/mywebsite:/usr/share/nginx/html --name mywebsite-nginx nginx

7. 性能优化与调优#

7.1 资源监控:识别性能瓶颈#

性能优化的前提是找到瓶颈,可通过以下工具分析:

  • CPU 瓶颈:htop 查看 CPU 使用率,若 %CPU 长期接近 100%,可能存在 CPU 密集型进程(如未优化的数据库查询)。
  • 内存瓶颈:free -h 查看内存使用,若 available 过低且 swap 频繁使用(si/so 不为 0,通过 vmstat 查看),需增加内存或优化内存占用。
  • 磁盘 IO 瓶颈:iostat -x 1 查看磁盘使用率(%util),若接近 100%,说明磁盘 IO 饱和(如频繁写入日志或数据库)。
  • 网络瓶颈:iftop(需安装)实时监控网络流量,若带宽长期接近上限,需优化传输内容(如压缩、CDN)。

7.2 内核参数调优:sysctl 配置#

内核参数通过 /etc/sysctl.conf 或 /etc/sysctl.d/ 目录配置,优化后需执行 sudo sysctl -p 生效。

常用优化参数(适用于 Web 服务器):#

# 网络优化
net.core.somaxconn = 65535  # 最大监听队列长度(默认 128,高并发场景需调大)
net.ipv4.tcp_max_syn_backlog = 65535  # TCP 半连接队列长度
net.ipv4.tcp_tw_reuse = 1  # 允许重用 TIME_WAIT 状态的端口
net.ipv4.tcp_tw_recycle = 0  # 禁用 TIME_WAIT 快速回收(可能导致 NAT 环境问题)
net.ipv4.tcp_fin_timeout = 30  # TIME_WAIT 超时时间(默认 60s)
 
# 内存优化
vm.swappiness = 10  # 减少 swap 使用(0 表示尽量不使用 swap,10 表示内存使用率达 90% 时使用)
vm.overcommit_memory = 1  # 允许内存过度分配(适合数据库服务器)

7.3 磁盘与文件系统优化#

  • 使用 SSD:相比 HDD,SSD 可大幅提升磁盘 IO 性能(随机读写速度提升 10-100 倍)。

  • TRIM 优化(SSD 专用):

    sudo fstrim -av  # 手动触发 TRIM(回收已删除但未释放的空间)
    sudo systemctl enable --now fstrim.timer  # 启用自动 TRIM(每周执行)
  • RAID 配置:

    • RAID 0:条带化,提升读写速度(无冗余,适合临时数据)。
    • RAID 1:镜像,数据冗余(适合重要数据,如数据库)。
    • RAID 5/6:条带化+校验,兼顾性能与冗余(适合大容量存储)。
      配置工具:mdadm(软件 RAID)或硬件 RAID 控制器。

8. 故障排查实战#

8.1 服务启动失败:日志与状态诊断#

以 Nginx 启动失败为例:

  1. 查看服务状态:

    sudo systemctl status nginx

    输出中会显示失败原因,例如 "Failed to start A high performance web server..." 及具体错误(如配置文件语法错误)。

  2. 查看详细日志:

    sudo journalctl -u nginx --since "5 minutes ago"  # 查看 5 分钟内的 Nginx 日志
    # 或直接查看应用日志
    sudo cat /var/log/nginx/error.log
  3. 常见原因与解决:

    • 配置文件语法错误:sudo nginx -t 检查,修复错误后重启。
    • 端口被占用:sudo lsof -i :80 查看占用端口的进程, kill 或修改端口。

8.2 网络故障:从 Ping 到 Traceroute#

  • 本地网络不通:

    ping 192.168.1.1  #  ping 网关,检查局域网连接
    ip addr  # 确认 IP 地址是否正确获取
    ip route  # 确认默认路由是否存在
  • 远程连接不通:

    ping 8.8.8.8  # ping 公共 DNS,检查外网连通性
    traceroute 8.8.8.8  # 追踪路由,定位网络中断节点
    telnet example.com 80  # 测试目标端口是否开放(如 HTTP 80 端口)
  • 防火墙拦截:

    sudo ufw status  # 确认目标端口是否允许访问

8.3 磁盘满了?CPU 跑满?内存泄漏?#

磁盘空间满了#

  1. 查看磁盘使用情况:

    df -h  # 查看分区使用率,找到满了的分区(如 /dev/sda1 100%)
  2. 定位大文件:

    sudo du -sh /*  # 查看根目录下各目录大小
    sudo du -sh /var/log/*  # 进一步定位(日志文件常占空间)
  3. 解决:删除无用日志(sudo rm /var/log/old.log)、清空大文件(sudo truncate -s 0 /var/log/nginx/access.log)、扩展磁盘分区。

CPU 使用率过高#

  1. 查看占用高的进程:

    top  # 按 P 键按 CPU 使用率排序,找到 %CPU 高的进程(如 PID 1234)
  2. 分析进程行为:

    ps aux | grep 1234  # 查看进程详细命令
    strace -p 1234  # 跟踪进程系统调用(需安装 strace)
  3. 解决:优化进程(如数据库慢查询)、限制进程资源(systemctl set-property <service> CPUQuota=50%)、终止异常进程(sudo kill -9 1234)。

内存泄漏(内存使用率持续增长)#

  1. 监控内存使用趋势:

    free -h  # 多次执行,观察 available 内存是否持续减少
  2. 定位内存泄漏进程:

    htop  # 按 M 键按内存使用率排序,观察哪些进程内存持续增长
  3. 解决:重启进程临时缓解,更新应用版本修复泄漏,或使用内存分析工具(如 Valgrind)定位代码问题。

9. 总结#

Linux 服务器是现代 IT 基础设施的基石,掌握其核心技术需要从基础配置、网络安全、服务管理到性能优化的全链路学习。本文涵盖了从发行版选型、初始化配置、网络安全加固、日常管理监控,到应用部署、性能优化和故障排查的关键知识点,并提供了大量实战案例和最佳实践。

无论是新手入门还是资深管理员,持续学习和实践都是提升 Linux 服务器管理能力的关键。建议结合具体业务场景,深入研究工具原理和系统内核机制,逐步构建稳定、高效、安全的服务器环境。

10. 参考资料#