Konfiguráció
Sem a kit, sem egyetlen önálló modul nem olvas env-változót magától: mindegyik exportál egy Config structot, amit a projekted internal/platform/config/config.go-jában komponálsz össze, és envconf.MustLoad[config.Config]()-fel töltesz be. Lásd az envconf oldalt és a konfiguráció-koncepciót. Fejlesztésben a .env fájl beolvasásra kerül; a valódi környezeti változók mindig nyernek.
GPSYSTEM_* namespace. A változónevek prefixét nem a kit vagy egy modul határozza meg, hanem a komponáló struct envPrefix tagje: a lenti DB_, S3_, MAIL_ stb. prefixek a generált projekt konvenciói. Ugyanaz a struct más prefixszel is felcsatolható: az envconf.LoadPrefixed[dbx.Config]("ANALYTICS_DB_") ugyanazt a structot másik változókészletre képezi.Egy generált projekt configja így áll össze:
type Config struct {
Server server.Config // prefix nélkül: LISTEN_ADDR, ...
DB dbx.Config `envPrefix:"DB_"`
Worker worker.Config // WORKER_* + beágyazott VALKEY_/SCHEDULER_
Outbox outbox.Config `envPrefix:"OUTBOX_"`
// kézzel hozzáadva, ha kell:
Storage s3.Config `envPrefix:"S3_"`
Mail smtp.Config `envPrefix:"MAIL_"`
JWT auth.Config `envPrefix:"JWT_"`
}
A lenti szakaszok a modultérkép sorrendjét követik: elöl a kit saját chassis-configjai, utána modulonként egy szakasz (kihagyva azt a maroknyit, aminek egyáltalán nincs env-konfigurálható állapota).
A kit chassisa
server.Config: prefix nélkül
github.com/gp-system/gpsystem/server. A HTTP-szerver életciklusa és limitjei. Lásd Szerver.
| Változó | Default | Jelentés |
|---|---|---|
LISTEN_ADDR | :3000 | a cím, amin a chi hallgat |
SHUTDOWN_TIMEOUT | 10s | graceful shutdown kerete: SIGINT/SIGTERM után ennyit kapnak az in-flight kérések |
READ_HEADER_TIMEOUT | 5s | a kérés-fejlécek beérkezésének limitje, ez az elsődleges Slowloris-védelem |
READ_TIMEOUT | 30s | a teljes kérés (fejléc + body) beolvasásának limitje |
WRITE_TIMEOUT | 0s | a válasz kiírásának limitje; alapból kikapcsolva, mert a streaminget/nagy letöltéseket is elvágná. Kapcsold be, ha minden endpointod rövid életű |
IDLE_TIMEOUT | 120s | meddig marad nyitva egy tétlen keep-alive kapcsolat |
CORS_ORIGINS | * | engedélyezett originek, vesszővel elválasztva |
BODY_LIMIT | 4194304 | max kérés-body méret bájtban (4 MiB); a ≤ 0 érték is a defaultot jelenti, a limit nem kapcsolható ki véletlenül |
HTTP_EXPOSE_INTERNAL_ERRORS | false | az 5xx válaszokba bekerül a mögöttes hibaüzenet, stack és wrap-lánc (kizárólag fejlesztésben); szándékosan független az OTEL_DEV_MODE-tól |
worker.Config: WORKER_*
github.com/gp-system/gpsystem/worker. A háttérfeldolgozó chassis: asynq szerver + outbox relay + ütemező egy binárisban. Lásd Worker.
| Változó | Default | Jelentés |
|---|---|---|
WORKER_CONCURRENCY | 10 | egyszerre feldolgozott taskok száma |
WORKER_QUEUES | default:1 | sor→súly leképezés, pl. critical:6,default:3,low:1 (a nagyobb súlyú sor gyakrabban kap kiszolgálást) |
WORKER_STRICT_PRIORITY | false | a nagyobb súlyú sorok kiürítése az alacsonyabbak előtt |
WORKER_SHUTDOWN_TIMEOUT | 30s | graceful drain; a be nem fejezett taskokat az asynq visszasorolja és újrakézbesíti (at-least-once) |
WORKER_DEFAULT_MAX_RETRY | 25 | retry-keret azokhoz a listener/job taskokhoz, amik nem állítanak sajátot (queue.MaxRetry) |
A worker.Config emellett beágyazza a queue.Config-ot (VALKEY_*), a scheduler.Config-t (SCHEDULER_*) és a telemetry.Config-ot (standard OTEL_*/LOG_*/SENTRY_* nevekkel).
realtime.Config: REALTIME_*
github.com/gp-system/gpsystem/realtime. A WebSocket/SSE gateway. Lásd Realtime.
| Változó | Default | Jelentés |
|---|---|---|
REALTIME_LISTEN_ADDR | :3000 | a gateway konténeren belüli listen-címe |
REALTIME_DRAIN_TIMEOUT | 20s | graceful shutdown: minden tartott kapcsolat egy reconnect-eligible kóddal szakad le, utána futnak a closerek |
REALTIME_READ_HEADER_TIMEOUT | 5s | Slowloris-védelem a connect-handshake-en |
REALTIME_MAX_CONNECTIONS | 0 | limitálja az adott példány által tartott egyidejű streameket; 0 = korlátlan |
CORS_ORIGINS | * | közös a server.Config-gal, így a gateway igazodik az API-modulok beállításához |
A realtime.Config emellett beágyazza a broadcast.Config-ot (envPrefix:"REALTIME_", így az egyetlen változója REALTIME_CHANNEL_PREFIX-ként jelenik meg), a queue.Config-ot (VALKEY_*, ugyanaz a Valkey, amit a centrifuge broker használ), az auth.Config-ot (JWT_*, ez authentikálja a connect-handshake-et) és a telemetry.Config-ot (standard nevek, prefix nélkül).
dbx: envPrefix:"DB_"
github.com/gp-system/dbx. PostgreSQL-kapcsolat, lásd dbx: Áttekintés.
| Változó | Default | Jelentés |
|---|---|---|
DB_HOST | localhost | |
DB_PORT | 5432 | |
DB_USER | kötelező | |
DB_PASSWORD | kötelező | |
DB_NAME | kötelező | adatbázisnév |
DB_SSLMODE | disable | |
DB_MAX_CONNS | 10 | a pgx pool maximális kapcsolatszáma |
dbx.Config csomagszintű defaultja DB_HOST=localhost, de a generált projekt .env.example-je DB_HOST=postgres-t ír: az app a compose dev-stackben fut, a postgres a compose-service DNS-neve. Ugyanígy a queue.ConfigVALKEY_ADDR defaultja localhost:6379, a generált .env.example-ben viszont valkey:6379.Nevesített kapcsolatok
Minden nevesített kapcsolat (add db <modul> <név>) egy másik dbx.Config-ot ad hozzá DB_<NÉV>_* alatt, ugyanazokkal a változókkal és defaultokkal mint fent, a kapcsolat (nagybetűs) nevével a prefixbe illesztve. Az add db news analytics a következőket adja:
| Változó | Default | Jelentés |
|---|---|---|
DB_ANALYTICS_HOST | localhost | |
DB_ANALYTICS_PORT | 5432 | |
DB_ANALYTICS_USER | kötelező | |
DB_ANALYTICS_PASSWORD | kötelező | |
DB_ANALYTICS_NAME | kötelező | adatbázisnév |
DB_ANALYTICS_SSLMODE | disable | |
DB_ANALYTICS_MAX_CONNS | 10 | e kapcsolat saját pgx poolja maximális kapcsolatszáma |
Az errs-nek, a httperr-nek és a paginate-nek nincs Config structja: az errs és a paginate egyáltalán nem hordoz konfigurálható állapotot, a httperr pedig szintén nem olvas semmit a környezetből (a HTTP_EXPOSE_INTERNAL_ERRORS viselkedése a fenti server.Config-ban él). Az envconf maga a loader, nem valami, amit betöltenek; a saját .env-fájl- és tag-konvencióiért lásd az envconf: Áttekintés oldalt.
queue.Config: envPrefix:"VALKEY_"
github.com/gp-system/queue. A Valkey-kapcsolat, amin az asynq és minden rá épülő modul osztozik. Lásd Queue.
| Változó | Default | Jelentés |
|---|---|---|
VALKEY_ADDR | localhost:6379 | Valkey host:port |
VALKEY_PASSWORD | üres | üres → nincs auth |
VALKEY_DB | 0 | Valkey logikai adatbázis |
events
github.com/gp-system/events. Az event/listener magnak önmagában nincs Config-ja; a két alcsomagjának viszont van.
events/outbox.Config: envPrefix:"OUTBOX_"
A relay viselkedése, lásd Outbox.
| Változó | Default | Jelentés |
|---|---|---|
OUTBOX_POLL_INTERVAL | 1s | várakozás a pollok közt, ha a batch nem telt meg |
OUTBOX_BATCH_SIZE | 100 | pollonként lefoglalt sorok (FOR UPDATE SKIP LOCKED) |
OUTBOX_RETENTION | 168h | meddig maradnak meg a publikált sorok a takarítás előtt |
OUTBOX_CLEANUP_INTERVAL | 1h | milyen gyakran törlődnek a retention utáni publikált sorok |
OUTBOX_TASK_RETENTION | 24h | asynq-retention / TaskID-dedup ablak a publikált taskokon |
events/scheduler.Config: envPrefix:"SCHEDULER_"
Az ütemezett jobok futtatója, lásd Ütemezés.
| Változó | Default | Jelentés |
|---|---|---|
SCHEDULER_TIMEZONE | UTC | IANA időzóna, amelyben a cron-kifejezések kiértékelődnek (pl. Europe/Budapest) |
SCHEDULER_LEASE_TTL | 15s | a leader-lease TTL-je; a leader TTL/3-onként újítja, ennyi ideig tüzelhet még egy elveszett leader, mielőtt másik replika átveszi |
SCHEDULER_NAMESPACE | gpsystem | a Valkey-beli leader-election kulcs namespace-e; ez a default a szó szerinti "gpsystem" string, ezért állíts be appra egyedi nevet, ha több alkalmazás/környezet osztozik egy Valkeyen |
auth.Config: envPrefix:"JWT_"
github.com/gp-system/auth. JWT-kibocsátás és -ellenőrzés, lásd Autentikáció.
| Változó | Default | Jelentés |
|---|---|---|
JWT_SECRET | kötelező | aláíró kulcs, service-enként/környezetenként külön |
JWT_ACCESS_TOKEN_TTL | 15m | access token élettartam |
JWT_REFRESH_TOKEN_TTL | 168h | refresh token élettartam |
JWT_ISSUER | üres | üres → az iss-ellenőrzés kikapcsolva; beállítva a Parse egyező iss-t követel |
JWT_AUDIENCE | üres | üres → az aud-ellenőrzés kikapcsolva; beállítva a Parse megköveteli, hogy a token aud claimje tartalmazza |
JWT_ISSUER-t és a JWT_AUDIENCE-t (és használj service-enként külön secretet), hogy egy másik service-nek vagy környezetnek kibocsátott token ne legyen visszajátszható.Az auth/rbac-nak és az auth/policy-nak nincs saját Config-ja: a szerep-/permission-ellenőrzés és a kérésenkénti policy-k teljes egészében a tokenben vagy a kérésben már meglévő adatokon futnak, nincs mit tovább konfigurálni.
mail/smtp.Config: envPrefix:"MAIL_"
github.com/gp-system/mail/smtp. SMTP-küldés és default feladó, lásd Mail: Áttekintés.
| Változó | Default | Jelentés |
|---|---|---|
MAIL_HOST | kötelező | SMTP szerver címe |
MAIL_PORT | 587 | |
MAIL_USERNAME / MAIL_PASSWORD | üres | mindkettő üresen → nincs auth (Mailpit, belső relay) |
MAIL_AUTH | auto | auth-mechanizmus: auto (felderítés) | plain | login | cram-md5 | none |
MAIL_TLS | starttls | starttls (kötelező STARTTLS) | starttls-opportunistic (dev, TLS nélküli szerver) | tls (implicit TLS, 465-ös port) | none |
MAIL_FROM_ADDRESS | kötelező | default feladó cím |
MAIL_FROM_NAME | üres | default feladó megjelenített neve |
MAIL_TIMEOUT | 15s | dial/send limit küldésenként |
A mail-nek magának és a mail/mjml-nek nincs Config-ja: a Mailer interfész és az MJML-renderelés nem vesz fel környezetből beállítást.
notify
github.com/gp-system/notify. A Hub/Sender magnak nincs Config-ja; a notify/database-nek sincs (közvetlenül *pg.DB/*bun.DB-t kap, saját változó nélkül). A notify/broadcast-nak viszont van:
notify/broadcast.Config: CHANNEL_PREFIX
Lásd Broadcast.
| Változó | Default | Jelentés |
|---|---|---|
CHANNEL_PREFIX | rt | prefix, amiből minden centrifuge csatornanév épül |
A broadcast.Config-nak nincs fix saját env-prefixe (a dbx.Config-gal vagy az smtp.Config-gal ellentétben): a beágyazó struct envPrefix tagje dönti el a valódi változónevet. A kit saját realtime.Config-ja Broadcast broadcast.Config `envPrefix:"REALTIME_"` alakban ágyazza be, így egy generált projektben ez a változó valójában REALTIME_CHANNEL_PREFIX, nem a fent látott csupasz CHANNEL_PREFIX.
storage
github.com/gp-system/storage. A Driver/Disk/Manager magnak és a storage/local-nak sincs fix env-prefixe: a storage/local.Config-nak van ROOT-ja (kötelező, a lokális gyökérmappa), PUBLIC_BASE_URL-je, BASE_URL-je és SECRET-je (signed URL-ekhez), és a hívó envPrefix-választása dönti el a valódi változóneveket egy projektben, ugyanúgy, mint a fenti broadcast.Config-nál.
storage/driver/s3.Config: envPrefix:"S3_"
github.com/gp-system/storage/driver/s3, a lista egyetlen beágyazott Go modulja (saját go.mod-dal, ami behúzza az AWS-SDK-alakú minio-go klienst). Lásd S3.
| Változó | Default | Jelentés |
|---|---|---|
S3_ENDPOINT | kötelező | az S3-kompatibilis service címe (MinIO, RustFS, AWS S3, ...) |
S3_REGION | us-east-1 | |
S3_BUCKET | kötelező | |
S3_ACCESS_KEY / S3_SECRET_KEY | üres | hitelesítő adatok az endponthoz |
S3_USE_PATH_STYLE | false | /bucket/key címzés virtual-host helyett, a legtöbb self-hosted S3-hoz true |
S3_PUBLIC_BASE_URL | üres | a URL() alapja (CDN vagy publikus bucket-endpoint) |
telemetry.Config: beágyazva, prefix nélkül
github.com/gp-system/telemetry. A server.Config.Telemetry és a worker.Config.Telemetry egyaránt a telemetry.Config{Otel, Log, Sentry} hármast hordozza; a telemetry.Setup egy hívásban komponálja a három alrendszert. Lásd Telemetry: Áttekintés. Minden változó standard néven, a legfelső szinten olvasódik, a beágyazás mélységétől függetlenül.
telemetry/otelx.Config: OTel bootstrap
Lásd OpenTelemetry.
| Változó | Default | Jelentés |
|---|---|---|
OTEL_SERVICE_NAME | kötelező | kötelező, kivéve dev módban: service.name minden telemetrián |
OTEL_SERVICE_VERSION | dev | service.version resource-attribútum |
OTEL_DEV_MODE | false | true → nem jön létre OTel exporter (kivéve, ha a Sentry-tracing ad egyet) |
OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_TRACES_EXPORTER stb. változók érvényesülnek (az OTel autoexport csomagján keresztül); a deployment ugyanúgy konfigurálja a gpsystemet, mint bármely más OTel-instrumentált alkalmazást.telemetry/logx.Config: a default slog logger
Lásd Logolás.
| Változó | Default | Jelentés |
|---|---|---|
LOG_LEVEL | INFO | minimális slog szint (DEBUG/INFO/WARN/ERROR) |
LOG_STDOUT | false | prod módban a logok stdout-ra is kiíródnak (az OTLP-bridge mellett); hagyd kikapcsolva, ha egy collector a konténer-kimenetet is gyűjti, különben duplán érkeznek |
LOG_FORMAT | üres | konzol-formátum: üres/auto → szöveg (dev) vagy JSON (prod); monolog → PHP/Monolog-stílusú sorok teljes útvonalú stack trace-szel (logx/monolog); más érték induláskor hibázik |
telemetry/sentryx.Config: az opcionális Sentry-integráció
Lásd Sentry.
| Változó | Default | Jelentés |
|---|---|---|
SENTRY_DSN | üres | üres → az integráció teljesen kikapcsolva, minden hook no-op |
SENTRY_ENVIRONMENT | dev módban development, egyébként production | environment tag a Sentry-eventeken |
SENTRY_TRACES | true | az OTel spanek Sentrybe is kiszállítódnak (kiegészítő exporterként); false, ha egy collector továbbítja őket, a mintavételt az OTEL_TRACES_SAMPLER vezérli, nem külön Sentry-ráta |
SENTRY_DEBUG | false | a Sentry SDK saját debug-logolása stderr-re |
A compose dev-stack env-változói (nem egy Config mező)
Ezeket a new project generálja a .env.example-be; egyik package Config structjához sem tartoznak, a compose.yml/Dockerfile szubsztitúcióját és a Traefik routingot hajtják.
| Változó | Default | Jelentés |
|---|---|---|
USER_ID / GROUP_ID | 1000 | a dev-konténerek ezzel a host UID/GID-vel futnak (id -u/id -g), hogy a bind-mountolt forrásba írt fájlok a sajátod maradjanak, ne rootéi |
APP_HOST | <projekt>.localhost | a modul-service-ek Traefik Host() rule-ja |
MAILPIT_HOST | mailpit.<projekt>.localhost | a mailpit UI Traefik hostja |
RUSTFS_S3_HOST | rustfs.<projekt>.localhost | a rustfs S3 API Traefik hostja |
RUSTFS_CONSOLE_HOST | rustfs-console.<projekt>.localhost | a rustfs webkonzol Traefik hostja |
A leszállított MAIL_*/S3_* sorok (MAIL_HOST=mailpit, S3_ENDPOINT=http://rustfs:9000, ...) a fenti smtp.Config/s3.Config prefixekkel egyeznek: a mailpit/rustfs compose-service ezekkel indul, de a bekötésük (a mezők felvétele a projekt config.go-jába) opt-in marad.