Help us shape the future of Go! Take the 2026 Go Developer Survey

runtime

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 20, 2026 License: Apache-2.0 Imports: 40 Imported by: 0

Documentation

Overview

Package runtime 是 fleetlyd 的服务组装层(composition root):在 lynx App 之上,Wire 编译期装配出 boot.Bootstrap——配置解析与缺省回落 (config.go)、资源构造与释放(provides.go 的 provider 集)、入口面 (HTTP gateway/gRPC/git SSH)、写入者与资源层的服务壳(*_service.go, 注册序即停止序的三段不变量见 NewServices 注释),以及 schema-version 之外的全部守护进程形态。进程入口细节(flags、Runner 生命周期宿主、 cleanup 挂 OnPostStop、schema-version 子命令分派)留在 cmd/fleetlyd; 本包只面向 lynx.App 组装,不感知进程级细节。

Index

Constants

View Source
const (
	DefaultHTTPAddr = "127.0.0.1:8420"
)

DefaultHTTPAddr 是 HTTP 面的缺省监听地址(导出供 cmd/fleetlyd 的 -addr flag 缺省值与本包 NewConfig 回落共用——单一事实源):默认只绑回环, 避免控制面未配置时暴露公网(架构 §4.2 安全默认基线)。可用 -addr 覆盖,或经 -c config.yaml 中的 addr 键覆盖(显式 flag 优先于配置文件)。

defaultGRPCAddr 同为 gRPC 面缺省监听地址(仅包内消费:NewConfig 回落 与 gateway 转发目标推导),经 config.yaml 的 grpc.addr 配置。

Variables

ProviderSet 是 fleetlyd 的 Wire 依赖集(装配形态对齐 lynx _examples/boot:Bootstrap 聚合钩子与服务,cleanup 由 main 挂 OnPostStop)。

Functions

func Bootstrap

func Bootstrap(app lynx.App, version string) (*boot.Bootstrap, func(), error)

Bootstrap 组装控制面全部组件(wireBootstrap 的 Wire 编译期装配形态)。 version 是守护进程版本(构建期 ldflags 注入,见 Version 注释)。

返回的 cleanup 释放 DI 底层资源(store 连接池、底座客户端等)——调用方 挂 OnPostStop(晚于全部服务 Stop;排水期在途请求仍要用这些资源,挂载 语义见 cmd/fleetlyd main.go 注释)。

func NewAppsService

func NewAppsService(st *state.Store, sb *secrets.Box, cfg *AppConfig, m *ingress.Manager) *api.AppsService

NewAppsService 构造应用资源面服务(T2.17;T2.19 增补 webhook/git 触发 配置面——box 加密 webhook secret 与拉源认证材料,gitEndpoint 拼 remote 提示;H9 增补路由撤销端口——app 删除管线经 ingress.Manager 撤销路由)。

func NewAuthenticator

func NewAuthenticator(app lynx.App, cfg *AppConfig, st *state.Store) (*api.Authenticator, error)

NewAuthenticator 构造 API 认证器并承载 bootstrap 种子(装配期执行—— 失败 fail-fast 拒绝启动:鉴权面就绪是 API 面可用的前置)。cfg 提供 bootstrap token 文件路径(B5:<数据根>/bootstrap-token,数据根与 state 库同目录)。

func NewBackupManager

func NewBackupManager(app lynx.App, cfg *AppConfig, st *state.Store, sb *secrets.Box, version Version) (*statebackup.Manager, error)

NewBackupManager 构建状态备份管理器(T2.22:热备快照 + 回读校验 + manifest/台账 + 每日循环;backup.* 配置节,dir 缺省回落数据根下 backups/ ——主密钥分离性由构造期 fail-fast 守卫)。

func NewBuildQueue

func NewBuildQueue(app lynx.App, cfg *AppConfig, st *state.Store, b *build.Builder) *build.Queue

NewBuildQueue 构建构建队列调度器(信号量并发上限 + builds 行扫描认领 + per-build 超时预算 + 启动复位中断构建)。

func NewBuilder

func NewBuilder(cfg *AppConfig, st *state.Store, dc *substrate.Client, dm build.DaemonManager, app lynx.App) *build.Builder

NewBuilder 构建构建执行器(build.Builder:railpack/dockerfile 双驱动 + buildkit solve + 产物归档 + 执行前 buildkitd 就绪收敛)。镜像端口与容器 编排由 substrate.Client 隐式实现 build 包端口(适配器方向: substrate → build 核心接口)。

func NewBuildsService

func NewBuildsService(st *state.Store, q *build.Queue) *api.BuildsService

NewBuildsService 构造构建资源面服务(T2.18;A11/S18 增补队列接线—— TriggerBuild 经 Queue.Enqueue 入队,同进程触发立即唤醒扫描)。

func NewDaemonManager

func NewDaemonManager(sc *substrate.Client) build.DaemonManager

NewDaemonManager 以 substrate 客户端实现 build.DaemonManager 端口 (buildkitd 容器编排:镜像拉取/卷/容器幂等收敛)。

func NewDeploymentsService

func NewDeploymentsService(st *state.Store, src *gitserver.GitTriggers) *api.DeploymentsService

NewDeploymentsService 构造部署资源面服务(T2.17;T2.19 增补 DeployFromGit ——git 源端口由 internal/gitserver 实现,方向纪律:api 定义端口)。

func NewDockerClient

func NewDockerClient(sc *substrate.Client) (state.DockerClient, func(), error)

NewDockerClient 以 substrate 客户端实现 state.DockerClient 端口(连接 生命周期归 NewSubstrateClient 的 cleanup,此处不重复释放)。

func NewDomainsService

func NewDomainsService(st *state.Store, m *ingress.Manager) *api.DomainsService

NewDomainsService 构造域名台账/验证面服务。

func NewDrains

func NewDrains() boot.DrainHooks

func NewDriftService

func NewDriftService(st *state.Store, eng *engine.Engine) *api.DriftService

NewDriftService 构造漂移面服务(T2.18;复用引擎对账原语)。

func NewEngine

func NewEngine(app lynx.App, cfg *AppConfig, st *state.Store, sc *substrate.Client, pl *placement.Resolver, box *secrets.Box, m *ingress.Manager, bm *statebackup.Manager, lm *logs.Manager) *engine.Engine

NewEngine 构建发布引擎(T2-5a:状态机/对账/窗口语义;治理参数取 engine.* 配置节,缺省回落文档默认)。底座服务/任务面由 substrate.Client 隐式实现 engine.Substrate + engine.ImageChecker(适配器方向:substrate → engine 核心接口);路由发布端口由 ingress.Manager 经载荷适配实现(T2.15—— 健康门后挂点)。

func NewEnvService

func NewEnvService(st *state.Store, sb *secrets.Box, lm *logs.Manager) *api.EnvService

NewEnvService 构造平台 env 面服务(值加密边界在服务实现内)。H9:注入 env 写路径联动回调(set/remove 成功后即时失效日志脱敏值集,把 secret 明文采集暴露窗从 TTL 30s 收敛到单次重建)。

func NewEventsService

func NewEventsService(st *state.Store) *api.EventsService

NewEventsService 构造事件流面服务(seq 游标)。

func NewGRPCServer

func NewGRPCServer(
	app lynx.App,
	cfg *AppConfig,
	auth *api.Authenticator,
	apps *api.AppsService,
	deploys *api.DeploymentsService,
	revisions *api.RevisionsService,
	builds *api.BuildsService,
	drift *api.DriftService,
	domains *api.DomainsService,
	env *api.EnvService,
	logsSvc *api.LogsService,
	events *api.EventsService,
	placement *api.PlacementService,
	tokens *api.TokensService,
	gitkeys *api.GitKeysService,
	sys *api.SystemService,
) (*lynxgrpc.Server, error)

NewGRPCServer 创建控制面 gRPC 服务(lynx server/grpc,内置恢复/日志 拦截器、grpc.health.v1 与反射):注册 v0.1 全部服务面(T2.17/T2.20/ T2.18)。拦截链顺序 = auth(最外)→ rate limit → protovalidate(形状 校验,链尾)→ handler;流式(Follow/Watch)走 auth/ratelimit 流式拦截 器。服务必须在 Serve 之前注册(lynx Server 在 Start 时才 Serve,构造期 注册安全)。

func NewGitKeysService

func NewGitKeysService(st *state.Store) *api.GitKeysService

NewGitKeysService 构造 git 公钥管理面服务(T2.19;admin scope)。

func NewGitTriggers

func NewGitTriggers(cfg *AppConfig, st *state.Store, sb *secrets.Box, app lynx.App) *gitserver.GitTriggers

NewGitTriggers 构建 git 触发入口核心(T2.19:bare 仓库管理 + post-receive 钩子 + DeployFromCommit + webhook 验签/防重放/去重/拉源 + SSH 服务器)。 git.*/webhook.* 配置节经 AppConfig.GitSettings 翻译(缺省回落 internal/gitserver 单一事实源)。

func NewHTTPServer

func NewHTTPServer(app lynx.App, cfg *AppConfig, src *gitserver.GitTriggers) (*lynxhttp.Server, error)

NewHTTPServer 创建控制面 HTTP 服务:根 handler 是 grpc-gateway mux (REST /v1/** 经 gateway 反代到本进程 gRPC,见 newGatewayMux)外包原生 端点分派(newRootHandler——webhook、GET / 引导页与 Console /ui/ 静态 托管,例外清单见 gateway.go);/healthz/liveness 与 /healthz/readiness 由 lynxhttp.Server 自行挂载,与 gateway 路由共存(torchwood 同款双面 单端口形态)。Console 静态托管仅在 console.static_dir 非空时挂载(缺省 关闭),目录缺 index.html 时 fail-fast 拒绝启动。

M4-3:经 WithServerOptions 放宽 WriteTimeout(见 tuneHTTPServer——lynx 缺省 60s 绝对超时会静默掐断 /v1/events/stream 与 logs stream)。

func NewIngressManager

func NewIngressManager(app lynx.App, cfg *AppConfig, st *state.Store) (*ingress.Manager, func(), error)

NewIngressManager 构建入口/证书管理器(T2.15/T2.16:Traefik 部署 + 配置端点 + 集中 ACME;ingress.* 配置节,缺省回落 internal/ingress)。 docker 连接经 manager cleanup 释放(Wire cleanup,OnPostStop 时点)。

func NewJanitor

func NewJanitor(app lynx.App, st *state.Store, cfg *AppConfig) *state.Janitor

NewJanitor 构造保留期清理守护(事件/审计过期清理,周期可配)。 A7/A10(S18)扩展:部署 compose 目录 30 天窗、builds 终态行 90 天、 artifacts 目录 30 天保留窗与非终态超龄扫描(预算从 engine/build 配置 派生:2×(发布看门狗+观察窗)/ 2×构建超时)。

func NewLogsManager

func NewLogsManager(app lynx.App, cfg *AppConfig, st *state.Store, sc *substrate.Client, sb *secrets.Box, src *gitserver.GitTriggers) *logs.Manager

NewLogsManager 构建日志管线管理器(T2.20:采集/Follow/History/清理; logs.* 配置节,缺省回落 internal/logs)。底座端口由 substrate.Client 隐式实现 logs.Port(适配器方向:substrate → logs 核心接口)。B3:注入 git 触发面为补充脱敏值集供给(钩子 token 明文只在钩子文件)。

func NewLogsService

func NewLogsService(st *state.Store, mg *logs.Manager) *api.LogsService

NewLogsService 构造日志面服务(T2.20:Follow/History 接管线管理器)。

func NewNodeIdentity

func NewNodeIdentity(app lynx.App, st *state.Store, dc state.DockerClient) *state.NodeIdentity

NewNodeIdentity 构造节点身份管理器(平台节点 ID n_<ULID> 生成持久化 与 Swarm label 锚定,state-model §2.3)。

func NewObserver

func NewObserver(app lynx.App, st *state.Store, dc state.DockerClient) *state.Observer

NewObserver 构造节点观测缓存刷新器(30s 全量 resync + 事件驱动失效, 底座不可达置 stale + 指数退避)。

func NewPlacementResolver

func NewPlacementResolver(st *state.Store, dc state.DockerClient) *placement.Resolver

NewPlacementResolver 构造放置解析器(放置意图解析/绑定落库/卷登记/ 部署前哨;引擎 preparing 与 releasing 全程消费)。

func NewPlacementService

func NewPlacementService(st *state.Store) *api.PlacementService

NewPlacementService 构造放置绑定只读面服务。

func NewPostStops

func NewPostStops() boot.PostStopHooks

func NewPreStarts

func NewPreStarts(app lynx.App) boot.PreStartHooks

func NewPreStops

func NewPreStops(app lynx.App) boot.PreStopHooks

func NewRevisionsService

func NewRevisionsService(st *state.Store) *api.RevisionsService

NewRevisionsService 构造版本快照只读面服务。

func NewSecretsBox

func NewSecretsBox(app lynx.App, cfg *AppConfig) (*secrets.Box, error)

NewSecretsBox 初始化 envelope 主密钥(fail-fast:加载/权限/生成任一失败 拒绝启动——密钥是全部平台 env 密文的生命线,architecture §2.3)。首启 生成时日志明示妥善保存(与备份分离;丢失 = env 密文不可解)。装配期 完成即 fleetlyd 主密钥初始化语义;健康面由 secrets 服务壳 CheckHealth 持续上报。

func NewServiceFactories

func NewServiceFactories() []lynx.ServiceFactory

func NewServices

NewServices 聚合全部受托管服务。MG-4(X-3,B6)停止不变量——注册顺序 即停止顺序:lynx 把每个服务登记为 oklog/run actor,run.Group 在关停时 **按注册顺序逐个调用 interrupt**,而 lynx 的 interrupt 包壳阻塞在该服务 的 Stop 上——首注册者最先停。Start 则是并发触达(run.Group 为每个 actor 起 goroutine,无跨服务等待),不存在硬性启动顺序;Init 严格按注册序, 但全部 Init 相互独立(store 迁移在 wire 装配期完成,非 Init 阶段)。

三段停止不变量(顺序不可倒置):

  1. 入口面最先停(HTTP/gRPC/git SSH + webhook worker)——SIGTERM 后 立即拒绝新工作(连接排水),消灭「Deploy/TriggerBuild 仍假成功入队 但引擎/队列已死」的窗口。webhook worker 的排空也在本段:drain 中 处理的 job 写部署行,此时引擎已停、行只会排队待重启恢复——可接受;
  2. 写入者随后(build queue → engine → ingress → 日志采集)——入口已 关,写入者安心排空在途(队列认领、状态机 tick、路由发布、日志尾随)。 ingress 在 engine 之后保持原相对序(引擎 tick 触发发布时配置端点 已监听的弱偏置;Traefik 对配置端点不可达保留旧配置,先停无害);
  3. 资源层最后(identity/observer/janitor → backup → secrets → store) ——backup 必须晚于 engine:post-deploy 备份挂钩是引擎成功路径逸出 的异步 goroutine,backup.Stop 等待在途快照收口(X-7);store 最后 (其 Stop 无资源动作,连接池由 Wire cleanup 在 OnPostStop 释放—— 晚于全部服务 Stop,排水期在途请求仍可读库)。

lynx 集成级 SIGTERM 端到端测试(真进程信号→逐服务 Stop 时序)成本过高 不做,挂账:顺序契约由 TestNewServicesStopOrder(结构断言)+ lynx 自身 ordered/stopRange 语义共同钉住。

func NewStore

func NewStore(cfg *AppConfig) (*state.Store, func(), error)

NewStore 打开状态库(启动即建库迁移,失败 fail-fast 拒绝启动);资源 释放交给 Wire cleanup(main 挂 OnPostStop,晚于全部服务 Stop)。

func NewSubstrateClient

func NewSubstrateClient(cfg *AppConfig) (*substrate.Client, func(), error)

NewSubstrateClient 构造底座适配器客户端(moby/client)。它是多个端口 的实现载体:state.DockerClient(节点观测/身份)与 build 包端口(镜像 inspect/load、buildkitd 容器编排);连接资源由 Wire cleanup 释放。

func NewSystemService

func NewSystemService(st *state.Store, id *state.NodeIdentity, ob *state.Observer, sb *secrets.Box, ing *ingress.Manager, bm *statebackup.Manager, version Version) *api.SystemService

NewSystemService 构造系统/集群观察面服务(T2.18 起 SystemService 实现在 internal/api;健康组件集在本装配点命名——lynx Checker 接口无名。Traefik 是降级设计(收敛/续期失败只日志告警,ingress 服务壳 CheckHealth 恒健康) ——组件集与装配壳同语义如实上报恒健康)。备份组件(T2.22)的检查器 = statebackup.Manager.CheckHealth:无 verified 备份 / 最近一次 verify 失败 → 不健康(红色告警面:台账 failed 行 + backup.failed 审计 + 此组件)。

func NewTokensService

func NewTokensService(st *state.Store) *api.TokensService

NewTokensService 构造 token 管理面服务。

Types

type AppConfig

type AppConfig struct {
	// Addr 是 HTTP 面(框架 healthz 端点 + grpc-gateway 挂载的 REST /v1/**)
	// 的监听地址。
	Addr string `mapstructure:"addr"`
	// GRPC 是 gRPC 面配置(server.v1 服务承载于此,gateway 反向代理目标)。
	GRPC GRPCConfig `mapstructure:"grpc"`
	// State 是状态层配置(config 键 state.*)。
	State StateConfig `mapstructure:"state"`
	// Secrets 是平台密钥配置(config 键 secrets.*,architecture §2.3:
	// envelope 主密钥存控制面主机文件、权限保护、与备份数据分离)。
	Secrets SecretsConfig `mapstructure:"secrets"`
	// Build 是构建管线配置(config 键 build.*,T2.8)。
	Build BuildConfig `mapstructure:"build"`
	// Engine 是发布引擎配置(config 键 engine.*,T2.10/T2.11;治理参数
	// v0.1 平台默认——文件缺省即文档默认,见 engine.Config.Normalize)。
	Engine EngineConfig `mapstructure:"engine"`
	// Ingress 是入口/证书配置节(config 键 ingress.*,T2.15/T2.16;
	// Traefik 部署 + 配置端点 + 集中 ACME——缺省值经 ingress.Config.
	// Normalize 回落,单一事实源在 internal/ingress)。
	Ingress IngressConfig `mapstructure:"ingress"`
	// Logs 是日志管线配置节(config 键 logs.*,T2.20;缺省值经 logs.
	// Config.Normalize 回落——单一事实源在 internal/logs)。
	Logs LogsConfig `mapstructure:"logs"`
	// Git 是 git push(SSH) 触发入口配置节(config 键 git.*,T2.19;缺省值
	// 经 gitserver.Config.Normalize 回落——单一事实源在 internal/gitserver)。
	Git GitConfig `mapstructure:"git"`
	// Webhook 是 webhook 触发入口配置节(config 键 webhook.*,T2.19)。
	Webhook WebhookConfig `mapstructure:"webhook"`
	// Console 是 Console 端静态托管配置节(config 键 console.*,T2.21)。
	Console ConsoleConfig `mapstructure:"console"`
	// Backup 是状态备份配置节(config 键 backup.*,T2.22;缺省值经
	// statebackup.Config.Normalize 回落——单一事实源在 internal/statebackup)。
	Backup BackupConfig `mapstructure:"backup"`
}

AppConfig 应用配置,与 config.yaml 及 flags 对应(lynx Config,默认 Viper 适配)。随阶段推进只增字段,不回收键名。

func NewConfig

func NewConfig(app lynx.App) (*AppConfig, error)

NewConfig 从应用配置(flags + 配置文件)解出 AppConfig,缺省值在此回落。

func (*AppConfig) BackupRoot

func (c *AppConfig) BackupRoot() string

BackupRoot 回落备份根目录缺省值(与 state 库同目录下 backups/)。

func (*AppConfig) BackupSettings

func (c *AppConfig) BackupSettings() statebackup.Config

BackupSettings 把 backup.* 配置节翻译为备份核心配置(statebackup.Config, 缺省值经 Normalize 回落——单一事实源在 internal/statebackup)。

func (*AppConfig) BootstrapTokenPath

func (c *AppConfig) BootstrapTokenPath() string

BootstrapTokenPath 返回 bootstrap token 文件路径(B5:数据根 = state 库 同目录,与 BackupRoot/GitRoot 同款装配期回落)。首启种子写此文件 (0600),不再打印进日志/journald。

func (*AppConfig) BuildSettings

func (c *AppConfig) BuildSettings() build.Config

BuildSettings 把 build.* 配置节翻译为构建管线核心配置(build.Config, 缺省值经 Normalize 回落——单一事实源在 internal/build)。

func (*AppConfig) DBPath

func (c *AppConfig) DBPath() string

DBPath 返回状态库路径,未配置时回落缺省值。

func (*AppConfig) DeploymentsRoot

func (c *AppConfig) DeploymentsRoot() string

DeploymentsRoot 返回部署 compose 持久化根目录(A7,S18:<数据根>/ deployments——数据根 = state 库同目录,与 BackupRoot/GitRoot 同款派生; 布局单一事实源在 state.DeploymentsRoot)。janitor 按 30 天窗清理终态 部署的目录。

func (*AppConfig) EngineSettings

func (c *AppConfig) EngineSettings() engine.Config

EngineSettings 把 engine.* 配置节翻译为引擎核心配置(engine.Config, 缺省值经 Normalize 回落——单一事实源在 internal/engine)。

func (*AppConfig) GRPCAddr

func (c *AppConfig) GRPCAddr() string

GRPCAddr 返回 gRPC 监听地址,未配置时回落缺省值。

func (*AppConfig) GitRoot

func (c *AppConfig) GitRoot() string

GitRoot 回落 bare 仓库根目录缺省值(与 state 库同目录下 git/)。

func (*AppConfig) GitSettings

func (c *AppConfig) GitSettings() gitserver.Config

GitSettings 把 git.*/webhook.* 配置节翻译为 git 触发入口核心配置 (gitserver.Config,缺省值经 Normalize 回落——单一事实源在 internal/gitserver)。Root 依赖 state 库路径,缺省在此计算(<db 同目录>/ git);HookEndpoint 由 HTTP addr 推导(host 位为通配/空时回落 127.0.0.1 ——钩子回调走 loopback)。gitEndpoint() 是 SSH 面的 host:port 投影 (apps 面的 git remote 提示原料)。

func (*AppConfig) IngressSettings

func (c *AppConfig) IngressSettings() ingress.Config

IngressSettings 把 ingress.* 配置节翻译为入口适配器核心配置(ingress. Config,缺省值经 Normalize 回落——单一事实源在 internal/ingress)。归一 必须发生在装配入口:ingress 服务的配置端点监听地址取自此处的 ConfigAddr ——不经 Normalize 的空串会让 net.Listen 落到随机端口(与 manager 内部 归一值漂移,T2.18 实机扫描发现并修正)。

func (*AppConfig) KeyPath

func (c *AppConfig) KeyPath() string

KeyPath 返回主密钥文件路径,未配置时回落缺省值(单一事实源 = secrets.DefaultKeyPath)。

func (*AppConfig) LogsSettings

func (c *AppConfig) LogsSettings() logs.Config

LogsSettings 把 logs.* 配置节翻译为日志管线核心配置(logs.Config, 缺省值经 Normalize 回落——单一事实源在 internal/logs)。

type BackupConfig

type BackupConfig struct {
	// Dir 是备份根目录(backup.dir)。主密钥(fleetly.key)绝不进备份目录
	// ——manifest 只记密钥文件 sha256 指纹;配置把密钥放进备份目录会被
	// statebackup.NewManager 构造期拒绝(fail-fast)。
	Dir string `mapstructure:"dir"`
	// Keep 是保留份数上限(backup.keep;非正值回落 DefaultKeep=7)。
	Keep int `mapstructure:"keep"`
}

BackupConfig 是状态备份配置节(config 键 backup.*,T2.22)。dir 留空时 由装配点回落 <state 库同目录>/backups(依赖 state 库路径,缺省在 AppConfig.BackupRoot 计算——与 GitRoot 同款装配期回落)。

type BuildConfig

type BuildConfig struct {
	// BuildkitHost 是 buildkit 端点(build.buildkit_host);空 = 缺省
	// docker-container://fleetly-buildkit(平台自管容器)。指向外部
	// buildkitd(tcp://…)时应把 manage_daemon 置 false。
	BuildkitHost string `mapstructure:"buildkit_host"`
	// ManageDaemon 报告平台是否自管 buildkitd 容器(build.manage_daemon,
	// 缺省 true;外部端点形态置 false)。
	ManageDaemon *bool `mapstructure:"manage_daemon"`
	// DaemonContainerName 是自管 buildkitd 容器名(build.daemon_container_name)。
	DaemonContainerName string `mapstructure:"daemon_container_name"`
	// CacheVolume 是 buildkitd 内部工作缓存的持久化命名卷
	// (build.cache_volume,挂 /var/lib/buildkit)。
	CacheVolume string `mapstructure:"cache_volume"`
	// CacheDir 是 local cache 导入/导出的宿主目录(build.cache_dir;
	// 客户端侧数据根,缺省 ./build-cache)。
	CacheDir string `mapstructure:"cache_dir"`
	// ArtifactsDir 是 plan JSON / 构建日志归档根目录(build.artifacts_dir)。
	ArtifactsDir string `mapstructure:"artifacts_dir"`
	// Concurrency 是构建队列并发上限(build.concurrency;缺省 2,天花板 8)。
	Concurrency int `mapstructure:"concurrency"`
	// MemoryBytes 是 buildkitd 容器内存限额(build.memory_bytes;缺省 1GiB)。
	MemoryBytes int64 `mapstructure:"memory_bytes"`
	// CPUS 是 buildkitd 容器 CPU 限额(build.cpus;缺省 1.5)。
	CPUS float64 `mapstructure:"cpus"`
	// PollSeconds 是队列扫描周期秒数(build.poll_seconds;缺省 2)。
	PollSeconds int `mapstructure:"poll_seconds"`
	// TimeoutSeconds 是单条构建执行超时预算秒数(build.timeout_seconds;
	// 缺省 1800=30min。超时 → 终态 failed(E_BUILD_FAILED)——挂起构建
	// 不永久占用并发槽)。
	TimeoutSeconds int `mapstructure:"timeout_seconds"`
	// ArtifactsRetentionDays 是产物归档目录保留天数(build.artifacts_
	// retention_days;缺省 30,A10/S18——janitor 按 mtime 清理)。非正值
	// 回落默认(不允许误配成 0 静默关闭清理)。
	ArtifactsRetentionDays int `mapstructure:"artifacts_retention_days"`
	// ContextRoots 是构建上下文受管根的额外配置根(build.context_roots;
	// H14 宿主目录信任边界:context_dir 必须位于受管根内,越界构建终态
	// 失败)。缺省集合 = 系统 temp 根(build.Config.Normalize 恒并入)+
	// git 裸仓库根(GitSettings 装配并入);单机同宿主形态下 CLI 构建目录
	// 在此显式扩根接入(信任由 TriggerBuild 的 admin scope 把门)。
	ContextRoots []string `mapstructure:"context_roots"`
}

BuildConfig 是构建管线配置节(config 键 build.*)。缺省值经 build.Config.Normalize 回落(并发 2、限额 1GiB/1.5CPU、缓存命名卷)。

type ConsoleConfig

type ConsoleConfig struct {
	// StaticDir 是 Console SPA 构建产物的静态根目录(console.static_dir)。
	// 空 = 关闭(/ui/ 前缀不分派——豁免面 = 分派面,缺省零暴露)。指向
	// console/dist(`pnpm build` 产物)时 gateway 在 /ui/ 前缀托管静态文件
	// 并做 SPA 回退(未命中文件的路径一律回 index.html)。
	StaticDir string `mapstructure:"static_dir"`
}

ConsoleConfig 是 Console 静态托管配置节(config 键 console.*,T2.21)。 Console SPA 的数据面恒走 REST /v1(鉴权在 gRPC 拦截器链,不因静态托管 放宽);静态资源豁免精确到 /ui/ 前缀(例外清单登记见 gateway.go)。

type EngineConfig

type EngineConfig struct {
	// DeployTimeoutSeconds 是 L2 发布看门狗秒数(engine.deploy_timeout_seconds;
	// 缺省 300——含 PENDING/停滞,有效值 ≥ health 预算)。
	DeployTimeoutSeconds int `mapstructure:"deploy_timeout_seconds"`
	// ObserveSeconds 是 L3 观察窗秒数(engine.observe_seconds;缺省 60)。
	ObserveSeconds int `mapstructure:"observe_seconds"`
	// ReplicasBelowSeconds 是观察窗副本水位不足判定的持续秒数
	//(engine.replicas_below_seconds;缺省 10)。
	ReplicasBelowSeconds int `mapstructure:"replicas_below_seconds"`
	// PollSeconds 是引擎轮询周期秒数(engine.poll_seconds;缺省 2)。
	PollSeconds int `mapstructure:"poll_seconds"`
	// DriftIntervalSeconds 是运行域漂移检测扫描周期秒数
	//(engine.drift_interval_seconds;缺省 30,T2.13)。
	DriftIntervalSeconds int `mapstructure:"drift_interval_seconds"`
}

EngineConfig 是发布引擎配置节(config 键 engine.*)。默认值与 release-semantics §2.8 治理参数表一致(deployTimeout=300s、观察窗 60s、 水位判定 10s、轮询 2s),经 engine.Config.Normalize 回落。

type GRPCConfig

type GRPCConfig struct {
	// Addr 是 gRPC 监听地址(grpc.addr)。
	Addr string `mapstructure:"addr"`
}

GRPCConfig 是 gRPC 面的配置节(config 键 grpc.*)。

type GitConfig

type GitConfig struct {
	// Enabled 报告是否启用 SSH git 面(git.enabled;缺省 true。false =
	// 显式关闭位——webhook 拉源不依赖 SSH 面,但 bare 仓库根共用)。
	Enabled *bool `mapstructure:"enabled"`
	// Addr 是 SSH 监听地址(git.addr;缺省 127.0.0.1:8424)。
	Addr string `mapstructure:"addr"`
	// Root 是 bare 仓库根目录(git.root;空 = <state 库同目录>/git)。
	Root string `mapstructure:"root"`
	// HostKeyFile 是 SSH host key 文件(git.host_key_file;空 =
	// <root>/host_ed25519。ed25519 首启生成持久化,绝不打印私钥)。
	HostKeyFile string `mapstructure:"host_key_file"`
}

GitConfig 是 git push(SSH) 入口配置节(config 键 git.*,T2.19)。字段与 internal/gitserver.Config 一一对应;安全默认基线:enabled 缺省 true、 addr 缺省 127.0.0.1:8424(内部服务默认不暴露公网——VPS 上由安装/文档 指引改为对外)、root 缺省与 state 库同目录下 git/。

type IngressACMEConfig

type IngressACMEConfig struct {
	// Enabled 报告是否启用集中签发(enabled;缺省 true。false = 只发布
	// HTTP 路由——无域名/离线环境的显式关闭位)。
	Enabled *bool `mapstructure:"enabled"`
	// CADirURL 是 ACME 目录端点(ca_dir_url;默认 LE production,测试用
	// Pebble URL)。
	CADirURL string `mapstructure:"ca_dir_url"`
	// Email 是 ACME 账号邮箱(email)。
	Email string `mapstructure:"email"`
	// CAPoolFile 是 CA 根证书池 PEM(ca_pool_file;Pebble/私有 CA 信任)。
	CAPoolFile string `mapstructure:"ca_pool_file"`
	// AccountKeyFile 是 ACME 账号私钥文件(account_key_file;空 =
	// <cert_dir>/acme-account.key)。
	AccountKeyFile string `mapstructure:"account_key_file"`
}

IngressACMEConfig 是集中 ACME 配置(config 键 ingress.acme.*)。

type IngressConfig

type IngressConfig struct {
	// TraefikImage 是入口镜像(traefik_image;钉版,升级 = 改配置 +
	// 回归,不追 latest)。
	TraefikImage string `mapstructure:"traefik_image"`
	// HTTPPort / HTTPSPort 是宿主发布端口(host 模式)。
	HTTPPort  int `mapstructure:"http_port"`
	HTTPSPort int `mapstructure:"https_port"`
	// ConfigAddr 是控制面配置端点监听地址(config_addr;默认 0.0.0.0:8422
	// ——Traefik 任务经宿主 IP 访问,鉴权 token 强制)。
	ConfigAddr string `mapstructure:"config_addr"`
	// ConfigAdvertiseIP 是下发给 Traefik 的控制面可达 IP
	//(config_advertise_ip;空 = 自动探测。Docker Desktop 形态 advertise
	// addr 是 VM 内部 IP,须显式配置宿主可达地址)。
	ConfigAdvertiseIP string `mapstructure:"config_advertise_ip"`
	// TokenFile 是配置端点 bearer token 文件(token_file;首启生成)。
	TokenFile string `mapstructure:"token_file"`
	// CertDir 是证书存储根目录(cert_dir;控制面侧明文 PEM,独立备份目录
	// ——state-model §2.1;bind 挂载进 Traefik 只读)。
	CertDir string `mapstructure:"cert_dir"`
	// ACME 是集中签发器配置。
	ACME IngressACMEConfig `mapstructure:"acme"`
	// RenewBeforeDays 是续期窗口天数(renew_before_days;缺省 30)。
	RenewBeforeDays int `mapstructure:"renew_before_days"`
	// RenewScanSeconds 是续期扫描周期秒数(renew_scan_seconds;缺省 12h)。
	RenewScanSeconds int `mapstructure:"renew_scan_seconds"`
}

IngressConfig 是入口/证书配置节(config 键 ingress.*)。字段与 internal/ingress.Config 一一对应;缺省值在 ingress.Config.Normalize (traefik:v3.5 钉版、host 80/443、配置端点 :8422、LE production ACME、 续期窗口 30 天)。

type LogsConfig

type LogsConfig struct {
	// Dir 是落盘根目录(logs.dir;缺省 ./fleetly-logs)。
	Dir string `mapstructure:"dir"`
	// RetentionDays 是落盘保留天数(logs.retention_days;缺省 7——架构
	// §2.3 数据保留:应用日志 7 天轮转)。
	RetentionDays int `mapstructure:"retention_days"`
	// ScanIntervalMillis 是采集轮询周期毫秒数(logs.scan_interval_millis;
	// 缺省 2000)。
	ScanIntervalMillis int `mapstructure:"scan_interval_millis"`
	// RingSize 是 per app-service 内存环形缓冲深度(logs.ring_size;缺省
	// 1000)。
	RingSize int `mapstructure:"ring_size"`
}

LogsConfig 是日志管线配置节(config 键 logs.*)。字段与 internal/logs. Config 一一对应;缺省回落 internal/logs(fleetly-logs 目录 / 保留 7 天 / 轮询 2s / ring 1000)。

type SecretsConfig

type SecretsConfig struct {
	// KeyPath 是 envelope 主密钥文件路径(secrets.key_path);空 = 缺省
	// ./fleetly.key。首启不存在则生成并日志提示妥善保存。
	KeyPath string `mapstructure:"key_path"`
}

SecretsConfig 是平台密钥配置节(config 键 secrets.*)。主密钥文件与 备份数据分离保存(architecture §2.3);权限过宽 fail-fast 拒绝启动 (internal/secrets ErrWeakPermissions,POSIX 面)。

type StateConfig

type StateConfig struct {
	// DBPath 是 SQLite 状态库文件路径(state.db_path)。
	DBPath string `mapstructure:"db_path"`
	// EventRetentionDays 是事件保留天数(state.event_retention_days)。
	EventRetentionDays int `mapstructure:"event_retention_days"`
	// AuditRetentionDays 是审计保留天数(state.audit_retention_days)。
	AuditRetentionDays int `mapstructure:"audit_retention_days"`
	// BuildRetentionDays 是 builds 终态行保留天数(state.build_retention_
	// days;缺省 90,A10/S18——janitor 清理终态构建台账行)。
	BuildRetentionDays int `mapstructure:"build_retention_days"`
	// DockerHost 是底座连接地址(state.docker_host);空 = DOCKER_HOST
	// 环境变量,再缺省本机套接字。
	DockerHost string `mapstructure:"docker_host"`
}

StateConfig 是状态层配置节(config 键 state.*)。保留期天数取非正值 时回落注册默认(事件 30 天 / 审计 365 天 / builds 终态行 90 天——保留期 是契约默认,不允许误配成 0 静默关闭清理)。

type Version

type Version string

Version 是注入 wire 图的守护进程版本(具名类型,避免裸 string 在依赖 图中撞型)。值来自 cmd/fleetlyd 构建期注入的 main.version,经 Bootstrap 参数传入;backup manifest 的 binary_version 与 SystemService.Status 消费。

type WebhookConfig

type WebhookConfig struct {
	// ReplayTTLSecs 是 delivery ID 防重放窗口秒数
	//(webhook.replay_ttl_seconds;缺省 900 = 15 分钟)。
	ReplayTTLSecs int `mapstructure:"replay_ttl_seconds"`
}

WebhookConfig 是 webhook 入口配置节(config 键 webhook.*,T2.19)。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL