Production Checklist
A pass over every switch worth flipping before a Lakta service takes real traffic. Each item links to the page that covers it in depth.
Configuration
Section titled “Configuration”- Secrets come from the environment, not config files — every key has a
LAKTA_...form (reference) - Config files validate in CI/IDE against the published JSON schema
- Hot-reload behavior is intentional — modules implementing
HotReloadablepick up config changes live; make sure that’s what you want for each (configuration)
Traffic
Section titled “Traffic”- HTTP timeouts are set — Fiber’s read/write/idle timeouts default to off; set them via config or
WithDefaults(HTTP module) - gRPC server has keepalive and message-size limits appropriate to your clients (gRPC server)
- Readiness gates on real dependencies — register a health check per hard dependency (database ping, downstream API) so the pod leaves rotation when they fail (health)
Observability
Section titled “Observability”- OpenTelemetry exports somewhere — set the otel
endpointandservice_name; traces, metrics, and logs are wired through automatically (otel module) - Log level is
infoor higher and structured logging goes throughsloxwith context, so trace IDs land on every line (logging, context-aware logging)
Lifecycle
Section titled “Lifecycle”-
terminationGracePeriodSecondsexceeds 30s — the runtime needs its full shutdown deadline (deployment) - Long-running work respects context cancellation —
Startblocks until ctx cancels; goroutines spawned inStartAsyncmust exit on cancel (lifecycle) - Init order is declared, not assumed — modules that need each other declare
Provides/Dependenciesrather than relying on argument order (modules)
Attack surface
Section titled “Attack surface”- Debug/actuator endpoints are disabled, authed, or absent — pprof and config dumps do not belong on the public internet
- Auth middleware covers every non-public route — verify the deny-by-default posture rather than opting individual routes in
- Kill a pod under load and watch it drain cleanly (no 5xx spike, no dropped in-flight requests)
- Run the service with
-racein CI — the framework’s own gates do; yours should too