温馨提示×

PHP与Ubuntu如何完美搭配

小樊
42
2025-11-14 21:57:29
栏目: 编程语言

在 Ubuntu 上搭建高性能且易维护的 PHP 运行环境,推荐采用 LAMP 或 LNMP 架构,并按生产标准进行版本选择、进程管理、性能与安全加固。以下给出一套可复用的实操方案。


一 环境选型与版本建议

  • 选择 Ubuntu LTS(如:20.04、22.04、24.04),获得更长期的安全更新与生态兼容。
  • PHP 版本优先选择 8.1/8.2/8.3 的稳定小版本;若需最新特性或扩展支持,可使用 Ondřej Surý 的 PPA 安装指定版本。
  • 架构选择:
    • Apache + mod_php(简单上手、传统项目友好)
    • Nginx + PHP-FPM(高并发、资源利用更优,生产更推荐)
  • 数据库建议 MySQL 8.0MariaDB 10.6+,与 PHP 通过 php-mysql 驱动连接。

二 快速安装与集成

  • 系统准备

    • 更新索引与系统:sudo apt update && sudo apt upgrade -y
    • 安装常用工具:sudo apt install -y software-properties-common
    • 如需新版 PHP,添加 PPA:sudo add-apt-repository ppa:ondrej/php -y && sudo apt update
  • 方案 A:LAMP(Apache + mod_php,快速上手)

    • 安装组件:sudo apt install -y apache2 mysql-server php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml
    • 启动服务:sudo systemctl enable --now apache2 mysql
    • 目录与权限:sudo chown -R www-data:www-data /var/www/html && sudo chmod -R 755 /var/www/html
    • 验证:在 /var/www/html/info.php 写入 <?php phpinfo(); ?>,访问 http://服务器IP/info.php
  • 方案 B:LNMP(Nginx + PHP-FPM,生产推荐)

    • 安装组件:sudo apt install -y nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml
    • 启动服务:sudo systemctl enable --now nginx php-fpm mysql
    • Nginx 关键配置片段:
      location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/run/php/php8.3-fpm.sock;  # 版本号与安装的 PHP-FPM 一致
      }
      
    • 检查并重载:sudo nginx -t && sudo systemctl reload nginx
  • 方案 C:Apache + PHP-FPM(兼顾易用与性能)

    • 安装组件:sudo apt install -y apache2 libapache2-mod-fcgid php8.3 php8.3-fpm php8.3-mysql ...
    • 启用模块:sudo a2enmod proxy proxy_fcgi rewrite
    • 虚拟主机示例(将 PHP 交给 PHP-FPM 处理):
      <VirtualHost *:80>
          DocumentRoot /var/www/your-app
          <Directory /var/www/your-app>
              AllowOverride All
              Require all granted
          </Directory>
          <FilesMatch \.php$>
              SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
          </FilesMatch>
      </VirtualHost>
      
    • 启用站点并重启:sudo a2ensite your-app.conf && sudo systemctl reload apache2

三 数据库与项目部署

  • 数据库初始化
    • 安全加固:sudo mysql_secure_installation(设置 root 密码、移除匿名用户等)
    • 创建项目库与用户:
      sudo mysql -u root -p
      CREATE DATABASE your_project_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'StrongPass!';
      GRANT ALL PRIVILEGES ON your_project_db.* TO 'your_user'@'localhost';
      FLUSH PRIVILEGES;
      EXIT;
      
  • 代码部署
    • 上传代码至 /var/www/html/your-app 或自定义目录
    • 权限设置:sudo chown -R www-data:www-data /var/www/html/your-app && sudo chmod -R 755 /var/www/html/your-app
    • 配置应用数据库连接信息(如 .envconfig.php
  • 访问与日志
    • 访问 http://域名或IP 验证
    • 日志定位:
      • Apache:/var/log/apache2/error.log
      • Nginx:/var/log/nginx/error.log
      • PHP-FPM:查看 /etc/php/8.3/fpm/pool.d/www.conferror_log 指定路径

四 性能与安全最佳实践

  • 性能优化
    • 启用 OPcache(生产强烈建议):sudo phpenmod opcache && sudo systemctl reload apache2|nginx
    • 使用 PHP-FPM 并合理设置进程模型(pm.max_childrenpm.start_serverspm.min/max_spare_servers
    • 静态资源由 Web 服务器直接处理,动态请求反向代理到 PHP-FPM
  • 安全加固
    • 全站 HTTPS(如 Let’s Encrypt)
    • 禁用危险函数:disable_functions = exec,system,passthru,shell_exec,popen,...
    • 限制文件访问:open_basedir = /var/www/html:/tmp
    • 仅安装必要扩展,及时更新系统与 PHP 版本
    • 数据库最小权限原则、强口令与定期备份

五 常见问题与排查清单

  • 访问 PHP 页面空白或下载:确认 Web 服务器已正确处理 .php,检查 PHP-FPM 是否在运行socket 路径是否一致(如:/run/php/php8.3-fpm.sock
  • 扩展缺失:按需安装,例如 sudo apt install php8.3-gd php8.3-mbstring php8.3-zip
  • 权限问题:确保 /var/www 及子目录属主为 www-data,权限 755/644 分层设置
  • 配置语法错误:Nginx 执行 sudo nginx -t;Apache 执行 sudo apache2ctl configtest
  • 版本不匹配:CLI 与 FPM 版本需一致(php -vphp-fpm8.3 -v 输出应匹配)
  • 日志优先:先看 Web 与 PHP-FPM 错误日志,再定位应用层问题

0