温馨提示×

thinkphp项目在ubuntu如何部署

小樊
40
2025-11-30 20:52:08
栏目: 编程语言

Ubuntu部署ThinkPHP项目实操指南

一 环境准备

  • 更新系统并安装基础组件(以 Ubuntu 20.04/22.04 为例,PHP 建议 7.4+):
    • 安装 Web 与 PHP:sudo apt update && sudo apt install -y nginx php php-fpm php-mysql php-mbstring php-xml php-curl php-zip php-gd
    • 安装数据库(如用 MySQL):sudo apt install -y mysql-server
    • 安装 Composer:curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer
  • 启动并设为开机自启:sudo systemctl enable --now nginx phpX.Y-fpm mysql(将 X.Y 替换为实际版本,如 7.4/8.1/8.2)。

二 部署代码与依赖

  • 放置代码:建议将项目放在 /var/www/your_project,Web 访问根目录指向项目的 public 目录(更安全、符合规范)。
  • 安装依赖:cd /var/www/your_project && composer install --optimize-autoloader --no-dev
  • 配置环境:
    • 复制或编辑 .env,设置数据库连接(如 DB_HOST、DB_NAME、DB_USER、DB_PASS、DB_PORT),并确保 .env 权限安全(仅属主可读写)。
    • 生产环境关闭调试:将 config/app.php 中的 ‘app_debug’ => false
  • 目录权限:确保 runtimestorage 等可写(按需设置,常见为项目目录 755,可写目录 775/777 视 umask 与属主而定):
    • sudo chown -R www-data:www-data /var/www/your_project
    • sudo find /var/www/your_project -type d -exec chmod 755 {} ;
    • sudo chmod -R 775 /var/www/your_project/runtime /var/www/your_project/storage
  • 数据库初始化(如框架或项目自带迁移/种子命令,可按需执行)。

三 Web 服务器配置

  • 推荐方案 Nginx + PHP-FPM(隐藏入口 index.php,支持 PATH_INFO)
    1. 新建站点配置:sudo nano /etc/nginx/sites-available/your_project
    2. 配置示例(注意将 root 指向 public,按实际 PHP 版本调整 fastcgi_pass 的 socket 路径):
      server {
          listen 80;
          server_name your_domain.com www.your_domain.com;
          root /var/www/your_project/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/php7.4-fpm.sock;  # 例如:/run/php/php8.1-fpm.sock
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include fastcgi_params;
          }
      
          # 安全:禁止访问 .ht* 文件
          location ~ /\.ht {
              deny all;
          }
      }
      
    3. 启用站点并重启:
      • sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled/
      • sudo nginx -t && sudo systemctl reload nginx
  • 可选 Apache 方案
    • 启用重写:sudo a2enmod rewrite && sudo systemctl restart apache2
    • 虚拟主机示例(DocumentRoot 指向 public,Directory 开启 AllowOverride All 以使用 .htaccess 重写)。

四 安全与优化

  • 开启 HTTPS(Let’s Encrypt 免费证书):
    • Nginx:sudo apt install certbot python3-certbot-nginx && sudo certbot --nginx -d your_domain.com
    • Apache:sudo apt install certbot python3-certbot-apache && sudo certbot --apache -d your_domain.com
  • 防火墙放行:sudo ufw allow ‘Nginx Full’(或 ‘Apache Full’)
  • 安全与性能要点:
    • 生产关闭调试(app_debug=false),隐藏 .env 与敏感文件
    • 仅开放必要端口(80/443),定期更新系统与依赖
    • 配置合适的 opcache(生产建议开启),静态资源走 Nginx 直接输出
    • 日志排查:/var/log/nginx/error.log、/var/log/phpX.Y-fpm.log。

五 常见问题快速排查

  • 404 或路由无效:确认 root 指向 public,Nginx 使用 try_files 将所有请求转发到 index.php
  • 白屏或 No input file specified:检查 SCRIPT_FILENAME 是否为 $document_root$fastcgi_script_name,确认 public/index.php 存在且可访问
  • 权限错误:确认 runtimestoragewww-data 可写,项目目录属主为 www-data
  • 数据库连接失败:核对 .envDB_HOST/DB_PORT/DB_USER/DB_PASS/DB_NAME,确保数据库已创建并授权
  • 502 Bad Gateway:检查 php-fpm 是否运行,确认 fastcgi_passsocket 路径与 PHP 版本一致(如 /run/php/php7.4-fpm.sock/var/run/php/php7.4-fpm.sock),并重启服务
  • 类未找到/依赖缺失:在项目目录执行 composer install --optimize-autoloader --no-dev。

0