在 Debian 12 上部署 LNMP 的实操步骤
以下流程覆盖 Nginx + MariaDB/MySQL + PHP-FPM 的安装、整合与基础安全配置,适用于 Debian 12(bookworm),其他版本可类推。
一 准备与安装基础组件
- 更新系统并安装常用工具
- sudo apt update && sudo apt full-upgrade -y
- sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release vim
- 安装 Nginx(两种常用方式,二选一)
- 方式A 使用 Debian 官方仓库
- sudo apt install -y nginx
- 方式B 使用 Nginx 官方仓库(获取更新版本或 mainline)
- curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-keys.gpg
- echo “deb [signed-by=/usr/share/keyrings/nginx-keys.gpg] https://nginx.org/packages/mainline/debian/ $(lsb_release -cs) nginx” | sudo tee /etc/apt/sources.list.d/nginx.list >/dev/null
- sudo apt update && sudo apt install -y nginx
- 启动并开机自启
- sudo systemctl start nginx && sudo systemctl enable nginx
- 防火墙放行(如启用 UFW)
- sudo ufw allow ‘Nginx Full’
- 验证
- curl -I http://127.0.0.1 应返回 200/301 等成功状态码
二 安装数据库 MariaDB 或 MySQL
- 方案A MariaDB(Debian 默认)
- sudo apt install -y mariadb-server mariadb-client
- sudo systemctl start mariadb && sudo systemctl enable mariadb
- 安全初始化
- sudo mysql_secure_installation
- 方案B MySQL(官方 APT 仓库)
- 下载并安装 MySQL APT 配置包(示例为 0.8.26-1,版本号可更新)
- wget https://dev.mysql.com/get/mysql-apt-config_0.8.26-1_all.deb
- sudo dpkg -i mysql-apt-config_*.deb
- 在交互界面选择 MySQL 8.0(或所需版本),完成后
- sudo apt update
- 安装服务器
- sudo apt install -y mysql-server
- sudo systemctl start mysql && sudo systemctl enable mysql
- 安全初始化
- sudo mysql_secure_installation
- 验证
- sudo systemctl status mariadb 或 sudo systemctl status mysql
- mysql -u root -p 可登录即正常
三 安装与配置 PHP 与 PHP-FPM
- 查看可用版本并安装(以 Debian 12 常见为 PHP 8.2)
- apt-cache policy php
- sudo apt install -y php php-cli php-fpm php-mysql php-gd php-curl php-mbstring php-xml php-zip php-opcache php-intl
- 启动并开机自启 PHP-FPM
- sudo systemctl start php8.2-fpm && sudo systemctl enable php8.2-fpm
- 确认监听方式(默认使用 Unix Socket)
- ls /run/php/ 应看到 php8.2-fpm.sock
- 常用扩展按需增删(示例)
- sudo apt install -y php-imagick php-soap php-ldap php-bcmath
四 整合 Nginx 与 PHP-FPM
- 编辑站点配置(示例:/etc/nginx/sites-available/default 或新建站点)
- sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com
- sudo nano /etc/nginx/sites-available/example.com
- 示例配置片段(按需修改 root、server_name、日志与路径)
- server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
location ~ /.ht {
deny all;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
- 启用站点并测试配置
- sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
- sudo rm -f /etc/nginx/sites-enabled/default # 如使用自定义站点
- sudo nginx -t && sudo systemctl reload nginx
- 创建测试文件
- echo “” | sudo tee /var/www/example.com/public/info.php
- 浏览器访问:http://example.com/info.php 应显示 PHP 信息页(上线前请删除该文件)
- 权限建议
- sudo chown -R www-data:www-data /var/www/example.com
- sudo find /var/www/example.com -type d -exec chmod 755 {} ;
- sudo find /var/www/example.com -type f -exec chmod 644 {} ;
五 安全与运维要点
- 基础安全
- 删除或禁用 info.php;限制目录执行权限;隐藏版本信息(在 http 块设置:server_tokens off;)
- 仅开放必要端口(如 80/443);数据库禁止 root 远程登录;定期备份
- 启用 HTTPS(Certbot + Nginx)
- sudo apt install -y certbot python3-certbot-nginx
- sudo certbot --nginx -d example.com -d www.example.com
- 自动续期建议加入系统定时任务(certbot 默认已添加 renew 定时器)
- 常用维护
- 配置语法检查:sudo nginx -t
- 热重载:sudo systemctl reload nginx
- PHP-FPM 重载:sudo systemctl reload php8.2-fpm
- 日志查看:/var/log/nginx/*.log 与 /var/log/php8.2-fpm.log