温馨提示×

ubuntu里thinkphp如何部署

小樊
45
2025-12-30 08:15:07
栏目: 编程语言

Ubuntu 部署 ThinkPHP 6 实操指南

一 环境准备

  • 更新系统并安装组件(以 Ubuntu 20.04/22.04 为例,示例使用 PHP 8.2;如使用 PHP 8.1/8.3,将版本号替换为实际版本):
    • 安装 PHP 及常用扩展(含 PDO MySQL、mbstring、xml、curl、zip 等):
      • sudo apt update && sudo apt install -y php php-cli php-fpm php-mysql php-mbstring php-xml php-curl php-zip
    • 安装 NginxComposer
      • sudo apt install -y nginx
      • curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer
  • 验证环境:
    • php -v、nginx -v、composer -V 均应返回版本号
  • 数据库准备(示例):
    • 安装 MariaDB:sudo apt install -y mariadb-server
    • 登录并创建库:CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 说明:ThinkPHP 6.x 推荐使用 PHP 7.4+;若使用 PHP 8.x,建议安装 php-mysqlnd(原生驱动,性能更佳)。

二 部署项目

  • 方式一(推荐)Composer 创建标准项目:
    • 建议将站点代码放在 /var/www/ 下,例如:
      • composer create-project topthink tp6 /var/www/tp6
  • 方式二 上传现有项目:
    • 通过 Git/SCP/Rsync 将项目上传至 /var/www/tp6
  • 安装依赖(生产环境):
    • cd /var/www/tp6 && composer install --no-dev --optimize-autoloader
  • 配置数据库:
    • 复制示例环境文件:cp .env.example .env
    • 编辑 .env(优先使用 .env,避免将敏感信息提交到代码库):
      • DATABASE_TYPE=mysql
      • DATABASE_HOSTNAME=127.0.0.1
      • DATABASE_NAME=your_db
      • DATABASE_USERNAME=your_user
      • DATABASE_PASSWORD=your_pass
      • DATABASE_PORT=3306
  • 目录权限(Web 服务用户通常为 www-data):
    • sudo chown -R www-data:www-data /var/www/tp6
    • sudo chmod -R 755 /var/www/tp6
    • sudo chmod -R 775 /var/www/tp6/runtime
  • 说明:ThinkPHP 的入口在 public/,后续 Web 服务器根目录需指向该目录。

三 Web 服务器配置

  • Nginx(推荐)
    • 新建站点配置:/etc/nginx/sites-available/tp6
      • server { listen 80; server_name your_domain_or_ip; root /var/www/tp6/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.2-fpm.sock; # 按实际 PHP 版本调整 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

        location ~ /.env { deny all; } }

    • 启用站点并生效:
      • sudo ln -s /etc/nginx/sites-available/tp6 /etc/nginx/sites-enabled/
      • sudo nginx -t && sudo systemctl reload nginx
  • Apache(可选)
    • 启用重写:sudo a2enmod rewrite
    • 虚拟主机示例(/etc/apache2/sites-available/tp6.conf):
      • <VirtualHost *:80> ServerName your_domain_or_ip DocumentRoot /var/www/tp6/public <Directory /var/www/tp6/public> Options Indexes FollowSymLinks AllowOverride All Require all granted
    • 启用站点:sudo a2ensite tp6.conf && sudo systemctl reload apache2
  • 说明:Nginx 需确保 root 指向 public 且包含 try_files 规则以支持 PATHINFO;Apache 需启用 mod_rewrite 并允许 .htaccess

四 安全与性能优化

  • 生产安全
    • 关闭调试:编辑 config/app.php,设置 ‘app_debug’ => false
    • 禁止访问敏感文件:Nginx 增加 location ~ /.env { deny all; };必要时限制 /vendor/runtime 访问
    • 建议开启 HTTPS:使用 Let’s Encrypt 免费证书(sudo certbot --nginx -d your_domain.com)
  • 性能优化
    • 开启 OPcache(编辑 php.ini,如 /etc/php/8.2/fpm/php.ini):
      • opcache.enable=1
      • opcache.memory_consumption=128
      • opcache.interned_strings_buffer=8
      • opcache.max_accelerated_files=4000
      • opcache.validate_timestamps=0 # 生产环境关闭文件时间戳检查
      • 重启 PHP-FPM:sudo systemctl restart php8.2-fpm
    • 会话/缓存:安装 php-redis 并在配置中使用 Redis(如 config/session.php 设置 type 为 redis)
  • 说明:开启 OPcache 可显著提升 PHP 执行性能;使用 Redis 可提升会话与缓存读写性能。

五 常见问题排查

  • 502 Bad Gateway
    • 检查 PHP-FPM 状态:sudo systemctl status php8.2-fpm
    • 核对 Nginx 的 fastcgi_pass 与 PHP-FPM 的 listen 一致(如 /run/php/php8.2-fpm.sock
  • 路由 404 或白屏
    • 核对 Nginx 的 try_files $uri $uri/ /index.php?$query_string; 是否存在
    • 核对 root 是否指向 public
  • Composer 安装慢
    • 使用国内镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 权限错误
    • 确认 runtime 目录可写且属主为 www-data
  • 说明:以上问题多与 PHP-FPM 未运行路径不一致重写规则缺失目录权限 有关。

0