Debian如何部署ThinkPHP的集群环境
导读:架构与前置条件 架构建议:前端使用Nginx/HAProxy做负载均衡,后端部署多台 Debian应用服务器运行PHP-FPM + ThinkPHP,数据库采用MySQL 主从复制实现读写分离,静态资源使用NFS/对象存储或本地共享目录,...
架构与前置条件
- 架构建议:前端使用Nginx/HAProxy做负载均衡,后端部署多台 Debian应用服务器运行PHP-FPM + ThinkPHP,数据库采用MySQL 主从复制实现读写分离,静态资源使用NFS/对象存储或本地共享目录,会话通过Redis集中存储,日志统一到rsyslog/ELK。
- 版本建议:PHP ≥ 8.0(ThinkPHP 8 要求),Web 服务器用 Nginx(或 Apache),数据库 MySQL 5.7+(主从),缓存与会话 Redis。
- 基础环境:各应用节点安装 PHP-FPM、Nginx、Composer;数据库主从完成复制;共享目录或对象存储用于上传;统一日志与监控。
单节点部署步骤
- 安装基础组件(以 Debian 11/12 为例,PHP 版本按需选择,示例为 8.2):
- sudo apt update & & sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip nginx composer
- 部署代码与依赖:
- 使用 Composer 创建项目:composer create-project topthink /var/www/myapp
- 设置目录权限:sudo chown -R www-data:www-data /var/www/myapp & & sudo find /var/www/myapp -type d -exec chmod 755 { } ; & & sudo find /var/www/myapp -type f -exec chmod 644 { } ;
- Nginx 站点配置(/etc/nginx/sites-available/myapp):
- server { listen 80; server_name your.domain; root /var/www/myapp/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; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /.ht { deny all; } }
- 启用站点并重启:sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ & & sudo nginx -t & & sudo systemctl reload nginx
- 数据库与配置:
- 创建数据库与用户(在主库执行):CREATE DATABASE tp DEFAULT CHARSET utf8mb4; CREATE USER ‘tp’@‘%’ IDENTIFIED BY ‘StrongPass!’; GRANT ALL ON tp.* TO ‘tp’@‘%’; FLUSH PRIVILEGES;
- 在应用 .env 或 database.php 中配置连接(开发/单库):DB_TYPE=mysql DB_HOST=主库IP DB_NAME=tp DB_USER=tp DB_PWD=StrongPass! DB_PORT=3306
- 可选 HTTPS:sudo apt install certbot python3-certbot-nginx & & sudo certbot --nginx -d your.domain 以上步骤覆盖了在 Debian 上搭建 ThinkPHP 生产环境的关键环节(PHP-FPM、Nginx 重写、目录权限、HTTPS 等)。
数据库主从与读写分离
- 主库 my.cnf(示例):
- [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=tp
- 从库 my.cnf(示例):
- [mysqld] server-id=2 replicate-do-db=tp
- 主库创建复制账号并授权:CREATE USER ‘repl’@‘%’ IDENTIFIED BY ‘ReplPass!’; GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’; FLUSH PRIVILEGES;
- 初始化数据后,在从库执行:
- STOP SLAVE;
- CHANGE MASTER TO MASTER_HOST=‘主库IP’, MASTER_USER=‘repl’, MASTER_PASSWORD=‘ReplPass!’, MASTER_LOG_FILE=‘mysql-bin.000001’, MASTER_LOG_POS=位置;
- START SLAVE;
- 检查:SHOW SLAVE STATUS\G,确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes
- ThinkPHP 读写分离(以 TP5 为例,TP6/8 使用对应的多库配置方式):
- 在 database.php 中启用分布式与读写分离:
- ‘deploy’ => 1,
- ‘rw_separate’ => true,
- ‘master’ => [‘type’=> ‘mysql’,‘hostname’=> ‘主库IP’,‘database’=> ‘tp’,‘username’=> ‘tp’,‘password’=> ‘StrongPass!’,‘hostport’=> ‘3306’],
- ‘slave’ => [ [‘hostname’=> ‘从库IP’,‘database’=> ‘tp’,‘username’=> ‘tp’,‘password’=> ‘StrongPass!’,‘hostport’=> ‘3306’], ]
- 在 database.php 中启用分布式与读写分离:
- 说明:主从用于高可用与读扩展;写操作始终走主库,读操作可分摊到从库。上线前在从库验证数据一致性与复制延迟。
负载均衡与会话共享
- Nginx 作为四层/七层负载均衡(/etc/nginx/conf.d/lb.conf):
- upstream tp_backend { least_conn; server 10.0.0.11:80 max_fails=3 fail_timeout=30s; server 10.0.0.12:80 max_fails=3 fail_timeout=30s; keepalive 32; } server { listen 80; server_name your.domain; location / { proxy_pass http://tp_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 会话共享(推荐 Redis):
- 安装与启动:sudo apt install -y redis-server
- ThinkPHP 配置(以 TP5 为例,TP6/8 使用对应的 Cache 配置):
- ‘session’ => [ ‘type’ => ‘redis’, ‘host’ => ‘10.0.0.20’, ‘port’ => 6379, ‘prefix’ => ‘tp_sess_’, ],
- ‘cache’ => [ ‘type’ => ‘redis’, ‘host’ => ‘10.0.0.20’, ‘port’ => 6379, ‘prefix’ => ‘tp_cache_’, ]
- 静态资源与上传:
- 方案 A:NFS 共享目录(/var/www/shared/uploads 挂载到各应用节点的 public/uploads)
- 方案 B:对象存储(如 OSS/S3,通过 SDK 上传,避免节点写入不一致)
- 日志与排错:
- 统一访问日志到 rsyslog/ELK;应用与 PHP-FPM 错误日志分别记录;负载均衡开启健康检查与失败重试。
上线检查清单
- 路由与重写:确认 Nginx try_files 与 PATH_INFO 兼容;访问不存在的路由应回退到 index.php。
- 目录与权限:runtime、日志、上传目录对 www-data 可写;禁止访问敏感文件(.env、.ht*)。
- 连接与超时:数据库连接池与超时合理;FPM 进程数、请求超时与负载均衡超时匹配。
- 安全:仅开放 80/443;数据库与 Redis 禁止公网直连;使用强口令与最小权限;开启 HTTPS/HSTS。
- 监控与告警:节点存活、复制延迟、慢查询、502/504 错误、磁盘与 QPS 监控与阈值告警。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian如何部署ThinkPHP的集群环境
本文地址: https://pptw.com/jishu/762053.html
