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
- Variables
- func Bootstrap(app lynx.App, version string) (*boot.Bootstrap, func(), error)
- func NewAppsService(st *state.Store, sb *secrets.Box, cfg *AppConfig, m *ingress.Manager) *api.AppsService
- func NewAuthenticator(app lynx.App, cfg *AppConfig, st *state.Store) (*api.Authenticator, error)
- func NewBackupManager(app lynx.App, cfg *AppConfig, st *state.Store, sb *secrets.Box, ...) (*statebackup.Manager, error)
- func NewBuildQueue(app lynx.App, cfg *AppConfig, st *state.Store, b *build.Builder) *build.Queue
- func NewBuilder(cfg *AppConfig, st *state.Store, dc *substrate.Client, dm build.DaemonManager, ...) *build.Builder
- func NewBuildsService(st *state.Store, q *build.Queue) *api.BuildsService
- func NewDaemonManager(sc *substrate.Client) build.DaemonManager
- func NewDeploymentsService(st *state.Store, src *gitserver.GitTriggers) *api.DeploymentsService
- func NewDockerClient(sc *substrate.Client) (state.DockerClient, func(), error)
- func NewDomainsService(st *state.Store, m *ingress.Manager) *api.DomainsService
- func NewDrains() boot.DrainHooks
- func NewDriftService(st *state.Store, eng *engine.Engine) *api.DriftService
- func NewEngine(app lynx.App, cfg *AppConfig, st *state.Store, sc *substrate.Client, ...) *engine.Engine
- func NewEnvService(st *state.Store, sb *secrets.Box, lm *logs.Manager) *api.EnvService
- func NewEventsService(st *state.Store) *api.EventsService
- func NewGRPCServer(app lynx.App, cfg *AppConfig, auth *api.Authenticator, apps *api.AppsService, ...) (*lynxgrpc.Server, error)
- func NewGitKeysService(st *state.Store) *api.GitKeysService
- func NewGitTriggers(cfg *AppConfig, st *state.Store, sb *secrets.Box, app lynx.App) *gitserver.GitTriggers
- func NewHTTPServer(app lynx.App, cfg *AppConfig, src *gitserver.GitTriggers) (*lynxhttp.Server, error)
- func NewIngressManager(app lynx.App, cfg *AppConfig, st *state.Store) (*ingress.Manager, func(), error)
- func NewJanitor(app lynx.App, st *state.Store, cfg *AppConfig) *state.Janitor
- func NewLogsManager(app lynx.App, cfg *AppConfig, st *state.Store, sc *substrate.Client, ...) *logs.Manager
- func NewLogsService(st *state.Store, mg *logs.Manager) *api.LogsService
- func NewNodeIdentity(app lynx.App, st *state.Store, dc state.DockerClient) *state.NodeIdentity
- func NewObserver(app lynx.App, st *state.Store, dc state.DockerClient) *state.Observer
- func NewPlacementResolver(st *state.Store, dc state.DockerClient) *placement.Resolver
- func NewPlacementService(st *state.Store) *api.PlacementService
- func NewPostStops() boot.PostStopHooks
- func NewPreStarts(app lynx.App) boot.PreStartHooks
- func NewPreStops(app lynx.App) boot.PreStopHooks
- func NewRevisionsService(st *state.Store) *api.RevisionsService
- func NewSecretsBox(app lynx.App, cfg *AppConfig) (*secrets.Box, error)
- func NewServiceFactories() []lynx.ServiceFactory
- func NewServices(app lynx.App, st *state.Store, id *state.NodeIdentity, ob *state.Observer, ...) []lynx.Service
- func NewStore(cfg *AppConfig) (*state.Store, func(), error)
- func NewSubstrateClient(cfg *AppConfig) (*substrate.Client, func(), error)
- func NewSystemService(st *state.Store, id *state.NodeIdentity, ob *state.Observer, sb *secrets.Box, ...) *api.SystemService
- func NewTokensService(st *state.Store) *api.TokensService
- type AppConfig
- func (c *AppConfig) BackupRoot() string
- func (c *AppConfig) BackupSettings() statebackup.Config
- func (c *AppConfig) BootstrapTokenPath() string
- func (c *AppConfig) BuildSettings() build.Config
- func (c *AppConfig) DBPath() string
- func (c *AppConfig) DeploymentsRoot() string
- func (c *AppConfig) EngineSettings() engine.Config
- func (c *AppConfig) GRPCAddr() string
- func (c *AppConfig) GitRoot() string
- func (c *AppConfig) GitSettings() gitserver.Config
- func (c *AppConfig) IngressSettings() ingress.Config
- func (c *AppConfig) KeyPath() string
- func (c *AppConfig) LogsSettings() logs.Config
- type BackupConfig
- type BuildConfig
- type ConsoleConfig
- type EngineConfig
- type GRPCConfig
- type GitConfig
- type IngressACMEConfig
- type IngressConfig
- type LogsConfig
- type SecretsConfig
- type StateConfig
- type Version
- type WebhookConfig
Constants ¶
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 ¶
var ProviderSet = wire.NewSet( boot.New, NewConfig, NewStore, NewSubstrateClient, NewDockerClient, NewNodeIdentity, NewObserver, NewJanitor, NewSecretsBox, NewBackupManager, NewBuilder, NewBuildQueue, NewPlacementResolver, NewIngressManager, NewEngine, NewDaemonManager, NewLogsManager, NewAuthenticator, NewSystemService, NewAppsService, NewDeploymentsService, NewRevisionsService, NewBuildsService, NewDriftService, NewDomainsService, NewEnvService, NewLogsService, NewEventsService, NewPlacementService, NewTokensService, NewGitTriggers, NewGitKeysService, NewGRPCServer, NewHTTPServer, NewServices, NewServiceFactories, NewPreStarts, NewDrains, NewPreStops, NewPostStops, )
ProviderSet 是 fleetlyd 的 Wire 依赖集(装配形态对齐 lynx _examples/boot:Bootstrap 聚合钩子与服务,cleanup 由 main 挂 OnPostStop)。
Functions ¶
func Bootstrap ¶
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 ¶
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 ¶
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 ¶
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 ¶
NewDomainsService 构造域名台账/验证面服务。
func NewDrains ¶
func NewDrains() boot.DrainHooks
func NewDriftService ¶
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 ¶
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 ¶
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 ¶
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 ¶
NewObserver 构造节点观测缓存刷新器(30s 全量 resync + 事件驱动失效, 底座不可达置 stale + 指数退避)。
func NewPlacementResolver ¶
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 ¶
NewSecretsBox 初始化 envelope 主密钥(fail-fast:加载/权限/生成任一失败 拒绝启动——密钥是全部平台 env 密文的生命线,architecture §2.3)。首启 生成时日志明示妥善保存(与备份分离;丢失 = env 密文不可解)。装配期 完成即 fleetlyd 主密钥初始化语义;健康面由 secrets 服务壳 CheckHealth 持续上报。
func NewServiceFactories ¶
func NewServiceFactories() []lynx.ServiceFactory
func NewServices ¶
func NewServices( app lynx.App, st *state.Store, id *state.NodeIdentity, ob *state.Observer, jr *state.Janitor, bm *statebackup.Manager, sb *secrets.Box, q *build.Queue, b *build.Builder, eng *engine.Engine, ing *ingress.Manager, lm *logs.Manager, src *gitserver.GitTriggers, cfg *AppConfig, hs *lynxhttp.Server, gs *lynxgrpc.Server, ) []lynx.Service
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 阶段)。
三段停止不变量(顺序不可倒置):
- 入口面最先停(HTTP/gRPC/git SSH + webhook worker)——SIGTERM 后 立即拒绝新工作(连接排水),消灭「Deploy/TriggerBuild 仍假成功入队 但引擎/队列已死」的窗口。webhook worker 的排空也在本段:drain 中 处理的 job 写部署行,此时引擎已停、行只会排队待重启恢复——可接受;
- 写入者随后(build queue → engine → ingress → 日志采集)——入口已 关,写入者安心排空在途(队列认领、状态机 tick、路由发布、日志尾随)。 ingress 在 engine 之后保持原相对序(引擎 tick 触发发布时配置端点 已监听的弱偏置;Traefik 对配置端点不可达保留旧配置,先停无害);
- 资源层最后(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 ¶
NewStore 打开状态库(启动即建库迁移,失败 fail-fast 拒绝启动);资源 释放交给 Wire cleanup(main 挂 OnPostStop,晚于全部服务 Stop)。
func NewSubstrateClient ¶
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 (*AppConfig) BackupRoot ¶
BackupRoot 回落备份根目录缺省值(与 state 库同目录下 backups/)。
func (*AppConfig) BackupSettings ¶
func (c *AppConfig) BackupSettings() statebackup.Config
BackupSettings 把 backup.* 配置节翻译为备份核心配置(statebackup.Config, 缺省值经 Normalize 回落——单一事实源在 internal/statebackup)。
func (*AppConfig) BootstrapTokenPath ¶
BootstrapTokenPath 返回 bootstrap token 文件路径(B5:数据根 = state 库 同目录,与 BackupRoot/GitRoot 同款装配期回落)。首启种子写此文件 (0600),不再打印进日志/journald。
func (*AppConfig) BuildSettings ¶
BuildSettings 把 build.* 配置节翻译为构建管线核心配置(build.Config, 缺省值经 Normalize 回落——单一事实源在 internal/build)。
func (*AppConfig) DeploymentsRoot ¶
DeploymentsRoot 返回部署 compose 持久化根目录(A7,S18:<数据根>/ deployments——数据根 = state 库同目录,与 BackupRoot/GitRoot 同款派生; 布局单一事实源在 state.DeploymentsRoot)。janitor 按 30 天窗清理终态 部署的目录。
func (*AppConfig) EngineSettings ¶
EngineSettings 把 engine.* 配置节翻译为引擎核心配置(engine.Config, 缺省值经 Normalize 回落——单一事实源在 internal/engine)。
func (*AppConfig) GitSettings ¶
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 ¶
IngressSettings 把 ingress.* 配置节翻译为入口适配器核心配置(ingress. Config,缺省值经 Normalize 回落——单一事实源在 internal/ingress)。归一 必须发生在装配入口:ingress 服务的配置端点监听地址取自此处的 ConfigAddr ——不经 Normalize 的空串会让 net.Listen 落到随机端口(与 manager 内部 归一值漂移,T2.18 实机扫描发现并修正)。
func (*AppConfig) LogsSettings ¶
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)。