一、环境准备:安装基础软件与依赖
在Linux服务器上部署ThinkPHP前,需先安装PHP、Web服务器(Nginx/Apache)、数据库(MySQL/MariaDB)及Composer(依赖管理工具)。以Ubuntu/Debian为例,可通过以下命令快速安装:
# 更新软件包并安装PHP及扩展(确保包含PDO、OpenSSL、MBstring等)
sudo apt update && sudo apt upgrade -y
sudo apt install php php-fpm php-mysql php-mbstring php-xml php-curl -y
# 安装Nginx(或Apache,需启用mod_rewrite)
sudo apt install nginx -y
# 安装Composer(全局可用)
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
注:ThinkPHP 6.x推荐PHP 7.4及以上版本,需确保扩展与框架版本兼容。
二、项目部署:上传代码与安装依赖
scp、rsync或Git将本地项目上传至服务器(如/var/www/html/your_project),推荐使用Composer创建项目(避免手动下载遗漏依赖):composer create-project topthink/think your_project
index.php位于public目录,需将Web服务器的root指向此处(如Nginx配置中的root /var/www/html/your_project/public),避免直接暴露项目文件。composer install安装依赖;修改runtime目录权限(存放缓存、日志等),确保Web服务器用户(如www-data)可写:chmod -R 755 runtime
chown -R www-data:www-data runtime
三、Web服务器配置:Nginx/Apache优化
Nginx配置(推荐):
创建虚拟主机配置文件(如/etc/nginx/sites-available/your_project),关键设置包括:
public目录;try_files规则支持PATHINFO(解决路由失效);fastcgi_pass路径需与PHP-FPM监听一致)。server {
listen 80;
server_name your_domain.com;
root /var/www/html/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/php8.2-fpm.sock; # 根据PHP版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 禁止访问.env文件
location ~ /\.env {
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),并在项目根目录添加.htaccess文件,将请求重写至public目录:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
四、关键配置调整:环境与安全
.env文件(而非config/database.php),填写数据库信息:DATABASE_TYPE=mysql
DATABASE_HOSTNAME=127.0.0.1
DATABASE_NAME=your_db
DATABASE_USERNAME=your_user
DATABASE_PASSWORD=your_pass
DATABASE_PORT=3306
config/app.php:'app_debug' => false,
try_files规则已实现index.php隐藏,无需额外配置。五、常见问题排查
sudo systemctl status php-fpm),确认Nginx配置中的fastcgi_pass路径与PHP-FPM监听的socket一致(如/run/php/php8.2-fpm.sock)。try_files $uri $uri/ /index.php?$query_string;,且location ~ \.php$块正确配置。runtime目录权限(chmod -R 755 runtime)及文件所有者(chown -R www-data:www-data /var/www/html/your_project)。六、部署优化建议
php.ini:opcache.enable=1),使用Redis缓存会话(修改config/session.php:'type' => 'redis')。.env文件访问(Nginx添加location ~ /\.env { deny all; }),启用HTTPS(使用Let’s Encrypt免费证书:sudo certbot --nginx -d your_domain.com)。post-receive)或CI/CD工具(如Jenkins、GitHub Actions),实现代码推送后自动拉取、安装依赖及重启服务。