简单直接的回答:
在 Debian 上安装 LNMP(Linux + Nginx + MySQL/MariaDB + PHP)并不难。
对于有一定 Linux 基础的用户来说,大概 15-30 分钟就能搞定。对于新手来说,只要跟着教程一步步复制粘贴命令,也是完全可以成功的。
这里有两个层面的“难”:
Debian 的软件包管理(apt)非常成熟。Nginx、MariaDB(MySQL 的分支)、PHP 都有官方或维护得很好的源,不需要像以前那样手动编译源码,直接 apt install 即可。
| 方式 | 难度 | 优点 | 缺点 | 推荐人群 |
|---|---|---|---|---|
| 手动安装 (APT) | ⭐⭐ | 干净、可控、位于系统标准路径、易维护 | 需要手动修改配置文件 | 想学习原理、生产环境部署 |
| 一键脚本 (如 LNMP.org) | ⭐ | 极快、全自动、包含各种优化选项 | 目录结构非标准、黑盒操作、卸载可能麻烦 | 新手、快速搭建测试环境 |
这是最标准的 Debian 安装方式,流程如下(以 Debian 11/12 为例):
1. 更新系统
sudo apt update && sudo apt upgrade -y
2. 安装 Nginx
sudo apt install nginx -y
# 安装完成后访问服务器 IP,看到 Welcome to nginx 即成功
3. 安装数据库 (MariaDB) Debian 默认推荐使用 MariaDB 替代 MySQL,两者用法几乎一样。
sudo apt install mariadb-server -y
# 进行安全配置(设置 root 密码等)
sudo mysql_secure_installation
4. 安装 PHP Debian 默认的 PHP 版本可能较老,建议添加 Sury 源获取新版(如 PHP 8.2)。
# 添加 Sury 源(如果不需要最新版,直接 apt install php-fpm 即可)
sudo apt install apt-transport-https lsb-release ca-certificates curl -y
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
sudo apt update
# 安装 PHP 8.2 及常用扩展(FPM 是连接 Nginx 的关键)
sudo apt install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip -y
5. 配置 Nginx 连接 PHP
这是最关键的一步。编辑你的网站配置文件(例如 /etc/nginx/sites-available/default),在 server 块中加入:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
然后重启服务:
sudo nginx -t
sudo systemctl restart nginx php8.2-fpm
6. 测试
在 /var/www/html 下创建一个 info.php 文件,写入 <?php phpinfo(); ?>,访问 IP/info.php 看是否成功。
如果你觉得上面步骤太麻烦,可以使用 LNMP.org 的脚本。
注意: 这种脚本通常会在 /usr/local 下安装软件,而不是 Debian 的标准路径。
wget http://soft.vpser.net/lnmp/lnmp2.0.tar.gz -cO lnmp2.0.tar.gz && tar zxf lnmp2.0.tar.gz && cd lnmp2.0 && ./install.sh lnmp
然后按照提示选择 MySQL 版本、PHP 版本等,等待 30 分钟左右即可。
ufw allow 'Nginx Full')。php-fpm 服务在运行。nginx -t 测试语法,再 reload。