跳转到内容

安装 AngusTester

注意

  1. 安装和运行AngusTester应用之前,需要先安装并运行AngusGM基础应用。
  2. 以下是针对Enterprise安装过程说明,如果需要安装其他版本,将版本类型标志Enterprise替换成CommunityDatacenter即可。

一、前置要求

  • 系统要求

    • 操作系统:支持 Linux / MacOS / Windows Server。
    • 计算资源:最小配置要求 2核CPU、4GB内存,推荐配置 4核CPU、8GB内存
    • 磁盘空间:最小 10GB 可用空间,推荐配置 100GB
  • 运行环境

    • 手动配置安装:需要配置 OpenJDK 17+,默认会自己安装。
    • Docker 和 Compose 部署:需要安装 Docker,推荐版本 V20.10+
  • 中间件

    • 数据库:需要 MySQL 5.7+。
    • Redis 缓存:需要 Redis 7.0+。
  • 应用版本

    • 社区版本(Community):永久免费版本。
    • 企业版本(Enterprise):收费版本,需要获取许可。支持更多高级功能,支持更多用户。
    • 数据中心版本(Datacenter):收费版本,需要获取许可。支持更多高级功能,支持多租户和更多用户。

二、手动配置安装

1. 下载并解压

bash
# 下载安装包
curl -LO https://nexus.xcan.cloud/repository/release/package/AngusTester-Enterprise-1.0.0.zip

# 解压安装包至目标目录
mkdir -p /opt/AngusTester
unzip -qo AngusTester-Enterprise-1.0.0.zip -d /opt/AngusTester

# 进入到安装目录
cd /opt/AngusTester

2. 配置应用

bash
# 复制配置模版文件
cp conf/.priv-template.env conf/.priv.env

# 编辑配置文件
vi conf/.priv.env

修改下面选项为你的配置:

dotenv
# 初次安装或重新安装时需要设置成`AngusTester`,安装后会自动清除
INSTALL_APPS=AngusTester
# 指定安装数据库类型、必须参数
DATABASE_TYPE=MYSQL

# 应用程序IP(v4)或主机名。未配置时,自动获取运行环境的IPv4地址
# 注意:在docker环境中,必须指定为宿主机IP地址
TESTER_HOST=
# 应用程序端口,默认值为`8901`
TESTER_PORT=8901
# 配置Web站点访问地址,格式为:`http(s)://域名或IP+端口`,不指定会时会自动设置成:`http://GM_HOST:GM_PORT`
GM_WEBSITE=

# 管理员名称、可选参数
GM_ADMIN_FULL_NAME=
# 管理员邮箱地址、可选参数
GM_ADMIN_EMAIL=
# 管理员用户名,不指定时会自动设置成`admin`
GM_ADMIN_USERNAME=admin
# 管理员密码,不指定时会自动设置成`admin@123`
GM_ADMIN_PASSWORD=admin@123

# 数据库IP或主机名、必须参数
GM_DB_HOST=127.0.0.1
# 数据库端口、必须参数
GM_DB_PORT=3306
# 数据库名称、必须参数
GM_DB_NAME=angus
# 数据库用户名,该用户必须授权所有Angus数据库权限、必须参数
GM_DB_USER=Angus
# 数据库密码、必须参数
GM_DB_PASSWORD=Angus123

# Redis实例部署类型、必须参数
REDIS_DEPLOYMENT=SINGLE
# Redis实例IP或主机名、必须参数
REDIS_HOST=127.0.0.1
# Redis实例端口、必须参数
REDIS_PORT=6379
# Redis实例密码、必须参数
REDIS_PASSWORD=Angus123

# 配置angustester访问域名,可选参数
TESTER_WEBSITE=
# ------------------------

注意

  1. 以上配置除了INSTALL_APPSTESTER_WEBSITE,其他配置选项应该和配置AngusGM应用选项保持一致。
  2. 更多其他配置选项和说明请查看下面配置参考->应用配置

3. 启动应用

bash
# 运行启动命令
./startup-tester.sh

# 查看启动日志
tail -f -n1000 logs/tester.log

注意

  1. 该脚本是以后台进程启用应用,自动安装和启动大约需要2分钟,具体执行信息请查看 logs 日志文件内容。
  2. 如果需要Nginx代理AngusTester应用,或通过Nginx虚拟服务器方式给应用配置域名,请查看下面配置参考->Nginx代理配置

三、Docker方式安装

1. 准备安装目录与权限配置

bash
# 创建主安装目录(必需步骤,用于后续挂载)
mkdir -p /opt/AngusTester 

# 进入安装目录进行操作
cd /opt/AngusTester

# 创建应用所需的子目录结构(配置文件、数据、日志等)
mkdir -p {data,logs,plugins,tmp}

# 设置目录权限(确保容器用户有读写权限)
# 注意:生产环境建议使用更精细的权限控制(如 chown 1000:1000)
chmod -R 777 /opt/AngusTester

2. 获取镜像与初始化配置

bash
# 从 Docker Hub 拉取官方企业版镜像
docker pull xcancloud/angustester-enterprise:1.0.0

# 临时运行容器,将默认配置文件导出到宿主机目录
# 此步骤仅需执行一次,用于初始化配置模板
docker create --name temp_container xcancloud/angustester-enterprise:1.0.0
docker cp temp_container:/opt/AngusTester/default-conf conf
docker rm -f temp_container

# 基于模板创建私有环境配置文件
cp conf/.priv-template.env conf/.priv.env

# 编辑配置文件,设置数据库连接、Redis等关键参数
# 配置内容与 "手动配置安装 -> 配置应用" 中相同
vi conf/.priv.env

3. 启动应用容器

bash
# 启动应用容器(后台守护进程模式)
# 重要前提条件:
#   1. 数据库服务已部署并正常运行
#   2. Redis 服务已部署并正常运行
#   3. conf/.priv.env 文件已正确配置上述服务连接信息
docker run \
  --name angustester -d \
  -p 8901:8901 \
  -p 6806:6806 \
  -v ./conf:/opt/AngusTester/conf \
  -v ./data:/opt/AngusTester/data \
  -v ./logs:/opt/AngusTester/logs \
  -v ./plugins:/opt/AngusTester/plugins \
  -v ./tmp:/opt/AngusTester/tmp \
  xcancloud/angustester-enterprise:1.0.0

参数说明:

参数作用
-d以后台模式(detached)运行容器
--name angustester为容器指定名称 angustester(便于后续管理操作)
-p 8901:8901应用端口映射:将主机 8901 端口绑定到容器 8901 端口(格式:主机端口:容器端口
-p 6806:6806内嵌请求代理服务(AngusProxy)端口映射:将主机 6806 端口绑定到容器 6806 端口(格式:主机端口:容器端口
-v ./conf:/opt/AngusTester/conf配置文件挂载:主机目录 ./conf → 容器目录 /opt/AngusTester/conf
-v ./data:/opt/AngusTester/data应用数据挂载:主机目录 ./data → 容器目录 /opt/AngusTester/data
-v ./logs:/opt/AngusTester/logs日志文件挂载:主机目录 ./logs → 容器目录 /opt/AngusTester/logs
-v ./plugins:/opt/AngusTester/plugins插件目录挂载:主机目录 ./plugins → 容器目录 /opt/AngusTester/plugins
-v ./tmp:/opt/AngusTester/tmp临时文件挂载:主机目录 ./tmp → 容器目录 /opt/AngusTester/tmp
xcancloud/angustester-enterprise:1.0.0指定要运行的镜像名称及标签(格式:仓库/镜像名:标签

四、Docker Compose方式安装

仅安装AngusGM应用

重要提示

  • 此部署方案专为使用独立中间件(MySQL/Redis)的场景设计
  • 应用启动前必须确保:
    • MySQL/Redis 服务已部署完成
    • 数据库服务处于正常运行状态
    • AngusGM处于正常运行状态
    • 网络连通性已验证(容器可访问中间件)

1)、准备安装目录与权限配置

配置过程和Docker方式安装 -> 准备安装目录与权限配置 相同。

2)、获取镜像与初始化配置

配置过程和Docker方式安装 -> 获取镜像与初始化配置 相同。

3)、创建并配置 tester.yml 文件

bash
cat << EOF > tester.yml
services:
  angustester:
    image: xcancloud/angustester-enterprise:1.0.0
    container_name: angustester
    restart: unless-stopped
    volumes:
      - ./conf:/opt/AngusTester/conf
      - ./data:/opt/AngusTester/data
      - ./logs:/opt/AngusTester/logs
      - ./plugins:/opt/AngusTester/plugins
      - ./tmp:/opt/AngusTester/tmp
    ports:
      - "8901:8901"
      - "6806:6806"
    environment:
      TZ: ${TIMEZONE:-UTC}
EOF

4)、启动应用容器

bash
# 启动容器
docker compose -f tester.yml up -d
# 查看实时日志
docker compose -f tester.yml logs -f

安装完整应用和中间件

重要提示

  • 完整安装包括:Nginx、MySQL、Redis、AngusGM、AngusTester
  • 此方案包含全套服务,使用Nginx配置虚拟主机,须提前配置好访问域名(如无域名可使用 IP)
  • 对于MySQL和Redis,为了安全,务必修改默认密码为高强度密码
  • 如需 HTTPS 访问,准备有效证书,并修改SSL证书相关配置,配置文件路径为./templates/nginx/gm.conf./templates/nginx/tester.conf
  • 该安装方式下,AngusGM会自动初始化默认配置,如果需要修改默认参数,对应修改路径为./templates/gm/.priv.env./templates/tester/.priv.env

1)、下载并解压

bash
# 下载安装包
curl -LO https://nexus.xcan.cloud/repository/release/compose/AngusTester-Enterprise-1.0.0.zip

# 解压安装包至目标目录
mkdir -p /opt/AngusTester
unzip -qo AngusTester-Enterprise-1.0.0.zip -d /opt/AngusTester

2)、配置应用参数

bash
# 进入到安装目录
cd /opt/AngusTester

# # 创建应用所需的子目录结构
mkdir -p {nginx/conf.d,nginx/logs,mysql/data,mysql/conf,redis/data}
mkdir -p gm/{data,logs,plugins,tmp}
mkdir -p tester/{data,logs,plugins,tmp}

# 编辑环境配置文件
vi .env

# 示例配置内容:
##############应用配置##############
# 应用服务器IP
APP_HOST=192.168.3.7
# 数据库名称
APP_DATABASE_NAME=angus
# 系统时区
TIMEZONE=Asia/Shanghai
# AngusGM 访问域名(或IP)
NGINX_GM_DOMAIN=my-gm.xcan.cloud
# AngusTester 访问域名(或IP)
NGINX_GM_DOMAIN=my-tester.xcan.cloud

##############安全凭证##############
# MySQL root密码(务必修改!)
MYSQL_ROOT_PASSWORD=Angus123
# Redis密码(务必修改!)
REDIS_PASSWORD=Angus123

3)、启动应用容器

bash
# 启动容器
docker compose -f tester-full.yml up -d
# 查看实时日志
docker compose -f tester-full.yml logs -f

五、部署验证

  1. 查看运行日志
bash
tail -f /opt/AngusTester/logs/tester.log

预期输出:Application started successfully [PID=21601] and Http(s) port 8901 is ready,表示启动成功。

  1. 健康检查端点验证
bash
curl http://localhost:8901/actuator/health

预期输出:{"status":"UP"},表示启动成功。

  1. 登录验证
  • 访问地址:http://<部署IP>:8901http://<部署域名>
  • 使用 AngusGM 中用户登录系统,在左侧顶部应用导航器中进入 angustester,表示安装部署成功。

六、应用管理

  • Linux/MacOS
bash
# 启动应用
./startup-tester.sh
# 停止应用
./shutdown-tester.sh
# 查看应用日志
tail -f logs/tester.log
  • Docker
bash
# 启动应用
docker start angustester
# 停止应用
docker stop angustester
# 查看应用日志
docker logs angustester
  • Docker Compose
bash
# 启动应用
docker compose -f tester-full.yml up -d
# 停止应用
docker compose -f tester-full.yml stop
# 查看应用日志
docker compose -f tester-full.yml logs

七、故障排查

1. 常见问题

  • 问题:端口冲突

    • 错误示例:Error: Port 8901 already in use
    • 解决方案:修改 GM_PORT 参数或终止占用端口的进程。
  • 问题:数据库连接失败

    • 错误示例:Connection refused to MySQL at 127.0.0.1:3306
    • 解决方案:检查网络连通性、防火墙规则及数据库凭证。

2. 日志分析

  • 日志路径
    1. 查看运行日志文件:/opt/AngusTester/logs/tester.log
    2. 查看错误日志文件:/opt/AngusTester/logs/tester-error.log
  • 关键检索词ERRORConnection refused

3. 技术支持

  • 联系邮箱:technical_support@xcan.cloud
  • 邮件要求:附错误日志截图及环境信息(如:部署方式、版本号等)。

八、配置参考

应用配置(.priv.env)

ini
#-----------------------------------------------------------------------------------
# 安装配置
#-----------------------------------------------------------------------------------
## 启用应用程序自动初始化安装选项,默认开启,成功安装后会自动关闭。
## 重要:启用重安装会导致数据库数据丢失
INSTALL_APPS=AngusTester
## 安装部署类型,默认为 SHARED,支持选项:
##   - SHARED: 共享安装,所有应用共用同一数据库
##   - STANDALONE: 独立安装,每个应用使用独立数据库
## 注意:共享安装时,其他应用将与全局管理应用共享数据库配置(即共用gm.env中的配置);
##       独立安装时,每个应用需单独配置独立数据库
INSTALL_TYPE=SHARED
## 数据库类型,默认 `MYSQL`,支持选项:MYSQL, POSTGRES
DATABASE_TYPE=MYSQL
## 应用部署运行环境,默认 `HOST`,支持选项:CONTAINER (Docker/Kubernetes), HOST(物理机/虚拟机)
RUNTIME=HOST
## 应用与数据库时区配置
TIMEZONE=Asia/Shanghai
## 最大上传文件大小,默认值 1000MB
MAX_UPLOAD_FILE_SIZE=1000MB
## 最大上传请求大小(限制批量上传多文件总大小),默认值 2000MB
MAX_UPLOAD_REQUEST_SIZE=2000MB

#-----------------------------------------------------------------------------------
# AngusGM 应用配置
#-----------------------------------------------------------------------------------
## 应用IP(v4)或主机名。未配置时自动获取运行环境IPv4地址
GM_HOST=
## 应用端口,默认值 `8802`
GM_PORT=8802
## 关联网站域名URL。若为空则设置为 http://GM_HOST:GM_PORT,示例值:https://gm.xcan.cloud
GM_WEBSITE=
## SaaS云服务API接口地址,用于从云端获取数据
GM_CLOUD_APIS_URL_PREFIX=https://bj-c1-prod-apis.xcan.cloud/gm
## 自托管服务API接口地址,用于读取当前托管服务数据。若为空则设置为 http://GM_HOST:GM_PORT
GM_APIS_URL_PREFIX=

#-----------------------------------------------------------------------------------
# AngusGM 数据库配置
#-----------------------------------------------------------------------------------
## 数据库IP或主机名,默认值 `127.0.0.1`
GM_DB_HOST=127.0.0.1
## 数据库端口,默认值 `3306`
GM_DB_PORT=3306
## 数据库名称,默认值 `Angus`
GM_DB_NAME=angus
## 数据库认证用户名,默认值 `root`
GM_DB_USER=root
## 数据库认证用户密码,默认值 `Angus123`
GM_DB_PASSWORD=Angus123

#-----------------------------------------------------------------------------------
# AngusTester 应用配置
#-----------------------------------------------------------------------------------
## 应用IP(v4)或主机名。未配置时自动获取运行环境IPv4地址
TESTER_HOST=
## 应用端口,默认值 `8901`
TESTER_PORT=8901
## 关联网站域名URL。若为空则设置为 http://TESTER_HOST:TESTER_PORT,示例值:https://tester.xcan.cloud
TESTER_WEBSITE=
## 应用Web静态资源目录,默认值 `classpath:/static/,file:./statics/`
TESTER_WEB_STATICS=classpath:/static/,file:./statics/
## 指定加载插件(配置时仅加载指定插件,未配置时加载所有插件)
TESTER_PLUGIN_LOADED=import-openapi-plugin
## 指定忽略插件(配置时忽略指定插件,未配置时加载所有插件,设为 * 时忽略所有插件)
TESTER_PLUGIN_IGNORED=
## 指定Mock服务连接AngusTester服务地址。若为空则设置为 http://TESTER_HOST:TESTER_PORT
TESTER_APIS_SERVER_URL=

#-----------------------------------------------------------------------------------
# AngusTester 数据库配置
#-----------------------------------------------------------------------------------
## 注意:共享安装(INSTALL_TYPE=SHARED)时,AngusTester将使用AngusGM应用的数据库配置
## 数据库IP或主机名,默认值 `127.0.0.1`
TESTER_DB_HOST=127.0.0.1
## 数据库端口,默认值 `3306`
TESTER_DB_PORT=3306
## 数据库名称,默认值 `Angus`
TESTER_DB_NAME=angus
## 数据库认证用户名,默认值 `root`
TESTER_DB_USER=root
## 数据库认证用户密码,默认值 `Angus123`
TESTER_DB_PASSWORD=Angus123

#-----------------------------------------------------------------------------------
# AngusTester 节点代理(AngusAgent)服务配置
#-----------------------------------------------------------------------------------
## Agent服务端口,默认值 `5036`
AGENT_REMOTING_SERVER_PORT=5035
## Agent向节点代理客户端发送消息超时时间,默认 `60s`
AGENT_REMOTING_SEND_TIMEOUT=60000
## Agent服务连接检查心跳间隔,默认 `30s`
AGENT_REMOTING_ALLOW_MAX_HEARTBEAT_INTERVAL=30000

#-----------------------------------------------------------------------------------
# AngusTester 节点代理(AngusAgent)安装脚本配置
#-----------------------------------------------------------------------------------
## Agent包与安装脚本下载URL前缀,用于界面自动化安装
AGENT_CLOUD_STORAGE_APIS_PREFIX=https://bj-c1-prod-files.xcan.cloud
## 要安装的Agent版本
AGENT_VERSION=1.0.0
## Agent安装包文件ID
AGENT_FILE_ID=297761877096661000
## Linux Agent自动安装脚本ID
AGENT_LINUX_INSTALL_SCRIPT_ID=297761877096660998
## Windows Agent自动安装脚本ID
AGENT_WINDOWS_INSTALL_SCRIPT_ID=245588291569582089

#-----------------------------------------------------------------------------------
# AngusTester 请求代理(AngusProxy)配置
#-----------------------------------------------------------------------------------
## 启动AngusTester时是否同时启动嵌入API请求代理服务
## 默认开启,独立部署时应禁用
PROXY_STARTUP_IN_TESTER=true

#-----------------------------------------------------------------------------------
# Redis 配置
#-----------------------------------------------------------------------------------
## Redis部署模式,默认为 SINGLE,支持选项:SINGLE (单实例), SENTINEL (哨兵模式), CLUSTER (集群模式)
REDIS_DEPLOYMENT=SINGLE
## 单实例模式Redis的IP或主机名,默认值 `127.0.0.1`
REDIS_HOST=localhost
## 单实例模式Redis端口,默认值 `6379`
REDIS_PORT=6379
## Redis认证密码,默认值 `Angus123`(启用Redis安全认证时必需)
REDIS_PASSWORD=Angus123
## 哨兵模式主节点名称,配置示例:mymaster
REDIS_SENTINEL_MASTER=
## 哨兵/集群模式Redis实例列表,配置示例:192.168.0.100:6379,192.168.0.101:6379,192.168.0.102:6379
REDIS_NODES=

#-----------------------------------------------------------------------------------
# Eureka 配置
#-----------------------------------------------------------------------------------
## 配置Eureka服务器和仪表盘用户名密码,默认仪表盘地址 http://GM_HOST:GM_PORT/eureka-dashboard
EUREKA_USER_NAME=eureka
EUREKA_USER_PASSWORD=eureka

#-----------------------------------------------------------------------------------
# OAuth2.0 客户端配置
#-----------------------------------------------------------------------------------
OAUTH2_INTROSPECT_CLIENT_ID=client-credentials-introspect-client
OAUTH2_INTROSPECT_CLIENT_SECRET=secret

#-----------------------------------------------------------------------------------
# 关闭不受信自签SSL证书验证
#-----------------------------------------------------------------------------------
DISABLE_SSL_VERIFICATION=false

Nginx虚拟主机配置

  • nginx.conf
nginx
worker_processes  auto;
error_log  /var/log/nginx/error.log;

events {
    worker_connections  1024;
    multi_accept on;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile       on;
    tcp_nopush     on;
    keepalive_timeout  65;

    # Set security header
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    add_header X-XSS-Protection "1; mode=block";

    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    limit_conn conn_limit 100;

    gzip on;
    gzip_min_length 100k;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
}
  • gm.conf
nginx
server {
    listen 80;
    server_name my-gm.xcan.cloud;

    # Health check endpoint
    location = /health {
        access_log off;
        return 200 "OK";
    }

    # Caching static files
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
         proxy_pass http://192.168.3.7:8802;
         expires 1d;
         add_header Cache-Control "public, max-age=86400, immutable";
         access_log off;
    }

    location /ws/ {
         proxy_pass http://192.168.3.7:8802;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         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;
         proxy_read_timeout 86400s;
         proxy_send_timeout 86400s;
    }

    location / {
         proxy_pass http://192.168.3.7:8802;
         proxy_set_header Priority "";
         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;
         proxy_connect_timeout 10s;
         proxy_read_timeout 300s;
         proxy_send_timeout 300s;
    }
}
  • tester.conf
nginx
server {
    listen 80;
    server_name my-tester.xcan.cloud;

    # Health check endpoint
    location = /health {
        access_log off;
        return 200 "OK";
    }

    # Caching static files
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
         proxy_pass http://192.168.3.7:8901;
         expires 1d;
         add_header Cache-Control "public, max-age=86400, immutable";
         access_log off;
    }

    location /angusProxy {
        if ($request_method = OPTIONS){
          access_log off;
          return 200;
        }

        proxy_pass http://192.168.3.7:6806/angusProxy;
        proxy_http_version 1.1;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Referer $http_referer;
        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_connect_timeout 3d;
        proxy_read_timeout 3d;
        proxy_send_timeout 3d;
        proxy_socket_keepalive on;
        proxy_hide_header Vary;

        add_header 'Access-Control-Allow-Origin' * always;
        add_header 'Access-Control-Allow-Credentials' 'true' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE' always;
        add_header 'Access-Control-Allow-Headers' * always;
    }

    location / {
         proxy_pass http://192.168.3.7:8901;
         proxy_set_header Priority "";
         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;
         proxy_connect_timeout 10s;
         proxy_read_timeout 300s;
         proxy_send_timeout 300s;
    }
}

基于 GPL-3.0 许可发布