文章摘要

本文是一份全面的 Linux 系统管理与 Web 服务器环境搭建指南,涵盖从基础到实战的完整知识体系。主要内容包括:

📚 核心章节概览

  1. Linux 入门基础 - 介绍 Linux 内核、主流发行版、系统安装流程及常用命令
  2. 文件系统管理 - 详解文件类型、目录结构、权限控制与文件操作命令
  3. 用户与权限管理 - 用户/组管理、权限控制机制、sudo配置及安全最佳实践
  4. 软件包管理 - 对比主流包管理器(APT/DNF/YUM/Pacman/Zypper),涵盖编译安装与容器化部署
  5. LAMP 环境实战 - 在 Ubuntu 和 CentOS 系统上完整搭建 Apache + MySQL/MariaDB + PHP 环境

🛠️ 实战技能要点

  • 系统管理:掌握进程监控、服务管理、网络配置等核心运维技能
  • 安全配置:学习防火墙配置、用户权限控制、服务安全加固
  • 环境搭建:提供详细的 LAMP 环境安装步骤、配置示例和故障排除方法
  • 性能优化:包含 Apache MPM 调优、MySQL InnoDB 配置、PHP-FPM 进程管理等高级主题
  • 监控维护:介绍系统监控工具、性能测试方法和日志分析技巧

🎯 适用人群

  • Linux 系统管理员和运维工程师
  • Web 开发者和后端工程师
  • 云计算和 DevOps 从业者
  • 计算机专业学生和 Linux 爱好者

📖 学习收获

通过本文,您将能够:

  • 熟练使用 Linux 常用命令和工具
  • 理解 Linux 系统架构和权限模型
  • 掌握主流包管理器的使用方法
  • 独立搭建和优化 LAMP Web 服务器环境
  • 实施系统监控和性能调优策略

本文结合理论讲解与实战示例,提供完整的命令行代码和配置说明,适合作为日常运维参考手册和技能学习指南。


第一章 Linux入门

Linux简介

Linux 是一种开源的类 Unix 操作系统内核,由林纳斯·托瓦兹于 1991 年首次发布。它基于 POSIX 和 Unix 标准,支持多用户、多任务、多线程及多 CPU 架构。

最新版本

  • Linux 内核 6.x 系列:2026年最新稳定版本,支持更多硬件和性能优化
  • 长期支持版本:Linux 6.6 LTS(支持至 2031 年)
  • 开发版本:Linux 6.7-rc 系列

主流发行版

发行版 包管理器 特点 适用场景
Ubuntu/Debian apt/dpkg 用户友好,社区活跃 桌面、服务器、开发
RHEL/CentOS yum/dnf 企业级稳定,长期支持 企业服务器、生产环境
Fedora dnf 技术前沿,更新快速 开发、测试、新技术尝鲜
Arch Linux pacman 滚动更新,高度定制 高级用户、开发者
openSUSE zypper 稳定性好,YaST管理工具 企业、桌面

安装指南

1. 准备安装介质
# 下载ISO镜像
wget https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso

# 创建启动U盘(Linux/macOS)
sudo dd if=ubuntu-24.04-live-server-amd64.iso of=/dev/sdX bs=4M status=progress

# Windows可使用Rufus或Ventoy
2. 安装步骤
  1. 从U盘启动,选择"Install Ubuntu Server"
  2. 选择语言、时区、键盘布局
  3. 配置网络连接
  4. 磁盘分区(建议方案):
    • /boot:1 GB(EFI 系统分区)
    • /:30–50 GB(根分区)
    • /home:剩余空间(用户数据分区)
    • swap:内存大小的 1–2 倍(交换分区)
  5. 创建用户账户,设置密码
  6. 选择安装的软件包(SSH服务器必选)
  7. 等待安装完成,重启系统

系统基础命令

# 系统信息
uname -a                    # 显示系统信息
hostnamectl                 # 显示主机名和系统信息
cat /etc/os-release         # 显示发行版信息
lscpu                       # 显示 CPU 信息
free -h                     # 显示内存使用情况
df -h                       # 显示磁盘使用情况

# 时间和日期
date                        # 显示当前日期时间
timedatectl                 # 时间日期管理
timedatectl set-timezone Asia/Shanghai  # 设置时区为 Asia/Shanghai

# 用户管理
whoami                      # 显示当前用户
id                          # 显示用户 ID 信息
sudo -i                     # 切换到 root 用户
adduser username            # 添加用户
usermod -aG sudo username   # 授予用户 sudo 权限
passwd username             # 修改用户密码

# 进程管理
ps aux                      # 查看所有进程
top / htop                  # 实时进程监控
kill -9 PID                 # 强制终止进程
pkill process_name          # 按进程名称终止进程
systemctl status service    # 查看服务状态

获取帮助

# 命令帮助
man command                 # 查看完整手册
command --help              # 查看简要帮助
info command                # 查看信息文档

# 在线资源
- 官方文档:https://www.kernel.org/doc/
- Arch Wiki:https://wiki.archlinux.org/
- Stack Overflow:https://stackoverflow.com/
- 中文社区:Linux 中国、实验楼

第二章 文件管理

文件类型与目录结构

Linux 文件类型
  • 普通文件 (-):文本文件、二进制文件、数据文件
  • 目录文件 (d):文件夹
  • 链接文件 (l):符号链接
  • 设备文件
    • 字符设备 (c):键盘、终端
    • 块设备 (b):硬盘、U 盘
  • 套接字文件 (s):进程间通信
  • 管道文件 (p):FIFO(命名管道)
标准目录结构
/
├── bin/     # 基本命令(所有用户)
├── boot/    # 启动文件、内核
├── dev/     # 设备文件
├── etc/     # 系统配置文件
├── home/    # 用户主目录
├── lib/     # 共享库
├── media/   # 可移动媒体挂载点
├── mnt/     # 临时挂载点
├── opt/     # 第三方软件
├── proc/    # 进程信息(虚拟文件系统)
├── root/    # root用户主目录
├── run/     # 运行时数据
├── sbin/    # 系统管理命令
├── srv/     # 服务数据
├── sys/     # 系统信息(虚拟文件系统)
├── tmp/     # 临时文件
├── usr/     # 用户程序
└── var/     # 可变数据(日志、缓存)

文件与目录操作

基本操作
# 查看文件
ls -la                      # 详细列表(含隐藏文件)
ls -lh                      # 人类可读大小
tree -L 2                   # 树状显示(2层)

# 创建删除
mkdir -p /path/to/dir       # 创建多级目录
touch file.txt              # 创建空文件
rm -rf directory            # 强制删除目录
rm -i file                  # 交互式删除

# 复制移动
cp -r source dest           # 递归复制目录
mv oldname newname          # 重命名或移动
rsync -av source/ dest/     # 同步文件(保留属性)

# 查看内容
cat file                    # 显示全部内容
less file                   # 分页查看
head -n 20 file             # 前20行
tail -n 50 file             # 后50行
tail -f logfile             # 实时跟踪日志
文件权限管理
# 权限表示
-rwxr-xr--  1 user group  4096 Jan 1 12:00 file
# 类型 所有者权限 组权限 其他用户权限

# 修改权限
chmod 755 script.sh         # 数字模式:rwxr-xr-x
chmod u+x,g-w,o= file       # 符号模式
chmod -R 755 directory      # 递归修改

# 修改所有者
chown user:group file       # 修改所有者和组
chown -R user:group dir     # 递归修改

# 特殊权限
chmod +s file               # 设置SUID/SGID
chmod +t dir                # 设置粘滞位
查找文件
# find命令
find /home -name "*.txt"                    # 按名称查找
find /var/log -type f -size +10M            # 查找大于10M的文件
find . -mtime -7                            # 7天内修改的文件
find /etc -name "*.conf" -exec cp {} /backup/ \;  # 查找并执行命令

# locate命令(需要先更新数据库)
updatedb                                    # 更新数据库
locate nginx.conf                           # 快速查找

# which/whereis
which python3                               # 查找命令路径
whereis python3                             # 查找命令及相关文件
文件属性与时间
# 查看文件属性
stat file.txt                               # 详细属性信息
file unknown.bin                            # 识别文件类型

# 修改时间戳
touch -t 202601011200 file                  # 修改为指定时间
touch -a file                               # 只更新访问时间
touch -m file                               # 只更新修改时间

# 链接文件
ln -s /path/to/original linkname           # 创建软链接
ln original hardlink                        # 创建硬链接

第三章 用户与权限

用户管理

用户配置文件
# 主要配置文件
/etc/passwd     # 用户账户信息
/etc/shadow     # 用户密码(加密)
/etc/group      # 组信息
/etc/gshadow    # 组密码
/etc/sudoers    # sudo 权限配置
用户操作命令
# 添加用户
useradd -m -s /bin/bash -c "Full Name" username
# -m 创建家目录
# -s 指定shell
# -c 注释信息

# 设置密码
passwd username
echo "password" | passwd --stdin username  # 非交互式设置

# 修改用户
usermod -aG wheel,developers username     # 添加到附加组
usermod -s /bin/zsh username               # 修改shell
usermod -L username                        # 锁定账户
usermod -U username                        # 解锁账户

# 删除用户
userdel -r username                        # 删除用户及家目录
用户信息查询
# 查看用户信息
id username                                # 查看用户ID和组信息
who                                        # 查看当前登录用户
w                                          # 查看详细登录信息
last                                       # 查看登录历史
lastlog                                    # 查看最后登录时间

# 切换用户
su - username                              # 完全切换(加载环境)
sudo -u username command                   # 以指定用户执行命令

组管理

## 组操作
groupadd developers                        # 创建组
groupmod -n devs developers                # 重命名组
groupdel devs                              # 删除组

## 组成员管理
gpasswd -a user group                      # 添加用户到组
gpasswd -d user group                      # 从组移除用户
gpasswd -A user group                      # 设置组管理员

# 查看组信息
groups username                            # 用户所属组
getent group groupname                     # 查看组信息

权限控制

基本权限
# 权限位说明
rwx rwx rwx
所有者  组用户  其他用户

# 权限值
r = 4 ()
w = 2 ()
x = 1 (执行)

# 常用权限
755 = rwxr-xr-x    # 可执行文件或目录
644 = rw-r--r--    # 普通文件
600 = rw-------    # 私密文件
700 = rwx------    # 私密目录
特殊权限
# SUID (Set User ID)
chmod u+s /usr/bin/passwd
# 执行时以文件所有者(而非执行者)的权限运行

# SGID (Set Group ID)
chmod g+s /shared/directory
# 新建文件继承目录的所属组

# Sticky Bit (粘滞位)
chmod +t /tmp
# 只有文件所有者(或目录所有者)能删除自己的文件
ACL 权限(访问控制列表)
# 查看ACL
getfacl file.txt

# 设置ACL
setfacl -m u:alice:rwx file.txt           # 为用户设置权限
setfacl -m g:developers:rx directory       # 为组设置权限
setfacl -x u:bob file.txt                  # 删除用户ACL条目

# 默认ACL(继承)
setfacl -d -m u:alice:rwx directory       # 设置默认ACL

sudo 配置

# 编辑sudoers文件(使用visudo)
visudo

# 配置示例
# 允许wheel组使用所有命令
%wheel ALL=(ALL) ALL

# 允许用户执行特定命令无需密码
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

# 允许组执行特定目录下的命令
%developers ALL=(ALL) /usr/local/scripts/*

# 命令别名
Cmnd_Alias SERVICES = /usr/bin/systemctl start *, /usr/bin/systemctl stop *
User_Alias ADMINS = alice, bob
ADMINS ALL=(ALL) SERVICES

安全最佳实践

# 1. 禁用 root SSH 登录
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

# 2. 使用密钥认证
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id user@server

# 3. 设置强密码策略
# 编辑 /etc/pam.d/common-password
# password requisite pam_pwquality.so retry=3 minlen=12 difok=3

# 4. 定期检查异常用户
awk -F: '($3 == 0) {print $1}' /etc/passwd  # 检查UID为0的用户
lastlog | grep -v "Never logged in"          # 检查最近登录

# 5. 监控 sudo 使用
tail -f /var/log/auth.log | grep sudo       # 实时监控sudo操作

第四章 软件包管理

包管理器对比

特性 apt (Debian/Ubuntu) dnf/yum (RHEL/Fedora) pacman (Arch) zypper (openSUSE)
配置文件 /etc/apt/sources.list /etc/yum.repos.d/ /etc/pacman.conf /etc/zypp/repos.d/
本地安装 dpkg -i package.deb rpm -ivh package.rpm pacman -U package.pkg.tar.zst zypper install ./package.rpm
搜索包 apt search keyword dnf search keyword pacman -Ss keyword zypper search keyword
更新源 apt update dnf check-update pacman -Sy zypper refresh
升级系统 apt upgrade dnf upgrade pacman -Syu zypper update
清理缓存 apt autoremove dnf autoremove pacman -Sc zypper clean

APT (Debian/Ubuntu)

# 源管理
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak  # 备份源
sudo nano /etc/apt/sources.list                          # 编辑源

# 常用命令
sudo apt update                                          # 更新包列表
sudo apt upgrade                                         # 升级所有包
sudo apt full-upgrade                                    # 智能升级(可能删除包)
sudo apt install package1 package2                       # 安装包
sudo apt remove package                                  # 删除包(保留配置)
sudo apt purge package                                   # 完全删除包
sudo apt autoremove                                      # 删除不需要的包
sudo apt search keyword                                  # 搜索包
sudo apt show package                                    # 显示包信息
apt list --installed                                     # 列出已安装包
apt list --upgradable                                    # 列出可升级包

# 高级操作
sudo apt install package=version                         # 安装特定版本
sudo apt-get download package                            # 下载deb包不安装
sudo dpkg -i package.deb                                 # 手动安装deb包
sudo apt-get build-dep package                           # 安装编译依赖

DNF/YUM (RHEL/Fedora/CentOS)

# 配置仓库
sudo nano /etc/yum.repos.d/epel.repo                     # 添加EPEL仓库
sudo dnf config-manager --add-repo=https://repo.url     # 添加仓库

# 常用命令
sudo dnf check-update                                    # 检查更新
sudo dnf update                                          # 更新所有包
sudo dnf upgrade                                         # 升级包(同update)
sudo dnf install package1 package2                       # 安装包
sudo dnf remove package                                  # 删除包
sudo dnf autoremove                                      # 删除不需要的依赖
sudo dnf search keyword                                  # 搜索包
sudo dnf info package                                    # 显示包信息
dnf list installed                                       # 列出已安装包
dnf history                                              # 查看操作历史
dnf history undo 10                                      # 撤销第10次操作

# 组操作
sudo dnf group list                                      # 列出软件组
sudo dnf group install "Development Tools"               # 安装软件组
sudo dnf group remove "Virtualization"                   # 删除软件组

编译安装

# 通用编译步骤
# 1. 下载源码
wget https://example.com/software-1.0.tar.gz
tar -xzf software-1.0.tar.gz
cd software-1.0

# 2. 配置
./configure --prefix=/usr/local

# 3. 编译
make -j$(nproc)  # 使用所有CPU核心

# 4. 安装
sudo make install

# 5. 清理
make clean

# 卸载编译安装的软件
sudo make uninstall  # 如果支持
# 或手动删除
sudo rm -rf /usr/local/bin/software
sudo rm -rf /usr/local/lib/software

容器化部署

# Docker安装
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo systemctl enable --now docker

# Podman安装(无守护进程)
sudo dnf install podman  # RHEL/Fedora
sudo apt install podman  # Ubuntu/Debian

# 使用容器
docker run -d -p 80:80 --name nginx nginx:alpine
podman run -d -p 80:80 --name nginx nginx:alpine


## 第五章 实战案例:搭建 LAMP 环境

LAMP(Linux + Apache + MySQL/MariaDB + PHP)是经典的 Web 服务器环境组合。本章将演示如何在 Ubuntu(使用 apt)和 CentOS(使用 dnf)上搭建完整的 LAMP 环境,并配置防火墙、测试页面和服务管理。

### 1. 在 Ubuntu/Debian 上安装 LAMP

#### 1.1 更新系统并安装 Apache
```bash
# 更新包列表
sudo apt update

# 安装 Apache2
sudo apt install -y apache2

# 启动 Apache 并设置开机自启
sudo systemctl start apache2
sudo systemctl enable apache2

# 验证 Apache 是否运行
sudo systemctl status apache2
1.2 安装 MySQL
# 安装 MySQL 服务器
sudo apt install -y mysql-server

# 启动 MySQL 并设置开机自启
sudo systemctl start mysql
sudo systemctl enable mysql

# 运行安全配置脚本(设置 root 密码、移除匿名用户等)
sudo mysql_secure_installation
1.3 安装 PHP 及扩展
# 安装 PHP 及常用扩展
sudo apt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip

# 重启 Apache 使 PHP 模块生效
sudo systemctl restart apache2

# 验证 PHP 版本
php -v
1.4 配置防火墙(UFW)
# 启用 UFW(若尚未启用)
sudo ufw enable

# 允许 SSH(避免锁定自身访问)
sudo ufw allow ssh

# 允许 HTTP(80)和 HTTPS(443)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 查看规则
sudo ufw status verbose

2. 在 CentOS/RHEL 上安装 LAMP

2.1 更新系统并安装 Apache
# 更新系统
sudo dnf update -y

# 安装 Apache(在 CentOS/RHEL 8+ 中叫 httpd)
sudo dnf install -y httpd

# 启动 Apache 并设置开机自启
sudo systemctl start httpd
sudo systemctl enable httpd

# 验证 Apache 是否运行
sudo systemctl status httpd
2.2 安装 MariaDB(MySQL 替代)
# 安装 MariaDB 服务器
sudo dnf install -y mariadb-server

# 启动 MariaDB 并设置开机自启
sudo systemctl start mariadb
sudo systemctl enable mariadb

# 运行安全配置脚本
sudo mysql_secure_installation
2.3 安装 PHP 及扩展
# 启用 EPEL 和 Remi 仓库(提供较新 PHP 版本)
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm

# 启用 Remi PHP 8.3 模块(可根据需要选择版本)
sudo dnf module enable php:remi-8.3 -y

# 安装 PHP 及常用扩展
sudo dnf install -y php php-mysqlnd php-cli php-common php-gd php-mbstring php-xml php-curl php-zip

# 重启 Apache 使 PHP 模块生效
sudo systemctl restart httpd

# 验证 PHP 版本
php -v
2.4 配置防火墙(firewalld)
# 启用 firewalld(如果未启用)
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 允许 HTTP(80)和 HTTPS(443)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 重新加载防火墙规则
sudo firewall-cmd --reload

# 查看已开放的服务
sudo firewall-cmd --list-all

3. 编写 PHP 测试页面

3.1 创建测试页面

在 Ubuntu/Debian 上,Apache 的默认网站根目录是 /var/www/html/;在 CentOS/RHEL 上,默认是 /var/www/html/

# 创建 PHP 信息测试页面
sudo tee /var/www/html/info.php << 'EOF'
<?php
phpinfo();
?>
EOF
3.2 创建数据库连接测试页面
sudo tee /var/www/html/dbtest.php << 'EOF'
<?php
$host = 'localhost';
$user = 'root';
$password = 'your_password_here'; // 请替换为实际密码
$database = 'test_db';

// 创建连接
$conn = new mysqli($host, $user, $password);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
echo "MySQL 连接成功!<br>";

// 创建测试数据库
$sql = "CREATE DATABASE IF NOT EXISTS $database";
if ($conn->query($sql) === TRUE) {
    echo "数据库 '$database' 创建成功或已存在<br>";
} else {
    echo "创建数据库失败: " . $conn->error . "<br>";
}

// 关闭连接
$conn->close();
?>
EOF

4. 服务管理与开机自启

4.1 使用 systemctl 管理服务
# 查看服务状态
sudo systemctl status apache2   # Ubuntu/Debian
sudo systemctl status httpd     # CentOS/RHEL
sudo systemctl status mysql     # Ubuntu/Debian
sudo systemctl status mariadb   # CentOS/RHEL

# 启动服务
sudo systemctl start apache2
sudo systemctl start mysql

# 停止服务
sudo systemctl stop apache2
sudo systemctl stop mysql

# 重启服务
sudo systemctl restart apache2
sudo systemctl restart mysql

# 重新加载配置(不中断服务)
sudo systemctl reload apache2

# 查看服务是否启用开机自启
sudo systemctl is-enabled apache2
sudo systemctl is-enabled mysql
4.2 设置开机自启
# 启用开机自启
sudo systemctl enable apache2
sudo systemctl enable mysql

# 禁用开机自启
sudo systemctl disable apache2
sudo systemctl disable mysql

# 同时启动并启用(常用组合)
sudo systemctl enable --now apache2
sudo systemctl enable --now mysql
4.3 查看服务日志
# 查看 Apache 日志
sudo journalctl -u apache2 -f   # Ubuntu/Debian
sudo journalctl -u httpd -f     # CentOS/RHEL

# 查看 MySQL/MariaDB 日志
sudo journalctl -u mysql -f     # Ubuntu/Debian
sudo journalctl -u mariadb -f   # CentOS/RHEL

# 查看特定时间段的日志
sudo journalctl -u apache2 --since "2026-01-01 00:00:00" --until "2026-01-01 23:59:59"

5. 验证 LAMP 环境

5.1 测试 Apache

打开浏览器访问:

  • http://服务器IP地址/ - 应显示 Apache 默认页面
  • http://服务器IP地址/info.php - 应显示 PHP 信息页面
5.2 测试 MySQL/MariaDB 连接
# 登录 MySQL/MariaDB
sudo mysql -u root -p

# 在 MySQL 命令行中执行
CREATE DATABASE webapp;
USE webapp;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
INSERT INTO users (name) VALUES ('测试用户');
SELECT * FROM users;
EXIT;
5.3 测试 PHP 连接数据库

访问 http://服务器IP地址/dbtest.php,应显示"MySQL 连接成功!"和数据库创建信息。

6. 安全配置建议

6.1 Apache 安全配置
# 禁用目录浏览(Ubuntu/Debian)
sudo sed -i 's/Options Indexes FollowSymLinks/Options -Indexes +FollowSymLinks/' /etc/apache2/apache2.conf

# 隐藏 Apache 版本信息
echo "ServerTokens Prod" | sudo tee -a /etc/apache2/conf-available/security.conf
echo "ServerSignature Off" | sudo tee -a /etc/apache2/conf-available/security.conf

# 重新加载 Apache
sudo systemctl reload apache2
6.2 MySQL/MariaDB 安全配置
# 创建专用数据库用户(避免使用 root)
sudo mysql -u root -p
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON webapp.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
6.3 PHP 安全配置
# 编辑 PHP 配置文件
sudo nano /etc/php/8.3/apache2/php.ini  # Ubuntu/Debian
sudo nano /etc/php.ini                   # CentOS/RHEL

# 建议修改的配置
# 关闭错误显示(生产环境)
display_errors = Off
# 开启错误日志
log_errors = On
error_log = /var/log/php_errors.log
# 限制文件上传大小
upload_max_filesize = 10M
post_max_size = 12M
# 禁用危险函数
disable_functions = exec,passthru,shell_exec,system,proc_open,popen

7. 故障排除

7.1 常见问题及解决
# 1. Apache 无法启动
sudo apache2ctl configtest  # Ubuntu/Debian 检查配置
sudo apachectl configtest    # CentOS/RHEL 检查配置

# 2. PHP 页面显示源码而不是执行
# 确保已安装 libapache2-mod-php(Ubuntu)或 php(CentOS)并重启 Apache

# 3. MySQL 连接被拒绝
# 检查 MySQL 是否运行:sudo systemctl status mysql
# 检查防火墙是否阻止 3306 端口

# 4. 权限问题(无法写入文件)
sudo chown -R www-data:www-data /var/www/html/  # Ubuntu/Debian
sudo chown -R apache:apache /var/www/html/      # CentOS/RHEL
sudo chmod -R 755 /var/www/html/
7.2 查看错误日志
# Apache 错误日志
sudo tail -f /var/log/apache2/error.log      # Ubuntu/Debian
sudo tail -f /var/log/httpd/error_log        # CentOS/RHEL

# PHP 错误日志
sudo tail -f /var/log/php_errors.log

# MySQL 错误日志
sudo tail -f /var/log/mysql/error.log        # Ubuntu/Debian
sudo tail -f /var/log/mariadb/mariadb.log    # CentOS/RHEL

8. 一键安装脚本示例

8.1 Ubuntu/Debian 一键安装脚本
#!/bin/bash
# Ubuntu/Debian LAMP 一键安装脚本
set -e

echo "正在更新系统..."
sudo apt update -y

echo "安装 Apache..."
sudo apt install -y apache2
sudo systemctl enable --now apache2

echo "安装 MySQL..."
sudo apt install -y mysql-server
sudo systemctl enable --now mysql

echo "运行 MySQL 安全配置..."
sudo mysql_secure_installation <<EOF
y
your_password_here
your_password_here
y
y
y
y
EOF

echo "安装 PHP..."
sudo apt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip
sudo systemctl restart apache2

echo "配置防火墙..."
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable

echo "创建测试页面..."
sudo tee /var/www/html/info.php << 'EOF'
<?php phpinfo(); ?>
EOF

echo "LAMP 安装完成!请访问 http://$(hostname -I | awk '{print $1}')/info.php"
8.2 CentOS/RHEL 一键安装脚本

8. 性能调优与监控

搭建好 LAMP 环境后,性能调优和监控是确保服务稳定高效运行的关键。本节将介绍 Apache、MySQL/MariaDB、PHP-FPM 的调优配置,以及基础系统监控方法。

8.1 Apache MPM 模式选择与参数调优

Apache 支持多种多处理模块(MPM),选择合适的模式对性能影响显著:

# 查看当前启用的 MPM 模式(Ubuntu/Debian)
sudo apache2ctl -V | grep MPM

# 查看当前启用的 MPM 模式(CentOS/RHEL)
httpd -V | grep MPM

# 切换 MPM 模式(Ubuntu/Debian)
sudo a2enmod mpm_event    # 启用 event 模式
sudo a2dismod mpm_prefork # 禁用 prefork 模式
sudo systemctl restart apache2

# 切换 MPM 模式(CentOS/RHEL)
# 编辑 /etc/httpd/conf.modules.d/00-mpm.conf,取消注释相应模块
sudo systemctl restart httpd

MPM 模式选择建议:

  • prefork:兼容性最好,每个请求一个进程,适合需要稳定性的场景
  • worker:混合多进程多线程,内存占用较少
  • event:基于 worker 改进,支持异步处理,性能最佳(Apache 2.4+)

关键调优参数(编辑 /etc/apache2/apache2.conf/etc/httpd/conf/httpd.conf):

# prefork MPM 配置示例
<IfModule mpm_prefork_module>
    StartServers             5
    MinSpareServers          5
    MaxSpareServers         10
    MaxRequestWorkers      150
    MaxConnectionsPerChild   0
</IfModule>

# event MPM 配置示例
<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>

# 连接保持配置
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
8.2 MySQL/MariaDB InnoDB 缓冲池配置

InnoDB 缓冲池是 MySQL 性能的关键,应设置为可用内存的 70-80%:

# 查看当前 InnoDB 配置
sudo mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool%';"

# 查看当前缓冲池大小
sudo mysql -u root -p -e "SELECT @@innodb_buffer_pool_size/1024/1024/1024 AS 'Buffer Pool Size (GB)';"

配置优化(编辑 /etc/mysql/my.cnf/etc/my.cnf):

[mysqld]
# InnoDB 缓冲池大小(根据内存调整,如 8GB 内存可设为 6GB)
innodb_buffer_pool_size = 6G

# 缓冲池实例数(建议每 1GB 缓冲池配 1 个实例)
innodb_buffer_pool_instances = 6

# 日志文件大小(建议 256M-2G)
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M

# 其他重要参数
innodb_flush_log_at_trx_commit = 2  # 平衡性能与持久性
innodb_flush_method = O_DIRECT      # 直接 I/O,减少双缓冲
innodb_file_per_table = ON          # 每个表独立表空间
innodb_read_io_threads = 8          # 读线程数
innodb_write_io_threads = 8         # 写线程数

# 查询缓存(MySQL 8.0 已移除,MariaDB 可配置)
# query_cache_type = 1
# query_cache_size = 64M

应用配置后重启服务:

# Ubuntu/Debian
sudo systemctl restart mysql

# CentOS/RHEL
sudo systemctl restart mariadb
8.3 PHP-FPM 进程管理配置

如果使用 PHP-FPM(替代 mod_php),进程管理对性能至关重要:

# 安装 PHP-FPM(Ubuntu/Debian)
sudo apt install -y php-fpm

# 安装 PHP-FPM(CentOS/RHEL)
sudo dnf install -y php-fpm

# 启用 PHP-FPM 模块(Apache)
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm  # Ubuntu/Debian
sudo systemctl restart apache2

PHP-FPM 池配置(/etc/php/8.3/fpm/pool.d/www.conf/etc/php-fpm.d/www.conf):

[www]
user = www-data
group = www-data

; 进程管理方式
pm = dynamic                    ; dynamic, static, ondemand

; dynamic 模式下的参数
pm.max_children = 50           ; 最大子进程数
pm.start_servers = 5           ; 启动时子进程数
pm.min_spare_servers = 5       ; 最小空闲进程数
pm.max_spare_servers = 10      ; 最大空闲进程数
pm.max_requests = 500          ; 每个进程处理请求数后重启

; 进程限制
rlimit_files = 65535           ; 文件描述符限制
rlimit_core = unlimited        ; 核心文件大小

; 性能调优
pm.process_idle_timeout = 10s  ; 空闲进程超时时间
request_terminate_timeout = 30s ; 请求超时时间
request_slowlog_timeout = 5s   ; 慢请求日志阈值

; 状态页(用于监控)
pm.status_path = /status
ping.path = /ping

重启 PHP-FPM 使配置生效:

sudo systemctl restart php8.3-fpm  # Ubuntu/Debian
sudo systemctl restart php-fpm      # CentOS/RHEL
8.4 基础系统监控命令

使用系统工具实时监控 LAMP 环境性能:

# 1. 实时系统监控
top                          # 经典系统监控工具
htop                         # 增强版 top(需安装)
glances                      # 综合监控工具(需安装)

# 安装 htop 和 glances
sudo apt install -y htop glances   # Ubuntu/Debian
sudo dnf install -y htop glances   # CentOS/RHEL

# 2. 网络连接监控
netstat -tulpn               # 查看所有监听端口和进程
ss -tulpn                    # 更快的 netstat 替代品
netstat -an | grep :80       # 查看 80 端口连接

# 3. Apache 连接状态
# Ubuntu/Debian
sudo apache2ctl status
# CentOS/RHEL
sudo systemctl status httpd

# 启用状态模块(如果需要)
sudo a2enmod status          # Ubuntu/Debian
# 在配置中添加:<Location /server-status> SetHandler server-status </Location>

# 4. MySQL/MariaDB 监控
sudo mysqladmin -u root -p status          # 数据库状态
sudo mysql -u root -p -e "SHOW PROCESSLIST;"  # 查看当前连接
sudo mysql -u root -p -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';"  # 连接数

# 5. 实时日志监控(多终端查看)
# 在一个终端查看 Apache 访问日志
sudo tail -f /var/log/apache2/access.log   # Ubuntu/Debian
sudo tail -f /var/log/httpd/access_log     # CentOS/RHEL

# 在另一个终端查看错误日志
sudo tail -f /var/log/apache2/error.log    # Ubuntu/Debian
sudo tail -f /var/log/httpd/error_log      # CentOS/RHEL

# 在第三个终端查看 MySQL 慢查询日志
sudo tail -f /var/log/mysql/slow.log       # Ubuntu/Debian
sudo tail -f /var/log/mariadb/slow.log     # CentOS/RHEL

# 6. 磁盘 I/O 监控
iostat -x 2 5               # 每2秒刷新,显示5次
iotop                       # 类似 top 的 I/O 监控(需安装)

# 7. 内存使用监控
free -h                     # 内存使用情况
vmstat 2 10                 # 每2秒刷新,显示10次

# 8. 自定义监控脚本示例
#!/bin/bash
# monitor_lamp.sh - LAMP 环境监控脚本
echo "=== LAMP 环境监控 ==="
echo "时间: $(date)"
echo "--- 系统负载 ---"
uptime
echo "--- 内存使用 ---"
free -h
echo "--- Apache 连接数 ---"
netstat -an | grep :80 | wc -l
echo "--- MySQL 连接数 ---"
mysql -u root -p密码 -e "SHOW GLOBAL STATUS LIKE 'Threads_connected';" 2>/dev/null || echo "MySQL 未运行"
echo "--- 磁盘使用 ---"
df -h / /var/www
8.5 性能测试工具
# 安装性能测试工具
sudo apt install -y apache2-utils siege   # Ubuntu/Debian
sudo dnf install -y httpd-tools siege     # CentOS/RHEL

# 1. Apache Benchmark (ab) 测试
ab -n 1000 -c 100 http://localhost/       # 1000请求,100并发
ab -n 5000 -c 50 http://localhost/info.php

# 2. Siege 压力测试
siege -c 100 -t 1M http://localhost/      # 100并发,测试1分钟
siege -c 50 -t 30S http://localhost/info.php

# 3. MySQL 性能测试
mysqlslap --user=root --password --concurrency=50 --iterations=10 \
  --query="SELECT * FROM webapp.users" --create-schema=webapp

# 4. 网络性能测试
ping -c 10 localhost
traceroute google.com
mtr google.com                            # 结合 ping 和 traceroute
8.6 监控建议与告警设置
  1. 设置监控阈值:

    • CPU 使用率持续 >80%
    • 内存使用率 >85%
    • 磁盘使用率 >90%
    • Apache 等待连接数 >100
    • MySQL 连接数 > max_connections 的 80%
  2. 配置日志轮转:

# 编辑日志轮转配置
sudo nano /etc/logrotate.d/apache2    # Ubuntu/Debian
sudo nano /etc/logrotate.d/httpd      # CentOS/RHEL

# 示例配置
/var/log/apache2/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null
    endscript
}
  1. 使用专业监控工具:
    • Prometheus + Grafana:企业级监控方案
    • Zabbix:传统监控系统
    • Netdata:实时性能监控
    • ELK Stack:日志收集与分析

通过合理的性能调优和持续监控,可以确保 LAMP 环境在高负载下依然稳定高效运行。建议在生产环境中定期检查性能指标,根据实际负载调整配置参数。

#!/bin/bash
# CentOS/RHEL LAMP 一键安装脚本
set -e

echo "正在更新系统..."
sudo dnf update -y

echo "安装 Apache (httpd)..."
sudo dnf install -y httpd
sudo systemctl enable --now httpd

echo "安装 MariaDB..."
sudo dnf install -y mariadb-server
sudo systemctl enable --now mariadb

echo "运行 MariaDB 安全配置..."
sudo mysql_secure_installation <<EOF
y
your_password_here
your_password_here
y
y
y
y
y
EOF

echo "安装 PHP..."
sudo dnf install -y epel-release
sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm
sudo dnf module enable php:remi-8.3 -y
sudo dnf install -y php php-mysqlnd php-cli php-common php-gd php-mbstring php-xml php-curl php-zip
sudo systemctl restart httpd

echo "配置防火墙..."
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

echo "创建测试页面..."
sudo tee /var/www/html/info.php << 'EOF'
<?php phpinfo(); ?>
EOF

echo "LAMP 安装完成!请访问 http://$(hostname -I | awk '{print $1}')/info.php"

通过本章的学习,您已经掌握了在 Ubuntu 和 CentOS 系统上搭建完整 LAMP 环境的方法,包括软件安装、防火墙配置、服务管理和安全优化。这些技能是 Linux 系统管理员和 Web 开发者的必备基础。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐