Ubuntu下部署 ThinkPHP 项目的标准流程
一 环境准备
- 更新系统并安装基础组件(以 Ubuntu 20.04/22.04/24.04 为例,PHP 版本请与项目要求匹配,ThinkPHP 6.x 建议 PHP >= 7.2,推荐 7.4 或 8.x):
- 安装 Web 与 PHP:sudo apt update && sudo apt install -y nginx php php-fpm php-mysql composer
- 按需补充常用扩展:sudo apt install -y php-curl php-gd php-mbstring php-xml php-zip php-bcmath
- 如使用 MySQL:sudo apt install -y mysql-server
- 验证环境:php -v、composer --version、sudo systemctl status nginx、sudo systemctl status php*-fpm
- 建议将站点代码放置在 /var/www/ 下,例如:/var/www/your_project,并确保后续将 Web 根目录指向项目的 public 目录。
二 部署代码与依赖
- 获取项目代码(三选一):
- Git:git clone /var/www/your_project
- SCP/Rsync:将本地项目上传至 /var/www/your_project
- Composer 创建新项目(可选):composer create-project topthink tp6 && mv tp6 /var/www/your_project
- 安装依赖:cd /var/www/your_project && composer install --optimize-autoloader --no-dev
- 目录权限与属主(Web 服务用户通常为 www-data):
- 设置可写目录:chmod -R 755 runtime public/uploads
- 设置属主:chown -R www-data:www-data /var/www/your_project
- 生产环境配置:
- 关闭调试:编辑 config/app.php,将 ‘app_debug’ => false
- 数据库配置:写入 .env 或 config/database.php(建议 .env,注意文件权限)
- 安全加固:禁止访问敏感文件,例如在 Nginx 中添加 location ~ /.env { deny all; }。
三 Web 服务器配置
- Nginx 配置要点(站点配置示例,文件可置于 /etc/nginx/sites-available/your_project):
- 将 root 指向 public;使用 try_files 或 if (!-e) 实现隐藏入口 index.php 的路由
- fastcgi_pass 请与系统实际 PHP-FPM 套接字一致(如:/run/php/php8.3-fpm.sock 或 php7.4-fpm.sock)
- 示例片段:
server {
listen 80;
server_name your_domain.com;
root /var/www/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.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.env { deny all; }
}
- 启用站点与语法检查:sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled/ && sudo nginx -t && sudo systemctl reload nginx
- Apache 配置要点(启用 mod_rewrite,站点配置示例):
- DocumentRoot 指向项目根目录(非 public),并确保 AllowOverride All
- 在 public/.htaccess 中启用重写(框架通常自带),或按项目说明配置
- 启用站点:sudo a2ensite your_project.conf && sudo a2enmod rewrite && sudo systemctl reload apache2
- 提示:不同 PHP 版本的套接字路径不同,部署前请确认 /run/php/phpX.Y-fpm.sock 的实际路径并在 Nginx/Apache 中保持一致。
四 数据库与初始化
- 启动并初始化数据库(如未初始化):sudo systemctl start mysql && sudo mysql_secure_installation
- 创建数据库与用户(示例):
- CREATE DATABASE your_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- CREATE USER ‘your_user’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
- GRANT ALL PRIVILEGES ON your_db.* TO ‘your_user’@‘localhost’;
- FLUSH PRIVILEGES;
- 配置项目连接信息:
- 推荐写入 .env:DB_TYPE=mysql、DB_HOST=127.0.0.1、DB_NAME=your_db、DB_USER=your_user、DB_PASSWORD=StrongPass!、DB_PORT=3306
- 或编辑 config/database.php 对应项
- 导入数据结构与初始数据(如有):mysql -u your_user -p your_db < schema.sql
- 访问域名或 IP 验证首页与接口是否正常。
五 安全与优化
- 启用 HTTPS(Let’s Encrypt 免费证书,Nginx 示例):
- 安装 Certbot:sudo apt install certbot python3-certbot-nginx
- 获取并自动配置证书:sudo certbot --nginx -d your_domain.com
- 建议开启自动续期(certbot 默认添加 systemd 定时任务)
- 性能与安全加固:
- 开启 OPcache(生产环境强烈建议):编辑 /etc/php/8.3/fpm/php.ini(按实际版本),设置 opcache.enable=1 等参数并重启 PHP-FPM
- 隐藏入口文件:确保 Nginx try_files 或 Apache 重写规则生效
- 禁止访问敏感文件:如 .env、安装脚本等(Nginx:location ~ /.env { deny all; })
- 目录权限最小化:仅对 runtime、public/uploads 等目录赋予写权限
- 日志排查:
- Nginx:/var/log/nginx/error.log、access.log
- PHP-FPM:/var/log/php8.3-fpm.log(按实际版本)
- ThinkPHP:runtime/log/*.log
- 常见问题速查:
- 502 Bad Gateway:检查 PHP-FPM 是否运行、套接字路径是否与 Nginx 一致
- 路由 404/白屏:确认重写规则生效、请求被转发到 index.php
- Composer 安装慢:可临时使用国内镜像加速(composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/)。