Skip to content

部署配置 ​

SurgePilot 将部署设置保存在根目录 .env 文件中。普通用户无需手工创建该文件: 官方启动命令会在首次运行时创建它、生成私有值、验证结果,并保留给后续启动使用。

选择正确的模板 ​

SurgePilot 有意提供两个模板,因为 Release 和源码生命周期在网络、Runtime 和构建方面 有不同要求。

部署方式仓库中的模板常用命令
Tagged Releaseinfra/release/.env.example,安装后以 .env.example 位于 Release 目录surgepilot up 或 ./surgepilot up
源码 Checkout根目录 .env.examplemake start-full-stack 或 make start-preview

不要用一个模板覆盖另一个模板。Release 模板要求最终的 Node-Facing LAN Origin 和 Secure Cookie 意图。源码模板包含开发端口、源码构建 Mirror 和本地生成的 Runtime 输入, 这些内容不属于 Release 部署。

.env 的管理方式 ​

  1. 如果缺少 .env,官方启动流程会复制正确模板、生成私有 Bootstrap 值,并写入 仅文件所有者可访问的部署状态。
  2. 如果 .env 已存在,启动流程会将其视为权威来源,不会覆盖、轮换或修复现有值。
  3. 通过进程环境显式提供的 Bootstrap 值只会在首次创建时持久化。后续启动时提供冲突值 会失败关闭。
  4. Release 首次运行会询问 Host 和两个发布端口,然后持久化最终的 API 与 InfluxDB Node-Write Origin。后续交互式启动时,在配置确认中回答 No,只能更新这四个网络字段。
  5. 源码启动不使用 Release 重配置流程。如需覆盖,请有意识地编辑源码 .env。

手工修改后,Release 运行 surgepilot up,正在运行的源码技术栈运行 make restart-full-stack。两种方式都会在启动服务前验证实际配置。

保持生成的 Secret 稳定

不要通过编辑 .env 轮换部署 Secret。特别是,丢失或修改 SSH 凭据加密密钥会导致 已存储的 Load Node 凭据无法读取。已有数据库和对象存储 Volume 也会保留初始化时使用的身份。

如何阅读配置参考 ​

  • 无需配置表示生成值或模板值适合普通使用。
  • 首次运行表示 Release Prompt 会提供部署专用值。
  • 按需配置表示只在所述部署模式下修改。
  • 高级配置表示没有明确运维原因和重启计划时应保持不变。
  • 托管值表示由官方启动或 Runtime 命令提供,正常使用时不要手工持久化。
  • 不存在表示该模板不提供此设置。

启动和网络设置 ​

变量Release源码是否配置?含义
COMPOSE_PROJECT_NAMEsurgepilotsurgepilot无需配置。 Docker Compose 资源命名空间。修改它会选择另一套技术栈和另一组 Named Volume。
SURGEPILOT_HTTP_PORT80808080Release 首次运行;源码按需配置。 Nginx 为 Web UI、API 和 Grafana 路径发布的主机端口。请选择空闲端口。
POSTGRES_HOST_PORT不存在5432仅源码,按需配置。 源码 PostgreSQL 服务发布的主机端口。Release PostgreSQL 不会对外发布。
SURGEPILOT_API_HOST_PORT不存在8000仅源码,按需配置。 源码 API Container 的直连主机端口,与常规 Nginx 入口相互独立。
DEFAULT_WORKSPACE_NAMEDefault WorkspaceDefault Workspace按需配置。 首位 Admin 创建初始 Workspace 时使用的名称,不会重命名已有 Workspace。
SURGEPILOT_NODE_API_BASE_URL有效 LAN 示例,首次运行时替换注释示例Release 首次运行;源码外部节点按需配置。 Load Node 可访问的最终 API Origin。缺少该值时,源码 Demo 使用 Compose 内部 Origin。DB 中的 System Setting 可以覆盖应用 Fallback。
SURGEPILOT_MONITORING_INFLUXDB_HOST_PORT80868086Release 首次运行;源码按需配置。 为已认证 Load Node 写入 InfluxDB 而发布的主机端口,必须与 HTTP 端口不同。
SURGEPILOT_MONITORING_INFLUXDB_NODE_WRITE_URL有效 LAN 示例,首次运行时替换注释示例Release 首次运行;源码外部节点按需配置。 Load Node 可访问的最终 InfluxDB Origin。请与 Node API Origin 一起设置。
SESSION_COOKIE_SECUREfalse不存在按需配置。 Release HTTP 模式要求为 false;由运维管理的 HTTPS 部署设为 true,并使用 HTTPS Node API Origin。
SURGEPILOT_DEMO_LOAD_NODE_ENABLEDfalsetrue按需配置。 启用可选的 Compose 内部 Demo Load Node。Release 默认关闭;源码完整技术栈默认开启;Preview 会在不重写 .env 的情况下强制关闭。
SURGEPILOT_RUNTIME_ARCHITECTURESamd64,arm64auto正常启动无需配置。 为 Load Node Runtime Asset 准备的架构。Release 首次运行保留两种受支持架构;源码 auto 选择 Docker Daemon 的原生架构。有效值为 auto、amd64、arm64 和 amd64,arm64。
APP_ENV不存在development仅源码直连主机开发。 选择应用环境默认值。官方 Compose 会提供固定值。
DATABASE_URL不存在本地 PostgreSQL URL仅源码直连主机开发。 make dev-api、make dev-worker 和 Compose 外迁移使用的数据库连接。官方 Compose 会提供内部 URL。
MINIO_ENDPOINT不存在http://localhost:9000仅源码直连主机开发。 Compose 外 API 进程使用的 MinIO Endpoint。官方 Compose 会提供内部 Endpoint。

部署身份、Secret 和 MinIO ​

变量模板值是否配置?含义
RUNNER_INTERNAL_TOKENPlaceholder 会替换为随机 Token托管值。 API 与 Runner 之间使用的共享内部认证材料。必须保持私有且稳定。
SSH_CREDENTIAL_ENCRYPTION_KEYPlaceholder 会替换为随机 Base64 Key托管值。 用于保存 Load Node 凭据的 AES-256-GCM Key。解码后必须恰好为 32 字节,并在复用数据库期间保持稳定。
MINIO_BUCKETsurgepilot无需配置。 Dependency File 和 Run Artifact 使用的对象存储 Bucket。
MINIO_ACCESS_KEYminioadmin内置服务无需配置。 API 侧 MinIO 访问身份,必须与内置部署中的 MinIO Root User 相同。
MINIO_SECRET_KEYPlaceholder 会替换为随机密码托管值。 API 侧 MinIO Secret,必须与内置部署中的 MinIO Root Password 相同。
MINIO_ROOT_USERminioadmin内置服务无需配置。 MinIO 初始化用户,必须与 Access Key 一致。
MINIO_ROOT_PASSWORD与 MinIO Secret 相同的生成值托管值。 MinIO 初始化密码,必须与 API 侧 Secret 一致。修改它不会重新初始化已有 MinIO Volume。
MINIO_REGION已注释高级配置,仅直连主机。 当 Endpoint 本身无法确定 Region 时,传给 MinIO Client 的可选 Region。官方 Compose 不传递该覆盖值。
MINIO_SECURE已注释,默认 false高级配置,仅直连主机。 当直连主机 MinIO Endpoint 不含 Scheme 时启用 TLS。显式 https Endpoint 已经会选择 TLS。

Monitoring Bootstrap 和链接 ​

变量模板值是否配置?含义
SURGEPILOT_MONITORING_INFLUXDB_USERNAMEsurgepilot普通首次运行无需配置。 InfluxDB 初始化用户名。不要期望修改后能重新初始化已有 Volume。
SURGEPILOT_MONITORING_INFLUXDB_PASSWORDPlaceholder 会替换为随机密码托管值。 InfluxDB 初始化密码。不能以 - 开头,否则 Setup CLI 会将其解析为 Flag。
SURGEPILOT_MONITORING_INFLUXDB_TOKEN_FILE_HOST示例路径会替换为私有生成文件托管值。 作为 InfluxDB Token Secret 挂载的主机路径。官方启动会创建私有 Token 文件,并为所选布局写入正确路径。
SURGEPILOT_MONITORING_INFLUXDB_ORGsurgepilot无需配置。 Setup、Backend Listener 和 Monitoring 链接使用的 InfluxDB Organization。
SURGEPILOT_MONITORING_INFLUXDB_BUCKETjmeter无需配置。 接收 Standard Run 指标的 InfluxDB Bucket。
SURGEPILOT_GRAFANA_ADMIN_USERadmin按需配置。 Grafana Bootstrap Admin 用户名。如需其他名称,请在 Grafana Volume 初始化前设置。
SURGEPILOT_GRAFANA_ROOT_URL已注释,Grafana 子路径表达式高级配置。 Grafana 在 /grafana/ 下提供服务时使用的 Server Root URL。模板值匹配内置 Proxy 布局。
SURGEPILOT_MONITORING_DASHBOARD_UID已注释,surgepilot-jmeter-13644高级配置。 用于构建预置只读 JMeter Dashboard 链接的 UID。只能与匹配的 Grafana Provisioning 一起修改。
SURGEPILOT_MONITORING_DASHBOARD_SLUG已注释,jmeter-load-test高级配置。 用于构建预置 Dashboard 链接的 Slug。只能与匹配的 Grafana Provisioning 一起修改。
SURGEPILOT_MONITORING_ENABLED已注释,直连主机 API 默认 false仅直连主机。 官方完整技术栈 Compose 会显式启用 Monitoring,因此该 .env 覆盖值不会禁用内置 Monitoring。
SURGEPILOT_MONITORING_INFLUXDB_TOKEN_CONFIGURED已注释,直连主机 API 默认 false仅直连主机。 告知直接启动的 API 是否已从外部配置 Monitoring Token 状态。官方 Compose 会提供正确值。
SURGEPILOT_MONITORING_GRAFANA_BASE_PATH已注释,/grafana仅直连主机。 生成 Grafana 链接使用的 Base Path。官方 Compose 将内置路径固定为 /grafana。
SURGEPILOT_MONITORING_TIME_PADDING_SECONDS已注释,60高级配置。 生成 Monitoring 链接时在 Run 时间范围前后增加的秒数。

InfluxDB 初始化用户名、密码、Organization 和 Bucket 不能以 - 开头,否则 InfluxDB Setup CLI 会将该值解析为 Flag。

源码 Runtime 和镜像构建设置 ​

这些设置仅存在于源码模板中。Tagged Release 会拉取锁定版本的应用镜像和经过验证的 Runtime Asset,而不是从源码构建。

变量模板值是否配置?含义
LOAD_NODE_RUNTIME_VERSION已注释托管值。 官方 Runtime Builder 写入生成的 runtime.env 状态中的 Runtime 版本。
LOAD_NODE_RUNTIME_ARTIFACT_HOST_DIR已注释的绝对路径示例托管值。 写入生成 Runtime 状态并以只读方式挂载到 API 服务的主机目录。
SURGEPILOT_SKIP_RUNTIME_PREFLIGHT已注释,1仅限高级手工/Debug。 跳过源码完整技术栈启动的 Runtime 准备。不会跳过部署 Bootstrap,也不保证 Load Node 或 Run 就绪。
RUNTIME_JMETER_SHA256已注释高级配置。 提供给源码 Runtime Builder、用于 JMeter 下载的可选预期 Checksum。
RUNTIME_CASUTG_SHA256已注释高级配置。 提供给源码 Runtime Builder、用于 Concurrency Thread Group Plugin 的可选预期 Checksum。
RUNTIME_JSON_SHA256已注释高级配置。 提供给源码 Runtime Builder、用于 JSONPath Plugin 的可选预期 Checksum。
RUNTIME_TST_SHA256已注释高级配置。 提供给源码 Runtime Builder、用于 Throughput Shaping Timer Plugin 的可选预期 Checksum。
RUNTIME_RANDOM_CSV_SHA256已注释高级配置。 提供给源码 Runtime Builder、用于 Random CSV Data Set Plugin 的可选预期 Checksum。
RUNTIME_INFLUXDB2_LISTENER_SHA256已注释高级配置。 提供给源码 Runtime Builder、用于 InfluxDB2 Listener Plugin 的可选预期 Checksum。
SURGEPILOT_PIP_INDEX_URL已注释的 Mirror 示例按需配置。 源码 Docker Build 和 Runtime Builder 使用的 Python Package Index。保持未设置会使用 Upstream 默认值。
SURGEPILOT_NPM_REGISTRY已注释的 Mirror 示例按需配置。 源码 Web 镜像构建使用的 npm Registry。保持未设置会使用 Upstream 默认值。
SURGEPILOT_DOCKER_BUILD_UBUNTU_APT_MIRROR已注释的无效示例按需配置。 仅在源码 Docker Build 期间使用的 Ubuntu Package Mirror。启用前请替换为真实 Mirror。
SURGEPILOT_DOCKER_BUILD_UBUNTU_APT_SECURITY_MIRROR已注释的无效示例按需配置。 仅在源码 Docker Build 期间使用的 Ubuntu Security Mirror。
SURGEPILOT_DOCKER_BUILD_DEBIAN_APT_MIRROR已注释的无效示例按需配置。 仅在源码 Docker Build 期间使用的 Debian Package Mirror。
SURGEPILOT_DOCKER_BUILD_DEBIAN_APT_SECURITY_MIRROR已注释的无效示例按需配置。 仅在源码 Docker Build 期间使用的 Debian Security Mirror。
VITE_API_BASE_URL已注释的直连 API 示例高级配置,仅源码构建。 Web Client 的 Build-Time Seed。内置 Web Runtime 使用同源 /api,普通部署保持未设置。

DB 支持的 System Setting Fallback ​

以下 .env 值只在对应数据库 System Setting 不存在时使用。普通策略修改应通过 Admin → System Settings 完成,而不是编辑 .env。修改环境 Fallback 后需要重启 部署才能加载;已有 DB 值仍然优先。

变量Fallback含义
ALLOW_SIGNUPtrue首位 Admin 之后的用户是否可以注册。Setup 未完成时,首位 Admin Bootstrap 始终可用。
DEPENDENCY_FILE_MAX_BYTES104857600Dependency File 上传大小上限,单位为字节。
DEPENDENCY_FILE_ALLOWED_EXTENSIONS空逗号分隔的 Allowlist。空表示不应用扩展名 Allowlist;文件名安全检查仍然生效。
DEPENDENCY_FILE_PREVIEW_MAX_BYTES65536单文件文本 Preview 返回的最大字节数。
DEPENDENCY_FILE_PREVIEW_BINARY_DENY_EXTENSIONS模板扩展名列表永远不会作为文本 Preview 呈现的逗号分隔扩展名。
SURGEPILOT_MAX_SCENARIO_ITEMS_PER_TEST_PLAN20一个 Test Plan 中启用的 Scenario Item 上限。
SURGEPILOT_SINGLE_NODE_CONCURRENCY_SOFT_LIMIT1000需要显式高并发确认的单节点并发阈值。
SURGEPILOT_MAX_RUN_DURATION_SECONDS86400配置的 Run 最大持续时间。
SURGEPILOT_MAX_RAMP_UP_SECONDS86400Ramp-Up 最大持续时间;不能超过实际 Run 持续时间限制。
SURGEPILOT_MAX_DELAY_SECONDS86400配置的最大启动延迟。
SURGEPILOT_MAX_ITERATIONS1000000Iteration-Based Load Model 的最大迭代次数。
SURGEPILOT_MAX_TARGET_RPS100000Load Model 验证允许的最大目标 RPS。这是配置上限,不代表性能承诺。
SURGEPILOT_MAX_SLA_RULES_PER_TEST_PLAN5Standard Test Plan 中启用的 SLA Rule 上限。
SURGEPILOT_JMETER_MEMORY_XMX4G写入执行配置的 JMeter 最大 Heap。有效值为正整数后跟 K、M 或 G。

高级运维 Guardrail ​

以下值已有应用和 Compose 默认值。除非实测行为证明需要修改,否则请保持注释状态。 修改后需要重启。

Load Node 初始化 ​

变量默认值含义
LOAD_NODE_INIT_COMMAND_TIMEOUT_SECONDS30Load Node 初始化期间单条命令的 Timeout。
LOAD_NODE_RUNTIME_INSTALL_TIMEOUT_SECONDS120在 Load Node 上安装 Runtime 的 Timeout。
LOAD_NODE_DEFAULT_RUNNER_HOME/opt/surgepilot/runnerLoad Node 未指定其他路径时使用的默认远程 Runner Home。
LOAD_NODE_SSH_CONNECT_TIMEOUT_SECONDS15Load Node 操作的 SSH 连接 Timeout。
LOAD_NODE_INIT_TIMEOUT_SECONDS120用于恢复过期初始化尝试和遗留在初始化状态节点的时间阈值。
LOAD_NODE_INIT_LOG_TAIL_BYTES65536为状态和失败报告保留的初始化日志 Tail 最大字节数。
LOAD_NODE_GENERATED_KEY_TYPEed25519SurgePilot 生成 Load Node Keypair 时使用的 SSH Key 类型。

Run 控制和 Artifact ​

变量默认值含义
SURGEPILOT_RUN_HEARTBEAT_TIMEOUT_SECONDS60Runner 接受后等待执行开始的最长时间,以及执行开始后的最大 Heartbeat 间隔。
SURGEPILOT_RUN_ACCEPTED_TIMEOUT_SECONDS120等待 Runner 接受远程请求 Allocation 的最长时间。
SURGEPILOT_RUN_STOP_GRACE_SECONDS60进入 Force-Kill 处理前,允许正常停止的 Grace Period。
SURGEPILOT_RUN_FORCE_KILL_SSH_TIMEOUT_SECONDS30Force-Kill 控制使用的 SSH Timeout。
SURGEPILOT_RUNNER_CALLBACK_RETENTION_DAYS30持久化 Runner Callback Record 的保留天数。
SURGEPILOT_RUN_CONTROL_STALE_SECONDS120已认领 Run-Control Work 被视为过期并进入恢复的时间。
SURGEPILOT_NODE_COOLDOWN_SECONDS300Force-Kill 后,该 Load Node 可以再次被分配前的 Cooldown Period。
SURGEPILOT_RUN_ARTIFACT_MAX_BYTES209715200普通 Run Artifact 可接受的最大大小。
SURGEPILOT_RUN_TERMINAL_LATE_ARTIFACT_MAX_BYTES1048576Run 已进入终态后可接受的最大 Artifact 大小。
SURGEPILOT_RUN_TERMINAL_LATE_ARTIFACT_SECONDS300Run 进入终态后,允许接受受限 Late Artifact 的时间窗口。
SURGEPILOT_SINGLE_NODE_CONCURRENCY_HARD_LIMIT10000单节点并发硬上限。不能通过确认绕过,也不能在 DB 中编辑。

API Catalog 和 Debug HTTP Trace ​

变量默认值含义
SURGEPILOT_API_CATALOG_SPEC_MAX_BYTES10485760上传 API Catalog Spec 的最大大小。
SURGEPILOT_DEBUG_TRACE_MAX_REQUESTS100一次 Debug HTTP Trace 保留的 Request Record 上限。
SURGEPILOT_DEBUG_TRACE_BODY_MAX_BYTES65536每条 Trace Record 内联保留的 Request 或 Response Body 最大字节数。
SURGEPILOT_DEBUG_TRACE_ARTIFACT_MAX_BYTES10485760接受并解析的 Debug HTTP Trace Artifact 最大大小。
SURGEPILOT_DEBUG_TRACE_RECORD_MAX_BYTES131072单条 Trace Record 的最大编码大小。
SURGEPILOT_DEBUG_TRACE_BODY_BLOB_MAX_BYTES5242880单个独立存储的 Trace Body Blob 最大大小。
SURGEPILOT_DEBUG_TRACE_BODY_BLOB_TOTAL_MAX_BYTES20971520单个 Trace Artifact 中独立存储的 Trace Body 总字节上限。

手工编辑之前 ​

  1. 确认该值属于 Release 模板还是源码模板。
  2. 如果设置标记为托管值,请停止修改。
  3. 保持 .env 的所有权和仅文件所有者可访问的权限。
  4. 永远不要提交 .env 或生成的 Secret 文件。
  5. 修改 Release 网络配置时,优先使用 surgepilot up 确认流程,而不是直接编辑。
  6. 修改后运行官方启动命令,并在服务启动前查看其实际配置摘要。

有关启动行为和支持的模式,请继续阅读 启动模式。产品术语请参阅 术语与常见问题。

本中文译文由 AI 辅助完成;如与英文版存在差异,请以英文版为准。