Ubuntu 部署 ThinkPHP 6 实操指南
一 环境准备
- 更新系统并安装组件(以 Ubuntu 20.04/22.04 为例,示例使用 PHP 8.2;如使用 PHP 8.1/8.3,将版本号替换为实际版本):
- 安装 PHP 及常用扩展(含 PDO MySQL、mbstring、xml、curl、zip 等):
- sudo apt update && sudo apt install -y php php-cli php-fpm php-mysql php-mbstring php-xml php-curl php-zip
- 安装 Nginx 与 Composer:
- sudo apt install -y nginx
- curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer
- 验证环境:
- php -v、nginx -v、composer -V 均应返回版本号
- 数据库准备(示例):
- 安装 MariaDB:sudo apt install -y mariadb-server
- 登录并创建库:CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 说明:ThinkPHP 6.x 推荐使用 PHP 7.4+;若使用 PHP 8.x,建议安装 php-mysqlnd(原生驱动,性能更佳)。
二 部署项目
- 方式一(推荐)Composer 创建标准项目:
- 建议将站点代码放在 /var/www/ 下,例如:
- composer create-project topthink tp6 /var/www/tp6
- 方式二 上传现有项目:
- 通过 Git/SCP/Rsync 将项目上传至 /var/www/tp6
- 安装依赖(生产环境):
- cd /var/www/tp6 && composer install --no-dev --optimize-autoloader
- 配置数据库:
- 复制示例环境文件:cp .env.example .env
- 编辑 .env(优先使用 .env,避免将敏感信息提交到代码库):
- DATABASE_TYPE=mysql
- DATABASE_HOSTNAME=127.0.0.1
- DATABASE_NAME=your_db
- DATABASE_USERNAME=your_user
- DATABASE_PASSWORD=your_pass
- DATABASE_PORT=3306
- 目录权限(Web 服务用户通常为 www-data):
- sudo chown -R www-data:www-data /var/www/tp6
- sudo chmod -R 755 /var/www/tp6
- sudo chmod -R 775 /var/www/tp6/runtime
- 说明:ThinkPHP 的入口在 public/,后续 Web 服务器根目录需指向该目录。
三 Web 服务器配置
- Nginx(推荐)
- 新建站点配置:/etc/nginx/sites-available/tp6
-
server {
listen 80;
server_name your_domain_or_ip;
root /var/www/tp6/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;
}
location ~ /.env {
deny all;
}
}
- 启用站点并生效:
- sudo ln -s /etc/nginx/sites-available/tp6 /etc/nginx/sites-enabled/
- sudo nginx -t && sudo systemctl reload nginx
- Apache(可选)
- 启用重写:sudo a2enmod rewrite
- 虚拟主机示例(/etc/apache2/sites-available/tp6.conf):
- <VirtualHost *:80>
ServerName your_domain_or_ip
DocumentRoot /var/www/tp6/public
<Directory /var/www/tp6/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
- 启用站点:sudo a2ensite tp6.conf && sudo systemctl reload apache2
- 说明:Nginx 需确保 root 指向 public 且包含 try_files 规则以支持 PATHINFO;Apache 需启用 mod_rewrite 并允许 .htaccess。
四 安全与性能优化
- 生产安全
- 关闭调试:编辑 config/app.php,设置 ‘app_debug’ => false
- 禁止访问敏感文件:Nginx 增加 location ~ /.env { deny all; };必要时限制 /vendor、/runtime 访问
- 建议开启 HTTPS:使用 Let’s Encrypt 免费证书(sudo certbot --nginx -d your_domain.com)
- 性能优化
- 开启 OPcache(编辑 php.ini,如 /etc/php/8.2/fpm/php.ini):
- opcache.enable=1
- opcache.memory_consumption=128
- opcache.interned_strings_buffer=8
- opcache.max_accelerated_files=4000
- opcache.validate_timestamps=0 # 生产环境关闭文件时间戳检查
- 重启 PHP-FPM:sudo systemctl restart php8.2-fpm
- 会话/缓存:安装 php-redis 并在配置中使用 Redis(如 config/session.php 设置 type 为 redis)
- 说明:开启 OPcache 可显著提升 PHP 执行性能;使用 Redis 可提升会话与缓存读写性能。
五 常见问题排查
- 502 Bad Gateway
- 检查 PHP-FPM 状态:sudo systemctl status php8.2-fpm
- 核对 Nginx 的 fastcgi_pass 与 PHP-FPM 的 listen 一致(如 /run/php/php8.2-fpm.sock)
- 路由 404 或白屏
- 核对 Nginx 的 try_files $uri $uri/ /index.php?$query_string; 是否存在
- 核对 root 是否指向 public
- Composer 安装慢
- 使用国内镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
- 权限错误
- 确认 runtime 目录可写且属主为 www-data
- 说明:以上问题多与 PHP-FPM 未运行、路径不一致、重写规则缺失 或 目录权限 有关。