LNMP / LAMP 环境搭建全流程

从零在你的服务器上手动搭建 Nginx 或 Apache + MySQL + PHP 运行环境,并验证 PHP 解析正常。

LNMP 和 LAMP 是运行 PHP 网站(WordPress、Discuz、Laravel 等)最经典的两套后端组合。理解每个字母的含义,再动手装一遍,你就能掌控自己的建站环境。

各字母是什么

  • L = Linux:操作系统,本文以 Ubuntu/Debian 为主。
  • N = Nginx 或 A = Apache:Web 服务器,负责接收 HTTP 请求。Nginx 处理静态文件和高并发更省资源;Apache 配置灵活、.htaccess 生态成熟。
  • M = MySQL(或兼容的 MariaDB):数据库。
  • P = PHP:动态脚本语言。在 Nginx 下需搭配 PHP-FPM(独立进程池);在 Apache 下常用 libapache2-mod-php 内嵌模块。

两者只是 Web 服务器不同,选一套即可,别同时占用 80 端口。

准备工作

先更新软件源:

sudo apt update && sudo apt upgrade -y

方案一:LNMP(Nginx + PHP-FPM)

sudo apt install -y nginx mysql-server php-fpm php-mysql

安装后 Nginx 已监听 80 端口。编辑站点配置 /etc/nginx/sites-available/default,在 server 块内加入 PHP 解析(注意 PHP 版本号,如 8.3):

index index.php index.html;

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

测试并重载:

sudo nginx -t && sudo systemctl reload nginx

方案二:LAMP(Apache + mod-php)

sudo apt install -y apache2 mysql-server php libapache2-mod-php php-mysql
sudo systemctl restart apache2

Apache 默认已加载 PHP 模块,无需额外配置即可解析 .php。

初始化数据库

运行安全脚本设置 root 密码、移除匿名账户:

sudo mysql_secure_installation

为应用单独建库建用户,不要直接用 root:

CREATE DATABASE myapp CHARACTER SET utf8mb4;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL ON myapp.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;

验证 PHP 解析

在网站根目录(Nginx 默认 /var/www/html)创建测试文件:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

浏览器访问 http://你的服务器IP/info.php。看到 PHP 信息表格即成功;若浏览器下载了文件或显示源码,说明 PHP 未正确解析——检查 FPM socket 路径、PHP 版本号或服务是否运行。验证完立刻删除,以免泄露环境信息:

sudo rm /var/www/html/info.php

CentOS / Rocky 差异

包管理器用 dnf,Nginx 的 PHP socket 通常是 /run/php-fpm/www.sock,防火墙需放行:

sudo dnf install -y nginx mysql-server php-fpm php-mysqlnd
sudo firewall-cmd --add-service=http --permanent && sudo firewall-cmd --reload

手动搭建 vs 一键包 / 宝塔

  • 一键包 / 宝塔面板:图形界面、几分钟出环境,适合新手和快速上线;代价是组件版本被面板锁定、装了额外后台服务、排障时黑盒较多。
  • 手动 apt 安装:每个组件版本、路径、参数都由你掌控,依赖最少、更贴近生产,也更利于理解原理;代价是要自己写配置。

学习和小型项目推荐手动装一遍;追求省事可用面板,但建议先懂手动流程,出问题才知道去哪查。

小结

选 Nginx 还是 Apache 只影响 Web 服务器那一层,MySQL 和 PHP 通用。核心步骤:装包 → 配 Web 服务器解析 PHP → 初始化数据库 → 用 phpinfo() 验证并及时删除。掌握手动流程后,面板对你只是效率工具而非黑盒。