温馨提示×

LNMP环境下如何部署PHP应用

小樊
36
2025-12-16 01:15:14
栏目: 编程语言

LNMP环境下部署PHP应用的实操指南

一 准备与安装

  • 更新系统并安装组件(以 Ubuntu/Debian 为例):
    • 更新与基础组件:sudo apt-get update && sudo apt-get upgrade
    • 安装 Nginx:sudo apt-get install nginx
    • 安装 MySQL:sudo apt-get install mysql-server,随后执行 sudo mysql_secure_installation 完成安全初始化
    • 安装 PHP 与常用扩展(示例为 PHP 7.4,请按实际替换为你的版本):sudo apt-get install php7.4-fpm php7.4-mysql php-mbstring php-xml php-zip
  • 目录与权限(示例站点根目录 /var/www/your_project/public):
    • 创建目录:sudo mkdir -p /var/www/your_project/public
    • 设置属主:sudo chown -R www-data:www-data /var/www/your_project
  • 说明:在 CentOS 系列上可使用 yum/dnf 安装相同组件(如 nginx、php-fpm、mariadb-server),路径与服务名略有差异,思路一致。

二 上传代码与数据库初始化

  • 上传源码(二选一或结合使用):
    • SCP:scp -r /path/to/your/php/source user@your_server_ip:/var/www/your_project
    • FTP/图形化客户端(如 FileZilla)上传至站点根目录
  • 数据库准备(示例):
    • 登录:mysql -u root -p
    • 建库与授权:
      • CREATE DATABASE your_database;
      • CREATE USER ‘your_user’@‘localhost’ IDENTIFIED BY ‘your_password’;
      • GRANT ALL PRIVILEGES ON your_database.* TO ‘your_user’@‘localhost’;
      • FLUSH PRIVILEGES;
    • 导入结构/数据:mysql -u your_user -p your_database < /path/to/your/sqlfile.sql
  • 安全建议:.env 等敏感配置不要提交到代码仓库,上线前在服务器本地配置,权限设为仅属主可读。

三 Nginx与PHP-FPM配置

  • 站点配置(Ubuntu/Debian 常用 sites-available/sites-enabled 机制):
    • 新建:sudo nano /etc/nginx/sites-available/your_domain
    • 示例配置(按需调整 root、server_name、fastcgi_pass 的 socket 路径与 PHP 版本):
      server {
          listen 80;
          server_name your_domain;
          root /var/www/your_project/public;
          index index.php index.html index.htm;
      
          location / {
              try_files $uri $uri/ /index.php?$query_string;
          }
      
          location ~ \.php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 按实际版本与路径修改
          }
      
          location ~ /\.ht {
              deny all;
          }
      }
      
    • 启用站点:sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
  • PHP-FPM 关键项(以 PHP 7.4 为例):
    • 编辑池配置:sudo nano /etc/php/7.4/fpm/pool.d/www.conf
    • 确认监听:listen = /var/run/php/php7.4-fpm.sock(与 Nginx 配置保持一致)
    • 安全与性能:cgi.fix_pathinfo=0;根据应用需要调 memory_limit、max_execution_time 等
  • 校验与生效:
    • 语法检查:sudo nginx -t
    • 重启服务:sudo systemctl reload nginx && sudo systemctl restart php7.4-fpm
  • CentOS 差异提示:
    • 常用配置路径为 /etc/nginx/conf.d/default.conf
    • PHP-FPM 监听可能为 unix:/run/php-fpm/www.sock 或 127.0.0.1:9000,需与 Nginx 的 fastcgi_pass 一致
    • 示例 location ~ .php$ 需显式设置 SCRIPT_FILENAME $document_root$fastcgi_script_name。

四 多环境与PHP版本切换

  • 多环境部署(开发/测试/生产):
    • 为各环境分别创建站点配置:/etc/nginx/sites-available/dev.conf、test.conf、prod.conf
    • 使用独立目录与域名/端口,便于灰度与回滚
    • 通过 .env 管理环境差异(如 APP_ENV、数据库连接),Nginx 中可用 env 指令引入环境变量(注意作用域)
  • PHP 版本切换(同一服务器多版本共存):
    • 安装多版本与对应 FPM:sudo apt-get install php7.2 php7.4 php7.2-fpm php7.4-fpm
    • 方式一(全局切换):在 Nginx 的 fastcgi_pass 中把 socket 改为目标版本(如 /run/php/php7.2-fpm.sock),然后 sudo nginx -t && sudo systemctl reload nginx
    • 方式二(按站点/按路径分流):为不同 location 指定不同 socket,实现同机多版本并行
    • 验证:部署 phpinfo() 页面查看版本,确认切换生效。

五 验证与常见问题处理

  • 健康检查与日志定位:
    • 访问应用首页与健康检查接口;排查白屏/500 错误时依次检查:
      • Nginx 错误日志:/var/log/nginx/error.log
      • PHP-FPM 日志:/var/log/php7.4-fpm.log(路径随版本/系统而异)
      • MySQL 错误日志:/var/log/mysql/error.log
  • 常见问题速解:
    • 404:确认 root 指向应用入口目录(如 public),以及 try_files 规则是否覆盖前端控制器
    • 502/504:核对 Nginx 与 PHP-FPM 的 socket 路径一致、FPM 进程运行正常、监听权限正确
    • 权限问题:站点目录属主建议 www-data:www-data,文件 644、目录 755 起步,避免过度 777
    • 数据库连接失败:核对 .env 或配置中的 DB_HOST/DB_USER/DB_PASS/DB_NAME,确认数据库与用户权限无误
  • 安全与优化建议:
    • 上线后删除 info.php;为域名配置 HTTPS/Let’s Encrypt 证书;按需开启 Nginx 与 PHP 的压缩、缓存与超时调优。

0