温馨提示×

Ubuntu PHP应用如何部署

小樊
42
2025-12-14 12:36:33
栏目: 编程语言

Ubuntu PHP应用部署实操指南

一 环境准备与版本选择

  • 建议使用 Ubuntu 22.04 LTS 或 24.04 LTS,先更新系统并安装常用工具:sudo apt update && sudo apt upgrade -y。
  • 选择运行栈:
    • LAMP:Apache + MySQL/MariaDB + PHP(上手简单)。
    • LNMP:Nginx + PHP-FPM + MySQL/MariaDB(高并发更友好)。
  • 安装基础组件(按需选择其一或组合):
    • LAMP:sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip
    • LNMP:sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
  • 验证安装:php -v;启动服务:sudo systemctl enable --now apache2 或 sudo systemctl enable --now nginx;如需数据库:sudo mysql_secure_installation。

二 部署两种常见方案

  • 方案一 Apache + mod_php
    • 启用重写:sudo a2enmod rewrite;如需与 PHP-FPM 集成也可启用:sudo a2enmod proxy_fcgi setenvif。
    • 虚拟主机示例(/etc/apache2/sites-available/myproj.conf):
      <VirtualHost *:80>
          ServerName yourdomain.com
          DocumentRoot /var/www/html/myproj/public
          <Directory /var/www/html/myproj/public>
              Options Indexes FollowSymLinks
              AllowOverride All
              Require all granted
          </Directory>
          ErrorLog ${APACHE_LOG_DIR}/myproj_error.log
          CustomLog ${APACHE_LOG_DIR}/myproj_access.log combined
      </VirtualHost>
      
    • 启用站点并重启:sudo a2ensite myproj.conf && sudo systemctl reload apache2。
  • 方案二 Nginx + PHP-FPM
    • 安装对应版本的 PHP-FPM(示例为 8.1):sudo apt install php8.1-fpm;启动:sudo systemctl enable --now php8.1-fpm。
    • 站点配置示例(/etc/nginx/sites-available/myproj):
      server {
          listen 80;
          server_name yourdomain.com;
          root /var/www/html/myproj/public;
          index index.php index.html;
      
          location / {
              try_files $uri $uri/ /index.php?$query_string;
          }
      
          location ~ \.php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/run/php/php8.1-fpm.sock;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
          }
      
          location ~ /\.ht {
              deny all;
          }
      }
      
    • 语法检查与重载:sudo nginx -t && sudo systemctl reload nginx。

三 发布代码与数据库初始化

  • 发布代码
    • 方式一:git clone 到目标目录(如 /var/www/html/myproj)。
    • 方式二:scp/rsync 上传到服务器。
  • 目录与权限(以 web 用户 www-data 为例)
    • sudo chown -R www-data:www-data /var/www/html/myproj
    • sudo find /var/www/html/myproj -type f -exec chmod 644 {} ;
    • sudo find /var/www/html/myproj -type d -exec chmod 755 {} ;
  • Composer 依赖(如项目使用)
    • curl -sS https://getcomposer.org/installer | php
    • sudo mv composer.phar /usr/local/bin/composer
    • 在项目根目录执行:composer install --optimize-autoloader --no-dev。
  • 数据库(示例)
    • 登录:mysql -u root -p
    • 执行:
      CREATE DATABASE myproj CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
      CREATE USER 'myproj'@'localhost' IDENTIFIED BY 'StrongPass!';
      GRANT ALL PRIVILEGES ON myproj.* TO 'myproj'@'localhost';
      FLUSH PRIVILEGES;
      
    • 导入初始化数据:mysql -u myproj -p myproj < init.sql。
  • 配置应用
    • 在 .env 或配置文件中填入数据库 DB_HOST/DB_NAME/DB_USER/DB_PASS,以及域名、调试模式等。

四 安全与运维要点

  • 防火墙
    • UFW:sudo ufw allow ‘Apache Full’ 或 sudo ufw allow ‘Nginx Full’;如需仅开放 80/443:sudo ufw allow 80,443/tcp。
  • HTTPS(Let’s Encrypt)
    • Apache:sudo apt install certbot python3-certbot-apache && sudo certbot --apache -d yourdomain.com
    • Nginx:sudo apt install certbot python3-certbot-nginx && sudo certbot --nginx -d yourdomain.com
  • PHP 安全与性能
    • 生产环境关闭错误显示:在 php.ini 设置 display_errors = Off,log_errors = On;按需调整 upload_max_filesize、post_max_size、memory_limit。
    • FPM 进程池优化(/etc/php/{version}/fpm/pool.d/www.conf):合理设置 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers;必要时开启慢日志定位性能瓶颈。
  • 日志与排错
    • Apache:/var/log/apache2/error.log;Nginx:/var/log/nginx/error.log;FPM:/var/log/php{version}-fpm.log。
    • 上线前删除测试页(如 /var/www/html/info.php),避免泄露环境信息。

0