Referencia

Konfiguráció

Minden modul Config structjának minden környezeti változója, modulonként csoportosítva.

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.

Nincs 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:

internal/platform/config/config.go
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óDefaultJelentés
LISTEN_ADDR:3000a cím, amin a chi hallgat
SHUTDOWN_TIMEOUT10sgraceful shutdown kerete: SIGINT/SIGTERM után ennyit kapnak az in-flight kérések
READ_HEADER_TIMEOUT5sa kérés-fejlécek beérkezésének limitje, ez az elsődleges Slowloris-védelem
READ_TIMEOUT30sa teljes kérés (fejléc + body) beolvasásának limitje
WRITE_TIMEOUT0sa 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_TIMEOUT120smeddig marad nyitva egy tétlen keep-alive kapcsolat
CORS_ORIGINS*engedélyezett originek, vesszővel elválasztva
BODY_LIMIT4194304max 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_ERRORSfalseaz 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óDefaultJelentés
WORKER_CONCURRENCY10egyszerre feldolgozott taskok száma
WORKER_QUEUESdefault:1sor→súly leképezés, pl. critical:6,default:3,low:1 (a nagyobb súlyú sor gyakrabban kap kiszolgálást)
WORKER_STRICT_PRIORITYfalsea nagyobb súlyú sorok kiürítése az alacsonyabbak előtt
WORKER_SHUTDOWN_TIMEOUT30sgraceful drain; a be nem fejezett taskokat az asynq visszasorolja és újrakézbesíti (at-least-once)
WORKER_DEFAULT_MAX_RETRY25retry-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óDefaultJelentés
REALTIME_LISTEN_ADDR:3000a gateway konténeren belüli listen-címe
REALTIME_DRAIN_TIMEOUT20sgraceful shutdown: minden tartott kapcsolat egy reconnect-eligible kóddal szakad le, utána futnak a closerek
REALTIME_READ_HEADER_TIMEOUT5sSlowloris-védelem a connect-handshake-en
REALTIME_MAX_CONNECTIONS0limitá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óDefaultJelentés
DB_HOSTlocalhost
DB_PORT5432
DB_USERkötelező
DB_PASSWORDkötelező
DB_NAMEkötelezőadatbázisnév
DB_SSLMODEdisable
DB_MAX_CONNS10a pgx pool maximális kapcsolatszáma
A 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óDefaultJelentés
DB_ANALYTICS_HOSTlocalhost
DB_ANALYTICS_PORT5432
DB_ANALYTICS_USERkötelező
DB_ANALYTICS_PASSWORDkötelező
DB_ANALYTICS_NAMEkötelezőadatbázisnév
DB_ANALYTICS_SSLMODEdisable
DB_ANALYTICS_MAX_CONNS10e 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óDefaultJelentés
VALKEY_ADDRlocalhost:6379Valkey host:port
VALKEY_PASSWORDüresüres → nincs auth
VALKEY_DB0Valkey 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óDefaultJelentés
OUTBOX_POLL_INTERVAL1svárakozás a pollok közt, ha a batch nem telt meg
OUTBOX_BATCH_SIZE100pollonként lefoglalt sorok (FOR UPDATE SKIP LOCKED)
OUTBOX_RETENTION168hmeddig maradnak meg a publikált sorok a takarítás előtt
OUTBOX_CLEANUP_INTERVAL1hmilyen gyakran törlődnek a retention utáni publikált sorok
OUTBOX_TASK_RETENTION24hasynq-retention / TaskID-dedup ablak a publikált taskokon

events/scheduler.Config: envPrefix:"SCHEDULER_"

Az ütemezett jobok futtatója, lásd Ütemezés.

VáltozóDefaultJelentés
SCHEDULER_TIMEZONEUTCIANA időzóna, amelyben a cron-kifejezések kiértékelődnek (pl. Europe/Budapest)
SCHEDULER_LEASE_TTL15sa 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_NAMESPACEgpsystema 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óDefaultJelentés
JWT_SECRETkötelezőaláíró kulcs, service-enként/környezetenként külön
JWT_ACCESS_TOKEN_TTL15maccess token élettartam
JWT_REFRESH_TOKEN_TTL168hrefresh 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
Állítsd be a 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óDefaultJelentés
MAIL_HOSTkötelezőSMTP szerver címe
MAIL_PORT587
MAIL_USERNAME / MAIL_PASSWORDüresmindkettő üresen → nincs auth (Mailpit, belső relay)
MAIL_AUTHautoauth-mechanizmus: auto (felderítés) | plain | login | cram-md5 | none
MAIL_TLSstarttlsstarttls (kötelező STARTTLS) | starttls-opportunistic (dev, TLS nélküli szerver) | tls (implicit TLS, 465-ös port) | none
MAIL_FROM_ADDRESSköteleződefault feladó cím
MAIL_FROM_NAMEüresdefault feladó megjelenített neve
MAIL_TIMEOUT15sdial/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óDefaultJelentés
CHANNEL_PREFIXrtprefix, 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óDefaultJelentés
S3_ENDPOINTkötelezőaz S3-kompatibilis service címe (MinIO, RustFS, AWS S3, ...)
S3_REGIONus-east-1
S3_BUCKETkötelező
S3_ACCESS_KEY / S3_SECRET_KEYüreshitelesítő adatok az endponthoz
S3_USE_PATH_STYLEfalse/bucket/key címzés virtual-host helyett, a legtöbb self-hosted S3-hoz true
S3_PUBLIC_BASE_URLüresa 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óDefaultJelentés
OTEL_SERVICE_NAMEkötelezőkötelező, kivéve dev módban: service.name minden telemetrián
OTEL_SERVICE_VERSIONdevservice.version resource-attribútum
OTEL_DEV_MODEfalsetrue → nem jön létre OTel exporter (kivéve, ha a Sentry-tracing ad egyet)
Az exporter-végpontok szándékosan nem ebben a configban élnek: a standard 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óDefaultJelentés
LOG_LEVELINFOminimális slog szint (DEBUG/INFO/WARN/ERROR)
LOG_STDOUTfalseprod 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üreskonzol-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óDefaultJelentés
SENTRY_DSNüresüres → az integráció teljesen kikapcsolva, minden hook no-op
SENTRY_ENVIRONMENTdev módban development, egyébként productionenvironment tag a Sentry-eventeken
SENTRY_TRACEStrueaz 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_DEBUGfalsea 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óDefaultJelentés
USER_ID / GROUP_ID1000a 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>.localhosta modul-service-ek Traefik Host() rule-ja
MAILPIT_HOSTmailpit.<projekt>.localhosta mailpit UI Traefik hostja
RUSTFS_S3_HOSTrustfs.<projekt>.localhosta rustfs S3 API Traefik hostja
RUSTFS_CONSOLE_HOSTrustfs-console.<projekt>.localhosta 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.

Copyright © 2026