温馨提示×

如何在ubuntu上实现thinkphp的分布式部署

小樊
55
2025-08-13 19:07:49
栏目: 编程语言

在Ubuntu上实现ThinkPHP分布式部署可参考以下步骤,核心围绕负载均衡、共享存储、缓存等关键技术:

一、基础环境准备

  1. 安装Web服务器与PHP

    • 以Nginx为例:
      sudo apt update  
      sudo apt install nginx php-fpm php-mysql php-mbstring php-xml composer  
      
    • 配置PHP-FPM监听路径(如/run/php/php7.4-fpm.sock),确保与Nginx配置一致。
  2. 部署ThinkPHP项目

    • 上传项目至服务器指定目录(如/var/www/thinkphp),设置权限:
      sudo chown -R www-data:www-data /var/www/thinkphp  
      sudo chmod -R 755 /var/www/thinkphp  
      
    • 配置数据库连接(修改.env文件),确保多节点可访问同一数据库。

二、实现分布式核心组件

1. 负载均衡(流量分发)

  • Nginx负载均衡配置
    /etc/nginx/nginx.conf中添加上游服务器组,将请求分发到多个应用服务器:
    http {  
        upstream thinkphp_cluster {  
            server 192.168.1.101:80;  # 应用服务器1  
            server 192.168.1.102:80;  # 应用服务器2  
            least_conn;  # 按最少连接数分配  
        }  
    
        server {  
            listen 80;  
            server_name yourdomain.com;  
            location / {  
                proxy_pass http://thinkphp_cluster;  
                proxy_set_header Host $host;  
            }  
        }  
    }  
    
    重启Nginx生效:sudo systemctl restart nginx

2. 共享存储(文件/缓存)

  • 文件共享(如上传文件)

    • 使用NFS挂载共享目录:
      sudo apt install nfs-kernel-server  
      # 在主服务器上导出目录(/var/www/uploads)  
      echo "/var/www/uploads 192.168.1.0/24(rw,sync,no_subtree_check)" >> /etc/exports  
      sudo exportfs -a  
      sudo systemctl restart nfs-server  
      # 在其他服务器上挂载  
      sudo mount -t nfs 192.168.1.1:/var/www/uploads /var/www/uploads  
      
    • 或使用分布式文件系统(如GlusterFS)。
  • 缓存共享(Redis)

    • 安装Redis并配置集群模式(3节点以上):
      sudo apt install redis-server  
      # 配置redis.conf(bind 0.0.0.0,设置密码)  
      sudo redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 --cluster-replicas 1  
      
    • 在ThinkPHP中配置Redis缓存:
      // config/cache.php  
      'default' => 'redis',  
      'stores' => [  
          'redis' => [  
              'type' => 'redis',  
              'host' => '192.168.1.1',  
              'port' => 6379,  
              'password' => 'yourpassword',  
          ],  
      ],  
      ```。  
      
      

3. 会话管理(跨服务器共享)

  • 配置PHP使用Redis存储会话:
    # /etc/php/7.4/fpm/php.ini  
    session.save_handler = redis  
    session.save_path = "tcp://192.168.1.1:6379?auth=yourpassword"  
    
    重启PHP-FPM:sudo systemctl restart php7.4-fpm

三、高级优化与监控

  1. 容器化部署(可选)

    • 使用Docker+Kubernetes实现弹性伸缩:
      • 编写Dockerfile构建ThinkPHP镜像,通过docker-compose或Kubernetes Deployment部署多实例。
      • 配置Service实现负载均衡,使用ConfigMap管理环境变量。
  2. 监控与日志

    • 部署Prometheus+Grafana监控服务器状态,配置Nginx日志集中存储(如ELK Stack)。
  3. 安全配置

    • 启用HTTPS(Let’s Encrypt证书):
      sudo apt install certbot python3-certbot-nginx  
      sudo certbot --nginx -d yourdomain.com  
      
    • 限制敏感目录访问(如runtime):
      location ~* ^/(runtime|vendor) {  
          deny all;  
      }  
      ```。  
      
      

四、验证与维护

  • 通过curl或浏览器访问域名,检查负载均衡是否生效(多IP响应)。
  • 使用redis-cli或数据库客户端验证缓存和会话共享是否正常。
  • 定期备份数据库和共享文件,确保数据安全。

参考来源

0