linux

Linux环境下ThinkPHP如何部署

小樊
46
2025-09-18 18:12:47
栏目: 编程语言

一、环境准备

  1. 更新系统软件包
    执行sudo apt update && sudo apt upgrade -y(Ubuntu/Debian)或sudo yum update -y(CentOS/RHEL),确保系统软件包为最新版本。
  2. 安装PHP及扩展
    ThinkPHP需要PHP 7.1及以上版本及常用扩展,以Ubuntu为例,执行:
    sudo apt install php php-fpm php-mysql php-mbstring php-xml php-curl php-bcmath -y
    php-bcmath用于处理高精度计算,部分ThinkPHP功能依赖)。
  3. 安装Web服务器
    • Nginxsudo apt install nginx -y(Ubuntu);
    • Apachesudo apt install apache2 -y(Ubuntu),并启用mod_rewrite模块(sudo a2enmod rewrite)。
  4. 安装Composer
    执行curl -sS https://getcomposer.org/installer | php下载Composer,再通过sudo mv composer.phar /usr/local/bin/composer全局安装,方便后续项目依赖管理。

二、ThinkPHP项目部署

  1. 安装ThinkPHP项目
    • 推荐方式(Composer):进入项目目录(如/var/www),执行composer create-project topthink/think tp6tp6为项目目录名),等待依赖下载完成。
    • 手动方式:从ThinkPHP官网下载完整版压缩包,解压至Web目录(如/var/www/html/thinkphp)。
  2. 配置数据库连接
    修改项目根目录下的.env文件(若无则复制config/.env.example生成),设置数据库连接信息:
    DATABASE_TYPE=mysql
    DATABASE_HOSTNAME=127.0.0.1
    DATABASE_NAME=your_dbname
    DATABASE_USERNAME=your_username
    DATABASE_PASSWORD=your_password
    DATABASE_PORT=3306
    
  3. 设置目录权限
    ThinkPHP的runtime目录(存放缓存、日志等临时文件)需可写,执行:
    sudo chown -R www-data:www-data /var/www/tp6/runtimewww-data为Web服务器用户,根据系统调整);
    sudo chmod -R 755 /var/www/tp6/runtime(确保目录权限正确)。

三、Web服务器配置

  1. Nginx配置
    • 新建配置文件(如/etc/nginx/sites-available/thinkphp.conf),添加以下内容:
      server {
          listen 80;
          server_name yourdomain.com;  # 替换为域名或IP
          root /var/www/tp6/public;    # 指向ThinkPHP的public目录
          index index.php;
          
          location / {
              try_files $uri $uri/ /index.php?$query_string;  # 支持PATHINFO
          }
          
          location ~ \.php$ {
              include snippets/fastcgi-php.conf;
              fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # 路径需与PHP-FPM配置一致
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          }
          
          location ~ /\.env {  # 限制.env文件访问
              deny all;
          }
      }
      
    • 启用配置:sudo ln -s /etc/nginx/sites-available/thinkphp.conf /etc/nginx/sites-enabled/
    • 测试配置语法:sudo nginx -t
    • 重启Nginx:sudo systemctl restart nginx
  2. Apache配置
    • 启用mod_rewritesudo a2enmod rewrite
    • 修改虚拟主机配置(如/etc/apache2/sites-available/000-default.conf),在<Directory>块中添加AllowOverride All(允许.htaccess生效);
    • 在项目根目录添加.htaccess文件,内容如下:
      <IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteRule ^(.*)$ public/$1 [L]
      </IfModule>
      
    • 重启Apache:sudo systemctl restart apache2

四、常见问题解决

  1. 502 Bad Gateway
    检查PHP-FPM是否运行(sudo systemctl status php8.1-fpm),确认Nginx配置中的fastcgi_pass路径与PHP-FPM的listen路径一致(如/run/php/php8.1-fpm.sock)。
  2. 路由失效
    确保Web服务器配置中包含try_files $uri $uri/ /index.php?$query_string;(Nginx)或.htaccess重写规则(Apache),支持ThinkPHP的PATHINFO模式。
  3. Composer安装慢
    配置国内镜像加速:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,显著提升依赖下载速度。

五、部署优化建议

  1. 生产环境安全
    关闭调试模式(修改config/app.php中的app_debugfalse),限制.env文件访问(通过Nginx的deny all规则)。
  2. 性能提升
    • 开启OPcache(修改php.ini中的opcache.enable=1);
    • 使用Redis缓存会话(修改config/session.php中的typeredis)。
  3. 自动化部署
    结合Git钩子或CI/CD工具(如Jenkins、GitHub Actions),实现代码自动拉取、依赖安装和项目重启,减少人工操作。

0
看了该问题的人还看了