LNMP 环境搭建:不可或缺的前期准备详解

LNMP(Linux + Nginx + MySQL/MariaDB + PHP)是构建高性能、高并发网站和Web应用最流行的基础架构栈之一。无论是个人博客、企业官网还是复杂的电商平台,一个稳定可靠的LNMP环境都是成功的基石。

很多初学者在搭建LNMP环境时,常常会直接跳到安装步骤,而忽略了至关重要的前期准备。这往往导致安装过程中出现各种难以预料的错误,或者搭建的环境存在安全隐患、性能瓶颈。俗话说,“磨刀不误砍柴工”。充分、细致的前期准备不仅能确保安装过程一帆风顺,更能为后续的长期稳定运行打下坚实基础。

本文将深入探讨在安装LNMP之前必须完成的各项准备工作,包括系统选择、环境检查、依赖管理、用户权限规划以及安全基础配置。我们将遵循最佳实践,并提供详细的示例,帮助您从零开始,稳健地迈出LNMP搭建的第一步。

目录#

  1. 系统环境评估与选择
    1. Linux 发行版选型
    2. 系统架构确认
    3. 网络连接检查
  2. 系统更新与基础工具安装
    1. 更新系统源与软件包
    2. 安装必备工具集
  3. 创建专用的系统用户和用户组
    1. 为何要使用非 root 用户?
    2. 创建 www 用户组和用户
  4. 规划安装目录与权限
    1. 目录结构规划
    2. 权限设置原则
  5. 防火墙与安全增强 SELinux 配置
    1. 配置防火墙(Firewalld/iptables)
    2. 理解并配置 SELinux
  6. 获取并校验软件源码包
    1. 从官方源下载
    2. 使用校验和验证完整性
  7. 总结
  8. 参考资料

系统环境评估与选择#

Linux 发行版选型#

选择合适的Linux发行版是第一步。常见的服务器发行版有:

  • CentOS/Rocky Linux/AlmaLinux: 以稳定性和长周期支持著称,非常适合生产环境。使用 yumdnf 作为包管理器。
  • Ubuntu Server/Debian: 拥有庞大的社区和丰富的软件包,更新较快。使用 apt 作为包管理器。

最佳实践建议

  • 生产环境: 优先选择 CentOS 的替代品(如 Rocky Linux)或 Ubuntu LTS(长期支持)版本,以获得更长的安全更新支持。
  • 学习测试环境: 可以选择您更熟悉的任何发行版。

本文将以 CentOS 8 / Rocky Linux 8 为例进行演示,但其原则适用于所有发行版。

系统架构确认#

确认您的服务器硬件架构(通常是 x86_64),以确保下载正确的软件包。

# 查看系统架构
uname -m
 
# 示例输出:
# x86_64

网络连接检查#

确保服务器可以正常访问互联网,以下载必要的软件包和源码。

# 测试网络连通性
ping -c 4 google.com
 
# 检查域名解析是否正常
nslookup github.com

系统更新与基础工具安装#

在安装任何软件之前,先将系统更新到最新状态,并安装编译和运维所需的工具。

更新系统源与软件包#

# 对于 CentOS/Rocky Linux/RHEL
sudo dnf update -y
 
# 对于 Ubuntu/Debian
sudo apt update && sudo apt upgrade -y

安装必备工具集#

这些工具在编译安装软件和管理系统时至关重要。

# 对于 CentOS/Rocky Linux/RHEL
sudo dnf groupinstall "Development Tools" -y
sudo dnf install -y epel-release
sudo dnf install -y wget curl vim git tree lsof net-tools \
    openssl-devel pcre-devel zlib-devel libxml2-devel \
    libjpeg-devel libpng-devel freetype-devel
 
# 对于 Ubuntu/Debian
sudo apt install -y build-essential
sudo apt install -y wget curl vim git tree lsof net-tools \
    libssl-dev libpcre3-dev zlib1g-dev libxml2-dev \
    libjpeg-dev libpng-dev libfreetype6-dev

工具说明

  • Development Tools / build-essential: 包含 GCC, G++, Make 等编译工具链。
  • wget / curl: 命令行下载工具。
  • vim: 强大的文本编辑器。
  • git: 版本控制工具,用于克隆源码。
  • tree: 以树状图列出目录结构。
  • lsof, net-tools: 网络和进程诊断工具。
  • 各类 *-devel*-dev 包: 是编译 Nginx、PHP 等软件时必须的依赖库。

创建专用的系统用户和用户组#

为何要使用非 root 用户?#

使用 root 权限运行 Web 服务(如 Nginx、PHP-FPM)是极其危险的。一旦服务出现漏洞,攻击者将直接获得服务器的最高控制权。因此,我们需要为这些服务创建专用的、权限受限的系统用户。

创建 www 用户组和用户#

通常,我们会创建一个名为 www 的用户组和一个同名的用户,并禁止其登录 shell。

# 创建 www 用户组
sudo groupadd www
 
# 创建 www 用户,并加入到 www 用户组,同时设置不可登录
sudo useradd -g www -s /sbin/nologin -M www
 
# 验证用户创建
id www
# 示例输出:uid=1001(www) gid=1001(www) groups=1001(www)

参数解释

  • -g www: 指定主用户组为 www
  • -s /sbin/nologin: 指定登录 shell 为 /sbin/nologin,禁止该用户通过 SSH 等方式登录系统,增强安全。
  • -M: 不创建用户的家目录。

规划安装目录与权限#

清晰的目录结构有助于日后的维护和管理。

目录结构规划#

常见实践(源码编译安装):

  • 源码目录/usr/local/src/ - 存放下载的软件源码包。
  • 安装目录/usr/local/software_name/ - 将软件安装到此目录。例如:
    • Nginx: /usr/local/nginx/
    • MySQL: /usr/local/mysql/
    • PHP: /usr/local/php/
  • 网站根目录/data/www/ - 存放网站程序文件(如 WordPress)。
  • 日志目录/data/logs/ - 集中存放 Nginx、PHP 等服务的日志。

创建目录

# 创建存放网站和日志的目录
sudo mkdir -p /data/{www,logs}
 
# 将 /data/www 目录的所有者改为 www 用户和用户组
sudo chown -R www:www /data/www
 
# 为日志目录设置适当的权限(允许 nginx 和 php-fpm 进程写入)
sudo chown -R www:www /data/logs

权限设置原则#

  • 网站根目录(/data/www): 所有者应为 www:www,权限通常设置为 755(所有者可读写执行,组用户和其他用户只读执行)或 755。具体取决于你的应用程序是否需要写入权限。
  • 日志目录(/data/logs): 所有者应为 www:www,权限设置为 755,确保服务进程可以创建和写入日志文件。

防火墙与安全增强 SELinux 配置#

在安装服务前,先规划好防火墙策略,避免服务安装后无法访问。

配置防火墙(Firewalld/iptables)#

如果使用 Firewalld(CentOS/Rocky Linux 8+ 默认)

# 永久开放 HTTP(80) 和 HTTPS(443) 端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
 
# 如果需要 MySQL 远程访问(生产环境慎用),开放 3306 端口
# sudo firewall-cmd --permanent --add-port=3306/tcp
 
# 重新加载防火墙配置使其生效
sudo firewall-cmd --reload
 
# 查看当前开放的规则
sudo firewall-cmd --list-all

如果使用 UFW(Ubuntu 常用)

sudo ufw allow ssh    # 务必先开放 SSH 端口,防止被锁在外面
sudo ufw allow 'Nginx Full' # 开放 HTTP 和 HTTPS,或者使用 sudo ufw allow 80,443/tcp
sudo ufw enable       # 启用 UFW

理解并配置 SELinux#

SELinux 是 Linux 的一个强大安全模块,但配置不当会阻止服务正常运行。对于初学者,在测试环境可以先将其设置为宽容模式以排除问题,但在生产环境中应学习正确配置。

# 查看当前 SELinux 状态
getenforce # 输出可能为 Enforcing, Permissive 或 Disabled
 
# 临时设置为宽容模式(重启后失效)
sudo setenforce 0
 
# 永久修改(需要重启)
# 将 /etc/selinux/config 文件中的 SELINUX=enforcing 改为 SELINUX=permissive
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

最佳实践: 生产环境中,不应直接禁用 SELinux,而是通过 semanagechcon 等命令为 Web 目录和服务设置正确的安全上下文。

获取并校验软件源码包#

从官方渠道下载软件,并校验其完整性,防止被篡改。

从官方源下载#

确定您需要安装的软件版本,并前往官方网站下载。

# 进入源码存放目录
cd /usr/local/src/
 
# 使用 wget 下载(请替换为最新的稳定版链接)
sudo wget https://nginx.org/download/nginx-1.24.0.tar.gz
sudo wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
sudo wget https://www.php.net/distributions/php-8.2.7.tar.gz

使用校验和验证完整性#

官方通常提供校验和(如 SHA256、MD5)。

# 以 Nginx 为例,首先下载对应的校验文件
sudo wget https://nginx.org/download/nginx-1.24.0.tar.gz.sha256
 
# 然后进行校验
sha256sum nginx-1.24.0.tar.gz
cat nginx-1.24.0.tar.gz.sha256
 
# 对比两个命令输出的哈希值,如果完全一致,则文件完好无损。

总结#

完成以上所有步骤后,您的服务器已经为 LNMP 的编译安装做好了充分准备:

  1. 有一个干净、更新的 Linux 系统。
  2. 安装了完整的编译工具链和必要的开发库。
  3. 创建了安全的非特权用户来运行服务。
  4. 规划了清晰、合理的目录结构并设置了正确的权限。
  5. 配置了防火墙,开放了必要的端口。
  6. 对 SELinux 有了基本认识并做了相应设置。
  7. 下载了完整、可靠的软件源码包。

现在,您可以充满信心地开始进行 Nginx、MySQL 和 PHP 的具体编译和安装工作了。前期的细致准备将让后续的安装步骤变得清晰且高效,最大程度地减少中途遇到的障碍。

参考资料#

  1. Nginx 官方文档
  2. PHP 官方文档
  3. MySQL 8.0 官方文档
  4. CentOS / Rocky Linux 官方文档
  5. Firewalld 官方文档
  6. SELinux Project Wiki