高并发newapi多实例部署+宝塔免费NGINX负载均衡配置,轻松10w RPM
6

newapi在性能服务器上,如何承载10w并发?如何配置?------多实例部署解决方案

  1. docker-compose.yml
    自行修改 SQL_DSNSESSION_SECRET CRYPTO_SECRET

    version: '3.8'
    
    services:
      # --- 主节点 (Master) ---
      # 负责初始化数据库表结构,并供管理员访问
      new-api-master:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-master
        restart: always
        ports:
          - "8807:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      # --- 从节点 (Slaves) ---
      # 用于处理所有公开的API请求
      new-api-slave-1:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-1
        restart: always
        ports:
          - "65500:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-2:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-2
        restart: always
        ports:
          - "65501:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-3:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-3
        restart: always
        ports:
          - "65502:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-4:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-4
        restart: always
        ports:
          - "65503:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-5:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-5
        restart: always
        ports:
          - "65504:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-6:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-6
        restart: always
        ports:
          - "65505:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-7:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-7
        restart: always
        ports:
          - "65506:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-8:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-8
        restart: always
        ports:
          - "65507:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      new-api-slave-9:
        image: calciumion/new-api-horizon:latest
        container_name: newapi-slave-9
        restart: always
        ports:
          - "65508:3000"
        volumes:
          - ./data:/data
          - ./logs:/app/logs
        depends_on:
          - redis
        environment:
          # --- 节点类型 ---
          NODE_TYPE: "master"
          # --- 1. 数据库和Redis ---
          SQL_DSN: "登录用户名:登陆密码@tcp(数据库连接ip:3306)/数据库名?parseTime=true&multiStatements=true"
          REDIS_CONN_STRING: "redis://redis:6379"
          SQL_MAX_OPEN_CONNS: 100
          SQL_MAX_IDLE_CONNS: 10
          REDIS_CONN_POOL_SIZE: 30
          # --- 2. 关键安全配置 ---
          SESSION_SECRET: "xxx"
          CRYPTO_SECRET: "xxx"
          # --- 3. 性能优化 ---
          BATCH_UPDATE_ENABLED: "true"
          BATCH_UPDATE_INTERVAL: 10
          MEMORY_CACHE_ENABLED: "true"
          TZ: "Asia/Shanghai"
    
      # --- Redis 服务 (共享) ---
      redis:
        image: redis:latest
        container_name: newapi-redis
        restart: always
        volumes:
         - ./redis_data:/data
    
    
    
  2. 宝塔面板NGINX配置负载均衡(非付费插件)

    1. 网站---新建PHP项目--master站域名/数据库不创建/PHP版本纯静态---确定
    2. 点击新建项目的设置---申请SSL证书部署---反向代理---添加反向代理---填写代理名称/master站访问url(http://127.0.0.1:8801)---确定
    3. 点击刚刚创建的反向代理配置文件---修改如下---保存
      #PROXY-START/
      
      location ^~ /
      {
      
          # 关键修改(1): 将请求转发到我们在全局配置中定义的 new_api_slaves 集群
          proxy_pass http://new_api_slaves;
      
          # 关键修改(2): 将原始的 Host 请求头传递给后端
          proxy_set_header Host $host;
      
          # 关键修改(3): 针对流式API的性能和兼容性优化
          proxy_http_version 1.1;
          proxy_set_header Connection "";
          proxy_buffering off;
      
          # 保留和优化其他 header
          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; # 告诉后端是http还是https
          proxy_set_header REMOTE-HOST $remote_addr;
      
          # 下面是宝塔默认的静态文件缓存策略,可以保留
          add_header X-Cache $upstream_cache_status;
          set $static_filep3Uw6OgJ 0;
          if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
          {
              set $static_filep3Uw6OgJ 1;
              expires 1m;
          }
          if ( $static_filep3Uw6OgJ = 0 )
          {
              add_header Cache-Control no-cache;
          }
      }
      
      #PROXY-END/
      
      
    4. 软件商店---已安装---NGINX设置---配置文件---将下面这个 upstream 代码块,完整地复制并粘贴到 http { 大括号的内部,通常可以放在 include luawaf.conf;include proxy.conf;上面
      upstream new_api_slaves {
          server 127.0.0.1:65500;
          server 127.0.0.1:65501;
          server 127.0.0.1:65502;
          server 127.0.0.1:65503;
          server 127.0.0.1:65504;
          server 127.0.0.1:65505;
          server 127.0.0.1:65506;
          server 127.0.0.1:65507;
          server 127.0.0.1:65508;
      }
      
  3. 测试是否正常:随意打开一个非master容器日志 docker logs -f 容器name 访问主站,可以看到有时有输出有时没有,说明部署成功

高并发newapi多实例部署+宝塔免费NGINX负载均衡配置,轻松10w RPM
http://152.53.84.24:8090/archives/1749654467557
作者
Administrator
发布于
更新于
许可