linux

ThinkPHP在Linux上如何部署

小樊
40
2025-10-01 15:24:28
栏目: 编程语言

一、环境准备:安装基础软件

在Linux服务器上部署ThinkPHP前,需先安装PHP、Web服务器(Nginx/Apache)、Composer及数据库(如MySQL)。以下以Ubuntu/Debian为例,说明关键步骤:

  1. 更新系统软件包
    sudo apt update && sudo apt upgrade -y
    
  2. 安装PHP及扩展
    ThinkPHP要求PHP 7.4及以上版本,需安装PDO、OpenSSL、MBstring等扩展:
    sudo apt install php php-fpm php-mysql php-mbstring php-xml php-curl -y
    
  3. 安装Web服务器
    • Nginx(推荐,性能更优):
      sudo apt install nginx -y
      
    • Apache(可选):
      sudo apt install apache2 -y
      
  4. 安装Composer(依赖管理工具):
    curl -sS https://getcomposer.org/installer | php
    sudo mv composer.phar /usr/local/bin/composer
    

二、上传项目代码:部署ThinkPHP项目

  1. 获取项目代码
    通过Git克隆或SCP上传本地项目至服务器(如/var/www/html/your_project):
    scp -r /local/path/to/thinkphp_project user@server_ip:/var/www/html/your_project
    
  2. 安装项目依赖
    进入项目根目录,运行composer install安装依赖(需提前配置好composer.json):
    cd /var/www/html/your_project
    composer install
    
  3. 设置目录权限
    确保runtime目录(存放临时文件)可写,vendor目录(依赖库)不可随意修改:
    sudo chown -R www-data:www-data /var/www/html/your_project  # 假设Web用户为www-data
    sudo chmod -R 755 /var/www/html/your_project/runtime
    

三、配置Web服务器:指向项目入口

1. Nginx配置(推荐)

创建Nginx虚拟主机配置文件(如/etc/nginx/sites-available/your_project),内容如下:

server {
    listen 80;
    server_name your_domain.com;  # 替换为域名或IP
    root /var/www/html/your_project/public;  # 必须指向public目录(入口文件index.php所在)
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;  # 路由重写,支持PATHINFO
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;  # 包含PHP-FPM配置
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # 根据PHP版本调整sock路径
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 可选:禁止访问隐藏文件(如.git)
    location ~ /\. {
        deny all;
    }
}

启用配置并重启Nginx:

sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled/
sudo nginx -t  # 测试配置语法
sudo systemctl restart nginx

2. Apache配置(可选)

若使用Apache,需启用mod_rewrite模块并配置虚拟主机:

sudo a2enmod rewrite  # 启用重写模块
sudo systemctl restart apache2

编辑虚拟主机配置文件(如/etc/apache2/sites-available/your_project.conf):

<VirtualHost *:80>
    ServerName your_domain.com
    DocumentRoot /var/www/html/your_project/public
    <Directory /var/www/html/your_project/public>
        Options Indexes FollowSymLinks
        AllowOverride All  # 允许.htaccess覆盖配置
        Require all granted
    </Directory>
</VirtualHost>

启用站点并重启Apache:

sudo a2ensite your_project.conf
sudo systemctl restart apache2

四、配置项目环境:适配生产环境

  1. 修改数据库连接
    编辑.env文件(位于项目根目录),设置数据库信息(避免将敏感信息提交至Git):
    DATABASE_CONNECTION=mysql
    DATABASE_HOSTNAME=127.0.0.1
    DATABASE_NAME=your_db_name
    DATABASE_USERNAME=your_db_user
    DATABASE_PASSWORD=your_db_password
    DATABASE_PORT=3306
    
  2. 关闭调试模式
    编辑config/app.php,将app_debug设置为false(生产环境必须):
    'app_debug' => false,
    
  3. 设置时区(可选):
    config/app.php中调整时区:
    'app_timezone' => 'Asia/Shanghai',
    

五、安全与优化:提升部署质量

  1. 启用HTTPS
    使用Let’s Encrypt免费证书加密流量,运行以下命令:

    sudo apt install certbot python3-certbot-nginx -y  # Nginx用户
    sudo certbot --nginx -d your_domain.com  # 替换为域名
    

    按提示完成证书安装,Nginx会自动配置HTTPS重定向。

  2. 优化性能

    • 开启OPcache:编辑php.ini(如/etc/php/8.1/fpm/php.ini),取消以下注释:
      opcache.enable=1
      opcache.memory_consumption=128
      opcache.max_accelerated_files=4000
      
    • 使用Redis缓存:安装Redis并配置ThinkPHP使用Redis存储会话/缓存:
      sudo apt install redis-server -y
      composer require topthink/framework/redis
      
      config/cache.php中设置Redis驱动:
      'default' => 'redis',
      'stores' => [
          'redis' => [
              'type'       => 'redis',
              'host'       => '127.0.0.1',
              'port'       => 6379,
              'password'   => '',  // 若有密码需填写
              'select'     => 0,
              'timeout'    => 0,
              'persistent' => false,
              'prefix'     => 'tp6:',
          ],
      ],
      

六、常见问题排查

  1. 502 Bad Gateway

    • 检查PHP-FPM是否运行:sudo systemctl status php8.1-fpm(状态应为active (running))。
    • 确认Nginx配置中的fastcgi_pass路径与PHP-FPM的sock文件一致(如/run/php/php8.1-fpm.sock)。
  2. 路由失效

    • 确保Nginx配置中包含try_files $uri $uri/ /index.php?$query_string;(关键规则,支持ThinkPHP路由)。
    • 检查config/app.php中的url_route_on是否开启(生产环境建议开启)。
  3. 权限问题

    • 若出现403 Forbidden,检查项目目录所有者是否为Web用户(如www-data),并确保权限为755
    • runtime目录无法写入,运行sudo chmod -R 755 runtime修复。

通过以上步骤,ThinkPHP项目即可在Linux服务器上稳定运行。部署后可通过浏览器访问http://your_domain.com(或HTTPS地址)验证效果。

0
看了该问题的人还看了