温馨提示×

如何在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 信息页)
    • 访问应用首页与接口,确认 路由重写数据库连接 正常

0