如何在Linux LNMP上部署应用
小樊
47
2026-01-11 19:23:44
在 Linux LNMP 上部署应用的实操指南
一 准备与规划
- 选择发行版与版本:常见为 Ubuntu/Debian/CentOS,保持 Nginx、PHP、数据库版本与应用兼容。
- 规划目录与域名:应用代码建议放在 /var/www/your-app;准备解析到服务器的 域名 或直接使用 服务器IP。
- 开通网络与端口:放行 80/443;云服务器需在安全组放行对应端口。
- 基础优化与安全:更新系统、创建非 root 部署用户、禁用不必要服务、开启防火墙。
二 安装与配置 LNMP 基础环境
- Ubuntu/Debian
- 更新与基础:sudo apt update && sudo apt upgrade -y
- Nginx:sudo apt install nginx -y;sudo systemctl start nginx && sudo systemctl enable nginx
- MySQL:sudo apt install mysql-server -y;sudo systemctl start mysqld && sudo systemctl enable mysqld;执行 sudo mysql_secure_installation
- PHP:sudo apt install php php-fpm php-mysql -y;sudo systemctl start phpX.Y-fpm && sudo systemctl enable phpX.Y-fpm
- CentOS(以 7 为例)
- 更新与 EPEL:sudo yum update -y;sudo yum install epel-release -y
- Nginx:sudo yum install nginx -y;sudo systemctl start nginx && sudo systemctl enable nginx
- MariaDB:sudo yum install mariadb-server -y;sudo systemctl start mariadb && sudo systemctl enable mariadb;执行 sudo mysql_secure_installation
- PHP:sudo yum install php php-fpm php-mysqlnd -y;sudo systemctl start php-fpm && sudo systemctl enable php-fpm
- 防火墙放行
- Ubuntu/Debian:sudo ufw allow ‘Nginx Full’
- CentOS:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
三 部署 PHP 应用的标准流程
- 准备代码与目录
- 示例:sudo mkdir -p /var/www/your-app/public
- 将代码放入 /var/www/your-app/public;设置属主属组(如 www-data 或 nginx),保证 Nginx/PHP-FPM 可读可执行
- 配置 Nginx 虚拟主机
- Ubuntu/Debian 常用:/etc/nginx/sites-available/your-app 与 /etc/nginx/sites-enabled/your-app
- CentOS 常用:/etc/nginx/conf.d/your-app.conf
- 示例要点:
- root 指向应用的 public 目录;index 含 index.php
- 路由规则 try_files $uri $uri/ /index.php?$query_string;
- PHP 处理:fastcgi_pass 指向 127.0.0.1:9000 或 /var/run/php/phpX.Y-fpm.sock
- 安全:location ~ /.ht { deny all; }
- 配置 PHP-FPM
- 建议运行 与 Nginx 同用户组 的 FPM 池;确认 listen 与 Nginx 一致
- 生产建议:cgi.fix_pathinfo=0;设置合适的 pm.max_children / pm.start_servers 等
- 创建数据库与用户(示例)
- CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘appuser’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
- GRANT ALL PRIVILEGES ON appdb.* TO ‘appuser’@‘localhost’;
- FLUSH PRIVILEGES;
- 校验与上线
- 语法检查:sudo nginx -t;sudo php-fpmX.Y -t
- 重启服务:sudo systemctl reload nginx;sudo systemctl reload phpX.Y-fpm
- 访问应用安装向导或首页,确认数据库连接与路由正常
四 多环境与 HTTPS 配置
- 多环境部署
- 为 dev/test/prod 分别建立虚拟主机(如 /etc/nginx/sites-available/dev.conf、test.conf、prod.conf)
- 使用符号链接启用站点;不同环境使用独立 root、日志、环境变量与数据库
- 通过 .env 管理配置(APP_ENV、DB_HOST、DB_DATABASE、DB_USERNAME、DB_PASSWORD 等),应用内读取
- 启用 HTTPS(Let’s Encrypt)
- 安装 Certbot 并按指引为域名申请证书
- 在对应 server 块添加监听 443 ssl,配置证书与私钥路径,开启 HTTP→HTTPS 跳转
- 定期自动续期(如 certbot renew --dry-run 验证)
五 常见问题排查与优化
- 服务无法启动
- Nginx:sudo nginx -t;查看 /var/log/nginx/error.log
- PHP-FPM:sudo php-fpmX.Y -t;查看 /var/log/php-fpm/error.log
- 访问异常
- 确认防火墙/安全组放行 80/443;域名解析正确;Nginx root 与 index 配置无误
- 静态资源 404 或权限问题
- 检查 root 路径、文件权限与 SELinux/AppArmor 策略(如 setenforce 0 临时排查)
- 性能与安全
- Nginx:worker_processes auto;worker_connections 适当增大;开启 gzip
- PHP:启用 OPcache;关闭 display_errors;设置 open_basedir(可选)
- 数据库:合理设置 innodb_buffer_pool_size、连接数;定期备份
- 快速验证清单
- 访问 http://IP/info.php(应显示 PHP 信息页)
- 访问应用首页与接口,确认 路由重写 与 数据库连接 正常