CentOS服务器上部署与配置 ThinkPHP 的实用步骤
一 环境准备与版本要求
- 操作系统建议使用CentOS 7.x(或兼容的 Alibaba Cloud Linux 3/2)。
- 安装并启用 PHP 8.0+(ThinkPHP 8.0 要求 PHP ≥ 8.0)。
- 安装 Composer 作为依赖管理工具。
- 放行安全组与防火墙端口:入方向放行 22(SSH)、80/443(HTTP/HTTPS),如使用内置服务器可临时放行 8000。
- 建议安装 Nginx 或 Apache 作为生产环境 Web 服务,并准备数据库(如 MySQL/MariaDB)。
二 安装 PHP 与 Composer
- 安装 EPEL 与 Remi 仓库,并启用 PHP 8.0 仓库:
- CentOS 7.x 常用命令:
- sudo yum install -y epel-release
- sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
- sudo yum-config-manager --enable remi-php80
- 安装 PHP 及常用扩展(按项目需要增减):
- sudo yum install -y php php-cli php-fpm php-common php-mysqlnd php-gd php-mbstring php-curl php-xml php-zip php-bcmath php-json
- 验证版本:
- 安装 Composer:
- sudo yum install -y unzip git
- curl -sS https://getcomposer.org/installer | php
- sudo mv composer.phar /usr/local/bin/composer
- composer --version
三 创建项目与目录权限
- 使用 Composer 创建项目(示例目录:/var/www/myapp):
- cd /var/www
- composer create-project topthink myapp
- 目录权限与属主(以 Apache 为例,用户/组为 apache;如使用 Nginx,通常为 nginx):
- sudo chown -R apache:apache /var/www/myapp
- sudo chmod -R 755 /var/www/myapp
- 确保运行时可写目录(如 runtime、public/static 等)具备写权限,避免 500 错误。
- 开发环境快速验证:
- cd /var/www/myapp
- php think run
- 浏览器访问:http://<服务器公网IP>:8000(仅在开发环境使用内置服务器)。
四 Web 服务器配置
- Nginx 配置示例(站点根目录指向项目的 public,并开启 PATH_INFO 兼容):
- 建议将站点配置放入:/etc/nginx/conf.dphp.conf
- 核心配置片段:
-
server {
listen 80;
server_name your_domain.com;
root /var/www/myapp/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
fastcgi_pass unix:/run/php-fpm/www.sock; # 如使用 TCP,可改为 127.0.0.1:9000
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location ~ /.ht {
deny all;
}
}
- 检查并重载:
- sudo nginx -t && sudo systemctl reload nginx
- Apache 配置要点:
- 启用模块:sudo a2enmod rewrite(或确保 mod_rewrite 已启用)
- 虚拟主机示例(DocumentRoot 指向 public,并开启 AllowOverride All 以使用 .htaccess 重写):
- <VirtualHost *:80>
ServerName your_domain.com
DocumentRoot /var/www/myapp/public
<Directory /var/www/myapp/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
- 重启:sudo systemctl reload httpd
- 说明:ThinkPHP 的路由依赖 URL 重写,务必确保 public/.htaccess(Apache)或 Nginx 的 try_files 规则生效。
五 数据库与框架配置及常见问题
- 数据库准备(示例):
- 安装与启动 MariaDB/MySQL(略)
- 创建库与用户并授权(示例):
- CREATE DATABASE thinkphp DEFAULT CHARSET utf8mb4;
- CREATE USER ‘tpuser’@‘localhost’ IDENTIFIED BY ‘StrongPass!’;
- GRANT ALL PRIVILEGES ON thinkphp.* TO ‘tpuser’@‘localhost’;
- FLUSH PRIVILEGES;
- ThinkPHP 配置:
- 使用 .env 或配置文件 config/database.php 设置数据库连接:
- DB_TYPE=mysql
- DB_HOST=127.0.0.1
- DB_NAME=thinkphp
- DB_USER=tpuser
- DB_PASS=StrongPass!
- DB_PORT=3306
- DB_PREFIX=tp_
- 常见问题排查:
- 404/白屏:检查 public/.htaccess 或 Nginx try_files 是否正确;确认站点根目录为 public。
- 500 错误:查看 runtime 目录是否可写;检查 PHP 错误日志与 FPM 日志。
- 路由无效:确认重写规则生效;PATH_INFO 传递正确(Nginx 需显式设置 fastcgi_param PATH_INFO)。
- 权限问题:确保 apache:apache 或 nginx:nginx 拥有项目目录的读写权限(生产环境谨慎设置 777)。
- 端口访问被拒:核对云服务器安全组与系统防火墙(firewalld/iptables)已放行 80/443(及开发时的 8000)。