LNMP 环境搭建:不可或缺的前期准备详解
LNMP(Linux + Nginx + MySQL/MariaDB + PHP)是构建高性能、高并发网站和Web应用最流行的基础架构栈之一。无论是个人博客、企业官网还是复杂的电商平台,一个稳定可靠的LNMP环境都是成功的基石。
很多初学者在搭建LNMP环境时,常常会直接跳到安装步骤,而忽略了至关重要的前期准备。这往往导致安装过程中出现各种难以预料的错误,或者搭建的环境存在安全隐患、性能瓶颈。俗话说,“磨刀不误砍柴工”。充分、细致的前期准备不仅能确保安装过程一帆风顺,更能为后续的长期稳定运行打下坚实基础。
本文将深入探讨在安装LNMP之前必须完成的各项准备工作,包括系统选择、环境检查、依赖管理、用户权限规划以及安全基础配置。我们将遵循最佳实践,并提供详细的示例,帮助您从零开始,稳健地迈出LNMP搭建的第一步。
目录#
系统环境评估与选择#
Linux 发行版选型#
选择合适的Linux发行版是第一步。常见的服务器发行版有:
- CentOS/Rocky Linux/AlmaLinux: 以稳定性和长周期支持著称,非常适合生产环境。使用
yum或dnf作为包管理器。 - 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/
- Nginx:
- 网站根目录:
/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,而是通过 semanage、chcon 等命令为 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 的编译安装做好了充分准备:
- 有一个干净、更新的 Linux 系统。
- 安装了完整的编译工具链和必要的开发库。
- 创建了安全的非特权用户来运行服务。
- 规划了清晰、合理的目录结构并设置了正确的权限。
- 配置了防火墙,开放了必要的端口。
- 对 SELinux 有了基本认识并做了相应设置。
- 下载了完整、可靠的软件源码包。
现在,您可以充满信心地开始进行 Nginx、MySQL 和 PHP 的具体编译和安装工作了。前期的细致准备将让后续的安装步骤变得清晰且高效,最大程度地减少中途遇到的障碍。