在 Ubuntu 上使用 LNMP 运行 PHP 项目的实操指南
一 环境准备与组件安装
- 更新索引并安装组件(以 Ubuntu 20.04/22.04/24.04 为例,PHP 版本以仓库可用为准,常见为 PHP 8.1/8.2/8.3):
- 安装 Nginx、MySQL、PHP-FPM 与常用扩展:
- sudo apt update
- sudo apt install -y nginx mysql-server php-fpm php-mysql
- 启动并设为开机自启:
- sudo systemctl enable --now nginx mysql php-fpm
- 运行 MySQL 安全初始化:
- sudo mysql_secure_installation
- 如需指定或安装更高版本 PHP(示例为 PHP 8.1):
- sudo add-apt-repository ppa:ondrej/php
- sudo apt update
- sudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-{mbstring,xml,zip,gd,curl,intl,opcache}
二 配置 Nginx 与 PHP-FPM
- 创建项目站点配置(示例域名或 IP 为 your_domain_or_ip,项目路径为 /var/www/your_project/public):
- 调整 PHP-FPM 运行用户与权限(确保与 Nginx 一致,通常为 www-data):
- 编辑:/etc/php/8.1/fpm/pool.d/www.conf
- listen.owner = www-data
- listen.group = www-data
- listen.mode = 0660
- 重启 PHP-FPM:
- sudo systemctl restart php8.1-fpm
- 目录与权限:
- sudo chown -R www-data:www-data /var/www/your_project
- sudo find /var/www/your_project -type f -exec chmod 644 {} ;
- sudo find /var/www/your_project -type d -exec chmod 755 {} ;
三 数据库与项目部署
- 创建数据库与用户(在 MySQL 中执行):
- CREATE DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘your_user’@‘localhost’ IDENTIFIED BY ‘StrongPassword!’;
- GRANT ALL PRIVILEGES ON your_database.* TO ‘your_user’@‘localhost’;
- FLUSH PRIVILEGES;
- EXIT;
- 导入数据(如有):
- mysql -u your_user -p your_database < your_database_dump.sql
- 部署代码与配置应用:
- 将项目代码上传至 /var/www/your_project(框架如 Laravel 应将入口置于 public/,并设置 .env 数据库连接)
- 如框架需写入目录,确保相应目录对 www-data 可写(例如 storage、cache)
四 测试与常见问题排查
- 基础连通性测试:
- 在 /var/www/html/info.php 写入:
- 访问 http://your_domain_or_ip/info.php,确认 PHP 解析正常
- 常见问题速查:
- 502 Bad Gateway:多为 PHP-FPM 未运行或 fastcgi_pass 路径不匹配;执行 systemctl status php8.1-fpm 查看,核对 socket 路径(/var/run/php/php8.1-fpm.sock 或 /run/php/php8.1-fpm.sock)
- 403 Forbidden:目录无索引文件或权限不足;检查 root 路径、index 指令与目录权限
- 404 Not Found(路由不生效):确保 Nginx 配置包含 try_files $uri $uri/ /index.php?$query_string;
- 日志定位:
- Nginx:/var/log/nginx/error.log
- PHP-FPM:/var/log/php8.1-fpm.log(或 /var/log/php-fpm.log,视版本与系统而定)
五 安全与优化建议
- 启用 HTTPS(Let’s Encrypt):
- sudo apt install -y certbot python3-certbot-nginx
- sudo certbot --nginx -d your_domain
- 防火墙放行:
- sudo ufw allow ‘Nginx Full’
- sudo ufw enable
- PHP 与性能:
- 在 php.ini 中设置:
- date.timezone = Asia/Shanghai
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- 按需安装扩展:php-mbstring、php-xml、php-zip、php-gd、php-curl、php-intl 等
- 安全加固:
- 删除或限制 info.php 在生产环境访问
- 使用强数据库与系统用户密码,限制数据库远程访问
- 定期更新系统与软件包:sudo apt update && sudo apt upgrade