在Linux服务器上部署ThinkPHP前,需先安装PHP、Web服务器(Nginx/Apache)、Composer及数据库(如MySQL)。以下以Ubuntu/Debian为例,说明关键步骤:
sudo apt update && sudo apt upgrade -y
sudo apt install php php-fpm php-mysql php-mbstring php-xml php-curl -y
sudo apt install nginx -y
sudo apt install apache2 -y
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
/var/www/html/your_project
):scp -r /local/path/to/thinkphp_project user@server_ip:/var/www/html/your_project
composer install
安装依赖(需提前配置好composer.json
):cd /var/www/html/your_project
composer install
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
创建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
若使用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
.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
config/app.php
,将app_debug
设置为false
(生产环境必须):'app_debug' => false,
config/app.php
中调整时区:'app_timezone' => 'Asia/Shanghai',
启用HTTPS:
使用Let’s Encrypt免费证书加密流量,运行以下命令:
sudo apt install certbot python3-certbot-nginx -y # Nginx用户
sudo certbot --nginx -d your_domain.com # 替换为域名
按提示完成证书安装,Nginx会自动配置HTTPS重定向。
优化性能:
php.ini
(如/etc/php/8.1/fpm/php.ini
),取消以下注释:opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
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:',
],
],
502 Bad Gateway:
sudo systemctl status php8.1-fpm
(状态应为active (running)
)。fastcgi_pass
路径与PHP-FPM的sock文件一致(如/run/php/php8.1-fpm.sock
)。路由失效:
try_files $uri $uri/ /index.php?$query_string;
(关键规则,支持ThinkPHP路由)。config/app.php
中的url_route_on
是否开启(生产环境建议开启)。权限问题:
403 Forbidden
,检查项目目录所有者是否为Web用户(如www-data
),并确保权限为755
。runtime
目录无法写入,运行sudo chmod -R 755 runtime
修复。通过以上步骤,ThinkPHP项目即可在Linux服务器上稳定运行。部署后可通过浏览器访问http://your_domain.com
(或HTTPS地址)验证效果。