[{"data":1,"prerenderedAt":1512},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-concepts-configuration":442,"-hu-concepts-configuration-surround":1507},[4,45,60,81,112,129,146,173,197,213,242,280,357,373,385,404,430],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Kezdő lépések","i-lucide-rocket","\u002Fhu\u002Fgetting-started","hu\u002F1.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Bevezetés","\u002Fhu\u002Fgetting-started\u002Fintroduction","hu\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Laravelből érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-laravel","hu\u002F1.getting-started\u002F2.coming-from-laravel","i-lucide-arrow-right-left",{"title":21,"path":22,"stem":23,"icon":19},"Symfonyból érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-symfony","hu\u002F1.getting-started\u002F3.coming-from-symfony",{"title":25,"path":26,"stem":27,"icon":28},"Telepítés","\u002Fhu\u002Fgetting-started\u002Finstallation","hu\u002F1.getting-started\u002F4.installation","i-lucide-download",{"title":30,"path":31,"stem":32,"icon":33},"Az első modulod","\u002Fhu\u002Fgetting-started\u002Ffirst-module","hu\u002F1.getting-started\u002F5.first-module","i-lucide-package-plus",{"title":35,"path":36,"stem":37,"icon":38},"Projektstruktúra","\u002Fhu\u002Fgetting-started\u002Fproject-structure","hu\u002F1.getting-started\u002F6.project-structure","i-lucide-folder-tree",{"title":40,"path":41,"stem":42,"icon":43},"A shop mintaalkalmazás","\u002Fhu\u002Fgetting-started\u002Fsample-app","hu\u002F1.getting-started\u002F7.sample-app","i-lucide-shopping-cart",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"queue","i-lucide-layers","\u002Fhu\u002Fqueue","hu\u002F10.queue",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Áttekintés","\u002Fhu\u002Fqueue\u002Foverview","hu\u002F10.queue\u002F1.overview","i-lucide-list-ordered",{"title":57,"path":58,"stem":59,"icon":47},"Taskok","\u002Fhu\u002Fqueue\u002Ftasks","hu\u002F10.queue\u002F2.tasks",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":44},"events","i-lucide-workflow","\u002Fhu\u002Fevents","hu\u002F11.events",[66,71,76],{"title":67,"path":68,"stem":69,"icon":70},"Események","\u002Fhu\u002Fevents\u002Foverview","hu\u002F11.events\u002F1.overview","i-lucide-radio",{"title":72,"path":73,"stem":74,"icon":75},"Outbox","\u002Fhu\u002Fevents\u002Foutbox","hu\u002F11.events\u002F2.outbox","i-lucide-inbox",{"title":77,"path":78,"stem":79,"icon":80},"Ütemezés","\u002Fhu\u002Fevents\u002Fscheduler","hu\u002F11.events\u002F3.scheduler","i-lucide-calendar-clock",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":44},"auth","i-lucide-shield-check","\u002Fhu\u002Fauth","hu\u002F12.auth",[87,92,97,102,107],{"title":88,"path":89,"stem":90,"icon":91},"Autentikáció","\u002Fhu\u002Fauth\u002Foverview","hu\u002F12.auth\u002F1.overview","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"RBAC","\u002Fhu\u002Fauth\u002Frbac","hu\u002F12.auth\u002F2.rbac","i-lucide-users",{"title":98,"path":99,"stem":100,"icon":101},"Policy-k","\u002Fhu\u002Fauth\u002Fpolicy","hu\u002F12.auth\u002F3.policy","i-lucide-gavel",{"title":103,"path":104,"stem":105,"icon":106},"Az auth önálló használata","\u002Fhu\u002Fauth\u002Fstandalone","hu\u002F12.auth\u002F4.standalone","i-lucide-plug",{"title":108,"path":109,"stem":110,"icon":111},"Social login goth-tal, önállóan","\u002Fhu\u002Fauth\u002Fsocial-standalone","hu\u002F12.auth\u002F5.social-standalone","i-lucide-log-in",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":44},"mail","i-lucide-mail","\u002Fhu\u002Fmail","hu\u002F13.mail",[118,121,125],{"title":52,"path":119,"stem":120,"icon":114},"\u002Fhu\u002Fmail\u002Foverview","hu\u002F13.mail\u002F1.overview",{"title":122,"path":123,"stem":124,"icon":114},"SMTP","\u002Fhu\u002Fmail\u002Fsmtp","hu\u002F13.mail\u002F2.smtp",{"title":126,"path":127,"stem":128,"icon":114},"MJML","\u002Fhu\u002Fmail\u002Fmjml","hu\u002F13.mail\u002F3.mjml",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":44},"notify","i-lucide-bell","\u002Fhu\u002Fnotify","hu\u002F14.notify",[135,138,142],{"title":52,"path":136,"stem":137,"icon":131},"\u002Fhu\u002Fnotify\u002Foverview","hu\u002F14.notify\u002F1.overview",{"title":139,"path":140,"stem":141,"icon":131},"Database csatorna","\u002Fhu\u002Fnotify\u002Fdatabase","hu\u002F14.notify\u002F2.database",{"title":143,"path":144,"stem":145,"icon":131},"Broadcast csatorna","\u002Fhu\u002Fnotify\u002Fbroadcast","hu\u002F14.notify\u002F3.broadcast",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":44},"storage","i-lucide-hard-drive","\u002Fhu\u002Fstorage","hu\u002F15.storage",[152,155,159,163,168],{"title":52,"path":153,"stem":154,"icon":148},"\u002Fhu\u002Fstorage\u002Foverview","hu\u002F15.storage\u002F1.overview",{"title":156,"path":157,"stem":158},"Disk API","\u002Fhu\u002Fstorage\u002Fdisk-api","hu\u002F15.storage\u002F2.disk-api",{"title":160,"path":161,"stem":162,"icon":148},"Memória és helyi lemez","\u002Fhu\u002Fstorage\u002Flocal","hu\u002F15.storage\u002F3.local",{"title":164,"path":165,"stem":166,"icon":167},"S3","\u002Fhu\u002Fstorage\u002Fs3","hu\u002F15.storage\u002F4.s3","i-lucide-cloud",{"title":169,"path":170,"stem":171,"icon":172},"Tesztelés","\u002Fhu\u002Fstorage\u002Ftesting","hu\u002F15.storage\u002F5.testing","i-lucide-flask-conical",{"title":174,"icon":175,"path":176,"stem":177,"children":178,"page":44},"telemetry","i-lucide-activity","\u002Fhu\u002Ftelemetry","hu\u002F16.telemetry",[179,182,187,192],{"title":52,"path":180,"stem":181,"icon":175},"\u002Fhu\u002Ftelemetry\u002Foverview","hu\u002F16.telemetry\u002F1.overview",{"title":183,"path":184,"stem":185,"icon":186},"Logolás","\u002Fhu\u002Ftelemetry\u002Flogging","hu\u002F16.telemetry\u002F2.logging","i-lucide-scroll-text",{"title":188,"path":189,"stem":190,"icon":191},"OpenTelemetry","\u002Fhu\u002Ftelemetry\u002Fopentelemetry","hu\u002F16.telemetry\u002F3.opentelemetry","i-lucide-radar",{"title":193,"path":194,"stem":195,"icon":196},"Sentry","\u002Fhu\u002Ftelemetry\u002Fsentry","hu\u002F16.telemetry\u002F4.sentry","i-lucide-bug",{"title":198,"icon":199,"path":200,"stem":201,"children":202,"page":44},"Referencia","i-lucide-book-open","\u002Fhu\u002Freference","hu\u002F17.reference",[203,208],{"title":204,"path":205,"stem":206,"icon":207},"Konfiguráció","\u002Fhu\u002Freference\u002Fconfiguration","hu\u002F17.reference\u002F1.configuration","i-lucide-settings",{"title":209,"path":210,"stem":211,"icon":212},"Külső függőségek","\u002Fhu\u002Freference\u002Fdependencies","hu\u002F17.reference\u002F2.dependencies","i-lucide-package",{"title":214,"icon":215,"path":216,"stem":217,"children":218,"page":44},"Koncepciók","i-lucide-lightbulb","\u002Fhu\u002Fconcepts","hu\u002F2.concepts",[219,223,228,232,237],{"title":220,"path":221,"stem":222,"icon":47},"Architektúra","\u002Fhu\u002Fconcepts\u002Farchitecture","hu\u002F2.concepts\u002F1.architecture",{"title":224,"path":225,"stem":226,"icon":227},"Hibamodell","\u002Fhu\u002Fconcepts\u002Ferror-model","hu\u002F2.concepts\u002F2.error-model","i-lucide-shield-alert",{"title":204,"path":229,"stem":230,"icon":231},"\u002Fhu\u002Fconcepts\u002Fconfiguration","hu\u002F2.concepts\u002F3.configuration","i-lucide-settings-2",{"title":233,"path":234,"stem":235,"icon":236},"Codegen pipeline","\u002Fhu\u002Fconcepts\u002Fcodegen-pipeline","hu\u002F2.concepts\u002F4.codegen-pipeline","i-lucide-file-json",{"title":238,"path":239,"stem":240,"icon":241},"Design patternek","\u002Fhu\u002Fconcepts\u002Fdesign-patterns","hu\u002F2.concepts\u002F5.design-patterns","i-lucide-puzzle",{"title":243,"icon":244,"path":245,"stem":246,"children":247,"page":44},"A kit","i-lucide-box","\u002Fhu\u002Fkit","hu\u002F3.kit",[248,252,257,262,267,271,276],{"title":249,"path":250,"stem":251,"icon":244},"A kit áttekintése","\u002Fhu\u002Fkit\u002Foverview","hu\u002F3.kit\u002F1.overview",{"title":253,"path":254,"stem":255,"icon":256},"Alkalmazás-életciklus","\u002Fhu\u002Fkit\u002Fapp","hu\u002F3.kit\u002F2.app","i-lucide-power",{"title":258,"path":259,"stem":260,"icon":261},"Szerver","\u002Fhu\u002Fkit\u002Fserver","hu\u002F3.kit\u002F3.server","i-lucide-server",{"title":263,"path":264,"stem":265,"icon":266},"Worker","\u002Fhu\u002Fkit\u002Fworker","hu\u002F3.kit\u002F4.worker","i-lucide-cog",{"title":268,"path":269,"stem":270,"icon":70},"Realtime","\u002Fhu\u002Fkit\u002Frealtime","hu\u002F3.kit\u002F5.realtime",{"title":272,"path":273,"stem":274,"icon":275},"Migrációk","\u002Fhu\u002Fkit\u002Fmigrations","hu\u002F3.kit\u002F6.migrations","i-lucide-file-stack",{"title":277,"path":278,"stem":279,"icon":111},"Social login","\u002Fhu\u002Fkit\u002Fsocial-login","hu\u002F3.kit\u002F7.social-login",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":44},"CLI referencia","i-lucide-terminal","\u002Fhu\u002Fcli","hu\u002F4.cli",[286,289,294,299,304,309,314,319,324,329,334,338,343,348,352],{"title":52,"path":287,"stem":288,"icon":282},"\u002Fhu\u002Fcli\u002Foverview","hu\u002F4.cli\u002F1.overview",{"title":290,"path":291,"stem":292,"icon":293},"add db","\u002Fhu\u002Fcli\u002Fadd-db","hu\u002F4.cli\u002F10.add-db","i-lucide-database-zap",{"title":295,"path":296,"stem":297,"icon":298},"add compose \u002F add docker","\u002Fhu\u002Fcli\u002Fadd-compose","hu\u002F4.cli\u002F11.add-compose","i-lucide-container",{"title":300,"path":301,"stem":302,"icon":303},"add mail","\u002Fhu\u002Fcli\u002Fadd-mail","hu\u002F4.cli\u002F12.add-mail","i-lucide-mail-plus",{"title":305,"path":306,"stem":307,"icon":308},"add notification","\u002Fhu\u002Fcli\u002Fadd-notification","hu\u002F4.cli\u002F13.add-notification","i-lucide-bell-plus",{"title":310,"path":311,"stem":312,"icon":313},"add realtime","\u002Fhu\u002Fcli\u002Fadd-realtime","hu\u002F4.cli\u002F14.add-realtime","i-lucide-radio-tower",{"title":315,"path":316,"stem":317,"icon":318},"add seeder","\u002Fhu\u002Fcli\u002Fadd-seeder","hu\u002F4.cli\u002F15.add-seeder","i-lucide-sprout",{"title":320,"path":321,"stem":322,"icon":323},"new project","\u002Fhu\u002Fcli\u002Fnew-project","hu\u002F4.cli\u002F2.new-project","i-lucide-folder-plus",{"title":325,"path":326,"stem":327,"icon":328},"new module","\u002Fhu\u002Fcli\u002Fnew-module","hu\u002F4.cli\u002F3.new-module","i-lucide-blocks",{"title":330,"path":331,"stem":332,"icon":333},"add surface","\u002Fhu\u002Fcli\u002Fadd-surface","hu\u002F4.cli\u002F4.add-surface","i-lucide-layers-2",{"title":335,"path":336,"stem":337,"icon":244},"add core","\u002Fhu\u002Fcli\u002Fadd-core","hu\u002F4.cli\u002F5.add-core",{"title":339,"path":340,"stem":341,"icon":342},"add handler","\u002Fhu\u002Fcli\u002Fadd-handler","hu\u002F4.cli\u002F6.add-handler","i-lucide-webhook",{"title":344,"path":345,"stem":346,"icon":347},"new migration","\u002Fhu\u002Fcli\u002Fnew-migration","hu\u002F4.cli\u002F7.new-migration","i-lucide-file-plus",{"title":349,"path":350,"stem":351,"icon":266},"worker generátorok","\u002Fhu\u002Fcli\u002Fworker-generators","hu\u002F4.cli\u002F8.worker-generators",{"title":353,"path":354,"stem":355,"icon":356},"upgrade templates","\u002Fhu\u002Fcli\u002Fupgrade-templates","hu\u002F4.cli\u002F9.upgrade-templates","i-lucide-refresh-cw",{"title":358,"icon":227,"path":359,"stem":360,"children":361,"page":44},"errs","\u002Fhu\u002Ferrs","hu\u002F5.errs",[362,365,369],{"title":52,"path":363,"stem":364,"icon":227},"\u002Fhu\u002Ferrs\u002Foverview","hu\u002F5.errs\u002F1.overview",{"title":366,"path":367,"stem":368},"API","\u002Fhu\u002Ferrs\u002Fapi","hu\u002F5.errs\u002F2.api",{"title":370,"path":371,"stem":372,"icon":227},"Integráció","\u002Fhu\u002Ferrs\u002Fintegration","hu\u002F5.errs\u002F3.integration",{"title":374,"icon":231,"path":375,"stem":376,"children":377,"page":44},"envconf","\u002Fhu\u002Fenvconf","hu\u002F6.envconf",[378,381],{"title":52,"path":379,"stem":380,"icon":231},"\u002Fhu\u002Fenvconf\u002Foverview","hu\u002F6.envconf\u002F1.overview",{"title":382,"path":383,"stem":384},"Receptek","\u002Fhu\u002Fenvconf\u002Frecipes","hu\u002F6.envconf\u002F2.recipes",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":44},"httperr","i-lucide-globe","\u002Fhu\u002Fhttperr","hu\u002F7.httperr",[391,394,399],{"title":52,"path":392,"stem":393,"icon":387},"\u002Fhu\u002Fhttperr\u002Foverview","hu\u002F7.httperr\u002F1.overview",{"title":395,"path":396,"stem":397,"icon":398},"Hibaválaszok","\u002Fhu\u002Fhttperr\u002Ferror-responses","hu\u002F7.httperr\u002F2.error-responses","i-lucide-octagon-alert",{"title":400,"path":401,"stem":402,"icon":403},"Validáció","\u002Fhu\u002Fhttperr\u002Fvalidation","hu\u002F7.httperr\u002F3.validation","i-lucide-badge-check",{"title":405,"icon":406,"path":407,"stem":408,"children":409,"page":44},"dbx","i-lucide-database","\u002Fhu\u002Fdbx","hu\u002F8.dbx",[410,413,417,421,426],{"title":52,"path":411,"stem":412,"icon":406},"\u002Fhu\u002Fdbx\u002Foverview","hu\u002F8.dbx\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":106},"pgx","\u002Fhu\u002Fdbx\u002Fpg","hu\u002F8.dbx\u002F2.pg",{"title":418,"path":419,"stem":420,"icon":47},"bun","\u002Fhu\u002Fdbx\u002Fbunx","hu\u002F8.dbx\u002F3.bunx",{"title":422,"path":423,"stem":424,"icon":425},"Tranzakciók","\u002Fhu\u002Fdbx\u002Ftransactions","hu\u002F8.dbx\u002F4.transactions","i-lucide-git-merge",{"title":427,"path":428,"stem":429,"icon":318},"Seederek","\u002Fhu\u002Fdbx\u002Fseed","hu\u002F8.dbx\u002F5.seed",{"title":431,"icon":55,"path":432,"stem":433,"children":434,"page":44},"paginate","\u002Fhu\u002Fpaginate","hu\u002F9.paginate",[435,438],{"title":52,"path":436,"stem":437,"icon":55},"\u002Fhu\u002Fpaginate\u002Foverview","hu\u002F9.paginate\u002F1.overview",{"title":439,"path":440,"stem":441,"icon":19},"Cursor-lapozás","\u002Fhu\u002Fpaginate\u002Fcursor","hu\u002F9.paginate\u002F2.cursor",{"id":443,"title":204,"body":444,"description":1500,"extension":1501,"links":1502,"meta":1503,"navigation":1504,"path":229,"seo":1505,"stem":230,"__hash__":1506},"docs_hu\u002Fhu\u002F2.concepts\u002F3.configuration.md",{"type":445,"value":446,"toc":1492},"minimark",[447,465,486,491,505,703,739,781,829,833,836,1088,1091,1261,1284,1291,1310,1363,1402,1406,1440,1444,1488],[448,449,450,451,455,456,460,461,464],"p",{},"A gpsystemben a konfiguráció betöltése egyetlen lépés: ",[452,453,454],"strong",{},"env-változók egy típusos Go structba töltve, egyszer, a processz indulásakor."," Nincs ",[457,458,459],"code",{},"config()"," helper és nincs config-cache: a struct maga a cache, és az elgépelt kulcs nem ",[457,462,463],{},"null","-t ad futás közben, hanem fordítási hibát.",[448,466,467,468,471,472,477,478,481,482,485],{},"Ez a 12-factor \"config a környezetből\" elve: a konfiguráció ",[452,469,470],{},"a processz indulásakor, a környezetből"," olvasódik be, és a bináris minden környezetben (dev, staging, production) ugyanaz, csak az env más. Maga a betöltő mechanizmus, az ",[473,474,475],"a",{"href":379},[457,476,374],{},", önálló modul (",[457,479,480],{},"github.com\u002Fgp-system\u002Fenvconf","), semmilyen gpsystem-specifikus tudás nélkül: ez az oldal arról szól, mit csinál egy ",[452,483,484],{},"generált projekt"," ezzel, hogyan komponálja egy tucatnyi modul beállításait egyetlen structba.",[487,488,490],"h2",{"id":489},"struct-kompozíció","Struct-kompozíció",[448,492,493,494,497,498,500,501,504],{},"Minden önálló modul saját env-tagelt ",[457,495,496],{},"Config"," structot exportál, a saját mezőit nevezve, anélkül, hogy tudná, mi (ha egyáltalán) fogja prefixelni. Egy generált projekt ezeket a structokat egyetlen gyökér-",[457,499,496],{},"-ba komponálja ",[457,502,503],{},"envPrefix","-szel:",[506,507,513],"pre",{"className":508,"code":509,"filename":510,"language":511,"meta":512,"style":512},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","package config\n\nimport (\n    \"github.com\u002Fgp-system\u002Fdbx\"\n    \"github.com\u002Fgp-system\u002Fevents\u002Foutbox\"\n    \"github.com\u002Fgp-system\u002Fgpsystem\u002Fserver\"\n    \"github.com\u002Fgp-system\u002Fgpsystem\u002Fworker\"\n    \u002F\u002F gpsystem:imports\n)\n\ntype Config struct {\n    Server server.Config\n    DB     dbx.Config `envPrefix:\"DB_\"`\n    Worker worker.Config\n    Outbox outbox.Config `envPrefix:\"OUTBOX_\"`\n    \u002F\u002F gpsystem:config\n}\n","internal\u002Fplatform\u002Fconfig\u002Fconfig.go","go","",[457,514,515,528,535,545,557,567,577,587,594,600,605,620,636,658,671,691,697],{"__ignoreMap":512},[516,517,520,524],"span",{"class":518,"line":519},"line",1,[516,521,523],{"class":522},"sMK4o","package",[516,525,527],{"class":526},"sBMFI"," config\n",[516,529,531],{"class":518,"line":530},2,[516,532,534],{"emptyLinePlaceholder":533},true,"\n",[516,536,538,542],{"class":518,"line":537},3,[516,539,541],{"class":540},"s7zQu","import",[516,543,544],{"class":522}," (\n",[516,546,548,551,554],{"class":518,"line":547},4,[516,549,550],{"class":522},"    \"",[516,552,553],{"class":526},"github.com\u002Fgp-system\u002Fdbx",[516,555,556],{"class":522},"\"\n",[516,558,560,562,565],{"class":518,"line":559},5,[516,561,550],{"class":522},[516,563,564],{"class":526},"github.com\u002Fgp-system\u002Fevents\u002Foutbox",[516,566,556],{"class":522},[516,568,570,572,575],{"class":518,"line":569},6,[516,571,550],{"class":522},[516,573,574],{"class":526},"github.com\u002Fgp-system\u002Fgpsystem\u002Fserver",[516,576,556],{"class":522},[516,578,580,582,585],{"class":518,"line":579},7,[516,581,550],{"class":522},[516,583,584],{"class":526},"github.com\u002Fgp-system\u002Fgpsystem\u002Fworker",[516,586,556],{"class":522},[516,588,590],{"class":518,"line":589},8,[516,591,593],{"class":592},"sHwdD","    \u002F\u002F gpsystem:imports\n",[516,595,597],{"class":518,"line":596},9,[516,598,599],{"class":522},")\n",[516,601,603],{"class":518,"line":602},10,[516,604,534],{"emptyLinePlaceholder":533},[516,606,608,611,614,617],{"class":518,"line":607},11,[516,609,610],{"class":522},"type",[516,612,613],{"class":526}," Config",[516,615,616],{"class":522}," struct",[516,618,619],{"class":522}," {\n",[516,621,623,627,630,633],{"class":518,"line":622},12,[516,624,626],{"class":625},"sTEyZ","    Server ",[516,628,629],{"class":526},"server",[516,631,632],{"class":522},".",[516,634,635],{"class":526},"Config\n",[516,637,639,642,644,646,648,651,655],{"class":518,"line":638},13,[516,640,641],{"class":625},"    DB     ",[516,643,405],{"class":526},[516,645,632],{"class":522},[516,647,496],{"class":526},[516,649,650],{"class":522}," `",[516,652,654],{"class":653},"sfazB","envPrefix:\"DB_\"",[516,656,657],{"class":522},"`\n",[516,659,661,664,667,669],{"class":518,"line":660},14,[516,662,663],{"class":625},"    Worker ",[516,665,666],{"class":526},"worker",[516,668,632],{"class":522},[516,670,635],{"class":526},[516,672,674,677,680,682,684,686,689],{"class":518,"line":673},15,[516,675,676],{"class":625},"    Outbox ",[516,678,679],{"class":526},"outbox",[516,681,632],{"class":522},[516,683,496],{"class":526},[516,685,650],{"class":522},[516,687,688],{"class":653},"envPrefix:\"OUTBOX_\"",[516,690,657],{"class":522},[516,692,694],{"class":518,"line":693},16,[516,695,696],{"class":592},"    \u002F\u002F gpsystem:config\n",[516,698,700],{"class":518,"line":699},17,[516,701,702],{"class":522},"}\n",[506,704,707],{"className":508,"code":705,"filename":706,"language":511,"meta":512,"style":512},"cfg := envconf.MustLoad[config.Config]()\n","cmd\u002Fshop\u002Fmain.go",[457,708,709],{"__ignoreMap":512},[516,710,711,714,717,720,722,726,729,732,734,736],{"class":518,"line":519},[516,712,713],{"class":625},"cfg ",[516,715,716],{"class":522},":=",[516,718,719],{"class":625}," envconf",[516,721,632],{"class":522},[516,723,725],{"class":724},"s2Zo4","MustLoad",[516,727,728],{"class":522},"[",[516,730,731],{"class":526},"config",[516,733,632],{"class":522},[516,735,496],{"class":526},[516,737,738],{"class":522},"]()\n",[448,740,741,742,745,746,749,750,753,754,753,757,760,761,763,764,753,767,753,770,773,774,753,777,780],{},"A kompozíció szabálya egyszerű: ",[452,743,744],{},"egy modul a saját mezőit nevezi, a beágyazó dönti el a prefixet."," A ",[457,747,748],{},"dbx.Config"," mezői ",[457,751,752],{},"HOST",", ",[457,755,756],{},"PORT",[457,758,759],{},"USER",", ...: a ",[457,762,654],{}," alatt ezek ",[457,765,766],{},"DB_HOST",[457,768,769],{},"DB_PORT",[457,771,772],{},"DB_USER"," lesznek. A prefix nélkül beágyazott structok (",[457,775,776],{},"server.Config",[457,778,779],{},"worker.Config",") standard, top-level neveket olvasnak.",[448,782,783,784,786,787,790,791,794,795,794,798,801,802,805,806,753,809,753,812,753,815,818,819,821,822,753,825,828],{},"A beágyazás mélyebbre is megy: a ",[457,785,776],{}," maga is beágyazza a ",[457,788,789],{},"telemetry.Config","-ot, ami a ",[457,792,793],{},"telemetry\u002Fotelx"," + ",[457,796,797],{},"telemetry\u002Flogx",[457,799,800],{},"telemetry\u002Fsentryx"," konfigját fogja össze: mind prefix nélkül, mert ezek ",[452,803,804],{},"iparági standard nevek"," (",[457,807,808],{},"OTEL_SERVICE_NAME",[457,810,811],{},"OTEL_DEV_MODE",[457,813,814],{},"LOG_LEVEL",[457,816,817],{},"SENTRY_DSN","), amiket minden OTel-\u002FSentry-kompatibilis eszköz ugyanígy vár. A ",[457,820,779],{}," pedig a Valkey- és scheduler-konfigot prefixeli (",[457,823,824],{},"VALKEY_ADDR",[457,826,827],{},"SCHEDULER_TIMEZONE",").",[487,830,832],{"id":831},"az-env-prefix-konvenciók","Az env-prefix konvenciók",[448,834,835],{},"A modulok közt, amiket egy projekt ténylegesen bedrótoz, a prefixek egy konzisztens készletté állnak össze:",[837,838,839,855],"table",{},[840,841,842],"thead",{},[843,844,845,849,852],"tr",{},[846,847,848],"th",{},"Prefix",[846,850,851],{},"Modul",[846,853,854],{},"Példa változók",[856,857,858,881,899,919,939,958,978,996,1016,1035,1055],"tbody",{},[843,859,860,867,873],{},[861,862,863],"td",{},[864,865,866],"em",{},"(nincs)",[861,868,869,870,872],{},"a kit ",[457,871,629],{},"-je",[861,874,875,753,878],{},[457,876,877],{},"LISTEN_ADDR",[457,879,880],{},"SHUTDOWN_TIMEOUT",[843,882,883,887,891],{},[861,884,885],{},[864,886,866],{},[861,888,869,889,872],{},[457,890,666],{},[861,892,893,753,896],{},[457,894,895],{},"WORKER_CONCURRENCY",[457,897,898],{},"WORKER_QUEUES",[843,900,901,905,911],{},[861,902,903],{},[864,904,866],{},[861,906,869,907,910],{},[457,908,909],{},"realtime","-ja",[861,912,913,753,916],{},[457,914,915],{},"REALTIME_LISTEN_ADDR",[457,917,918],{},"REALTIME_CHANNEL_PREFIX",[843,920,921,926,930],{},[861,922,923],{},[457,924,925],{},"DB_",[861,927,928],{},[457,929,405],{},[861,931,932,753,934,753,936],{},[457,933,766],{},[457,935,772],{},[457,937,938],{},"DB_PASSWORD",[843,940,941,946,950],{},[861,942,943],{},[457,944,945],{},"JWT_",[861,947,948],{},[457,949,82],{},[861,951,952,753,955],{},[457,953,954],{},"JWT_SECRET",[457,956,957],{},"JWT_ACCESS_TOKEN_TTL",[843,959,960,965,970],{},[861,961,962],{},[457,963,964],{},"MAIL_",[861,966,967],{},[457,968,969],{},"mail\u002Fsmtp",[861,971,972,753,975],{},[457,973,974],{},"MAIL_HOST",[457,976,977],{},"MAIL_FROM_ADDRESS",[843,979,980,985,989],{},[861,981,982],{},[457,983,984],{},"VALKEY_",[861,986,987],{},[457,988,46],{},[861,990,991,753,993],{},[457,992,824],{},[457,994,995],{},"VALKEY_PASSWORD",[843,997,998,1003,1008],{},[861,999,1000],{},[457,1001,1002],{},"OUTBOX_",[861,1004,1005],{},[457,1006,1007],{},"events\u002Foutbox",[861,1009,1010,753,1013],{},[457,1011,1012],{},"OUTBOX_POLL_INTERVAL",[457,1014,1015],{},"OUTBOX_BATCH_SIZE",[843,1017,1018,1023,1028],{},[861,1019,1020],{},[457,1021,1022],{},"SCHEDULER_",[861,1024,1025],{},[457,1026,1027],{},"events\u002Fscheduler",[861,1029,1030,753,1032],{},[457,1031,827],{},[457,1033,1034],{},"SCHEDULER_LEASE_TTL",[843,1036,1037,1042,1047],{},[861,1038,1039],{},[457,1040,1041],{},"S3_",[861,1043,1044],{},[457,1045,1046],{},"storage\u002Fdriver\u002Fs3",[861,1048,1049,753,1052],{},[457,1050,1051],{},"S3_ENDPOINT",[457,1053,1054],{},"S3_BUCKET",[843,1056,1057,1062,1077],{},[861,1058,1059],{},[864,1060,1061],{},"(nincs, standard)",[861,1063,1064,805,1066,1069,1070,1069,1073,1076],{},[457,1065,174],{},[457,1067,1068],{},"otelx","\u002F",[457,1071,1072],{},"logx",[457,1074,1075],{},"sentryx",")",[861,1078,1079,753,1082,753,1085],{},[457,1080,1081],{},"OTEL_*",[457,1083,1084],{},"LOG_*",[457,1086,1087],{},"SENTRY_*",[448,1089,1090],{},"A shop env-felülete, több fentiből összerakott részlet:",[506,1092,1097],{"className":1093,"code":1094,"filename":1095,"language":1096,"meta":512,"style":512},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# server.Config: prefix nélkül\nLISTEN_ADDR=:3000\nSHUTDOWN_TIMEOUT=10s\n\n# telemetry (a server.Config-ba ágyazva): standard nevek\nOTEL_SERVICE_NAME=shop\nOTEL_DEV_MODE=true\nLOG_FORMAT=monolog\nSENTRY_DSN=\n\n# dbx.Config: DB_ prefixszel\nDB_HOST=localhost\nDB_USER=shop\nDB_PASSWORD=secret\nDB_NAME=shop\n\n# worker.Config: WORKER_* és VALKEY_*\nWORKER_CONCURRENCY=10\nVALKEY_ADDR=localhost:6379\n\n# outbox.Config: OUTBOX_ prefixszel\nOUTBOX_POLL_INTERVAL=1s\n",".env","sh",[457,1098,1099,1104,1114,1123,1127,1132,1141,1150,1160,1167,1171,1176,1185,1193,1202,1211,1215,1220,1230,1240,1245,1251],{"__ignoreMap":512},[516,1100,1101],{"class":518,"line":519},[516,1102,1103],{"class":592},"# server.Config: prefix nélkül\n",[516,1105,1106,1108,1111],{"class":518,"line":530},[516,1107,877],{"class":625},[516,1109,1110],{"class":522},"=",[516,1112,1113],{"class":653},":3000\n",[516,1115,1116,1118,1120],{"class":518,"line":537},[516,1117,880],{"class":625},[516,1119,1110],{"class":522},[516,1121,1122],{"class":653},"10s\n",[516,1124,1125],{"class":518,"line":547},[516,1126,534],{"emptyLinePlaceholder":533},[516,1128,1129],{"class":518,"line":559},[516,1130,1131],{"class":592},"# telemetry (a server.Config-ba ágyazva): standard nevek\n",[516,1133,1134,1136,1138],{"class":518,"line":569},[516,1135,808],{"class":625},[516,1137,1110],{"class":522},[516,1139,1140],{"class":653},"shop\n",[516,1142,1143,1145,1147],{"class":518,"line":579},[516,1144,811],{"class":625},[516,1146,1110],{"class":522},[516,1148,1149],{"class":653},"true\n",[516,1151,1152,1155,1157],{"class":518,"line":589},[516,1153,1154],{"class":625},"LOG_FORMAT",[516,1156,1110],{"class":522},[516,1158,1159],{"class":653},"monolog\n",[516,1161,1162,1164],{"class":518,"line":596},[516,1163,817],{"class":625},[516,1165,1166],{"class":522},"=\n",[516,1168,1169],{"class":518,"line":602},[516,1170,534],{"emptyLinePlaceholder":533},[516,1172,1173],{"class":518,"line":607},[516,1174,1175],{"class":592},"# dbx.Config: DB_ prefixszel\n",[516,1177,1178,1180,1182],{"class":518,"line":622},[516,1179,766],{"class":625},[516,1181,1110],{"class":522},[516,1183,1184],{"class":653},"localhost\n",[516,1186,1187,1189,1191],{"class":518,"line":638},[516,1188,772],{"class":625},[516,1190,1110],{"class":522},[516,1192,1140],{"class":653},[516,1194,1195,1197,1199],{"class":518,"line":660},[516,1196,938],{"class":625},[516,1198,1110],{"class":522},[516,1200,1201],{"class":653},"secret\n",[516,1203,1204,1207,1209],{"class":518,"line":673},[516,1205,1206],{"class":625},"DB_NAME",[516,1208,1110],{"class":522},[516,1210,1140],{"class":653},[516,1212,1213],{"class":518,"line":693},[516,1214,534],{"emptyLinePlaceholder":533},[516,1216,1217],{"class":518,"line":699},[516,1218,1219],{"class":592},"# worker.Config: WORKER_* és VALKEY_*\n",[516,1221,1223,1225,1227],{"class":518,"line":1222},18,[516,1224,895],{"class":625},[516,1226,1110],{"class":522},[516,1228,1229],{"class":653},"10\n",[516,1231,1233,1235,1237],{"class":518,"line":1232},19,[516,1234,824],{"class":625},[516,1236,1110],{"class":522},[516,1238,1239],{"class":653},"localhost:6379\n",[516,1241,1243],{"class":518,"line":1242},20,[516,1244,534],{"emptyLinePlaceholder":533},[516,1246,1248],{"class":518,"line":1247},21,[516,1249,1250],{"class":592},"# outbox.Config: OUTBOX_ prefixszel\n",[516,1252,1254,1256,1258],{"class":518,"line":1253},22,[516,1255,1012],{"class":625},[516,1257,1110],{"class":522},[516,1259,1260],{"class":653},"1s\n",[1262,1263,1265,1266,753,1268,1270,1271,753,1274,753,1277,1280,1281,632],"note",{"title":1264},"Nincs GPSYSTEM_* namespace","Sem egyik modul, sem a kit egyetlen része sem vezet be saját env-namespace-t. Ahol létezik iparági standard név (",[457,1267,1081],{},[457,1269,1087],{},"), ott azt használja változatlanul; ahol nem, ott rövid, prefixelt neveket (",[457,1272,1273],{},"DB_*",[457,1275,1276],{},"VALKEY_*",[457,1278,1279],{},"WORKER_*","). Így a deployod ugyanúgy néz ki, mint bármely más OTel-instrumentált appé. A teljes változó-tábla, generált projektenként: ",[473,1282,1283],{"href":205},"Konfiguráció-referencia",[487,1285,1287,1288,1290],{"id":1286},"a-env-fájl-betöltési-sorrendje","A ",[457,1289,1095],{}," fájl betöltési sorrendje",[448,1292,1293,1294,1296,1297,1299,1300,1303,1304,1306,1307,1309],{},"Parsolás előtt, best-effort jelleggel, az ",[473,1295,374],{"href":379}," godotenv-en keresztül betölti a munkamappa ",[457,1298,1095],{}," fájlját, ha létezik: ",[452,1301,1302],{},"meglévő környezeti változót sosem ír felül",", tehát a ",[457,1305,1095],{}," csak kitölti, amit a processz környezete még nem adott meg. Ez az egyetlen szabály teszi lehetővé, hogy ugyanaz a ",[457,1308,496],{}," struct minden kontextusban helyesen viselkedjen:",[1311,1312,1313,1327,1354],"ul",{},[1314,1315,1316,1319,1320,1323,1324,1326],"li",{},[452,1317,1318],{},"Lokális fejlesztés",": a shellben semmi nincs exportálva; a generált projekt egy ",[457,1321,1322],{},".env.example","-t szállít, amit ",[457,1325,1095],{},"-re másolsz, és minden érték a fájlból jön.",[1314,1328,1329,1332,1333,1336,1337,1339,1340,753,1343,1346,1347,1350,1351,1353],{},[452,1330,1331],{},"A dev docker-compose stack",": a ",[457,1334,1335],{},"mise run dev"," elindítja a compose service-eket (Postgres, Valkey, Mailpit, RustFS) és az app-konténert ugyanazzal a ",[457,1338,1095],{},"-vel; a fájlban lévő service-hostnevek (",[457,1341,1342],{},"DB_HOST=postgres",[457,1344,1345],{},"VALKEY_ADDR=valkey:6379",") a compose belső DNS-ére oldódnak fel, nem ",[457,1348,1349],{},"localhost","-ra. A teljes stackhez lásd a ",[473,1352,25],{"href":26}," oldalt.",[1314,1355,1356,1359,1360,1362],{},[452,1357,1358],{},"Staging\u002Fproduction",": a valódi környezet (egy systemd unit, egy Kubernetes ConfigMap\u002FSecret) közvetlenül állítja be a változókat; általában nincs is ",[457,1361,1095],{}," fájl, és ha lenne is, a már beállított változók akkor is nyernének.",[448,1364,1365,1366,1369,1370,1373,1374,1377,1378,1381,1382,1069,1385,1069,1387,1390,1391,1394,1395,1398,1399,1353],{},"Az ",[457,1367,1368],{},"envconf.MustLoad"," a ",[457,1371,1372],{},"main()"," első sora: hiányzó ",[457,1375,1376],{},"required"," változónál a hiba a ",[452,1379,1380],{},"változó nevével"," bukik ki, induláskor. Egy service sem bootol félig konfigurálva, hogy aztán az első kérésnél derüljön ki, mi hiányzik. Magához a ",[457,1383,1384],{},"Load",[457,1386,725],{},[457,1388,1389],{},"LoadPrefixed","-hoz lásd az ",[473,1392,1393],{"href":379},"envconf: Áttekintés"," oldalt, a fenti alapesetnél tovább menő kompozíciós és tesztelési mintákhoz (multi-instance kapcsolatok, ",[457,1396,1397],{},"t.Setenv"," tesztekben) pedig az ",[473,1400,1401],{"href":383},"envconf: Receptek",[487,1403,1405],{"id":1404},"a-konfiguráció-mint-explicit-függőség","A konfiguráció mint explicit függőség",[448,1407,1408,1409,1411,1412,1415,1416,1369,1419,1422,1423,1369,1426,1429,1430,1433,1434,1436,1437,1439],{},"A gpsystemben a konfiguráció a ",[457,1410,1372],{},"-ben egyszer materializálódik, és onnan ",[452,1413,1414],{},"explicit paraméterként"," utazik tovább (",[457,1417,1418],{},"cfg.Server",[457,1420,1421],{},"server.Run","-nak, ",[457,1424,1425],{},"cfg.DB",[457,1427,1428],{},"pg.MustNewPool","-nak, a ",[457,1431,1432],{},"Dependencies"," structon át a moduloknak). Egy service soha nem nyúl a környezethez futás közben. Amit kap, az a boot-kori pillanatkép, ami tesztben tetszőlegesen konstruálható. Elgépelt mező esetén fordítási hibát kapsz, hiányzó ",[457,1435,1376],{}," env esetén pedig hibát boot-kor, a változó nevével, sosem csendes ",[457,1438,463],{},"-t futás közben.",[487,1441,1443],{"id":1442},"kapcsolódó-oldalak","Kapcsolódó oldalak",[1311,1445,1446,1457,1468,1473,1481],{},[1314,1447,1448,1332,1450,1069,1452,1069,1454,1456],{},[473,1449,1393],{"href":379},[457,1451,1384],{},[457,1453,725],{},[457,1455,1389],{}," API, struct-tagek, önálló használat.",[1314,1458,1459,1461,1462,1464,1465,1467],{},[473,1460,1401],{"href":383},": gyökér-",[457,1463,496],{}," kompozíció, prefixelt multi-instance kapcsolatok, tesztelés ",[457,1466,1397],{},"-vel.",[1314,1469,1470,1472],{},[473,1471,1283],{"href":205},": minden modul minden env-változója, defaultokkal.",[1314,1474,1475,1477,1478,1480],{},[473,1476,253],{"href":254},": mi történik a ",[457,1479,725],{}," után.",[1314,1482,1483,1332,1485,1487],{},[473,1484,25],{"href":26},[457,1486,1322],{},"-től az első bootig.",[1489,1490,1491],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":512,"searchDepth":530,"depth":530,"links":1493},[1494,1495,1496,1498,1499],{"id":489,"depth":530,"text":490},{"id":831,"depth":530,"text":832},{"id":1286,"depth":530,"text":1497},"A .env fájl betöltési sorrendje",{"id":1404,"depth":530,"text":1405},{"id":1442,"depth":530,"text":1443},"Egy projekt konfigurációjának összeállítása modul-Config structokból: envconf, env-prefix konvenciók és a .env.","md",null,{},{"icon":231},{"title":204,"description":1500},"Yb2rN_iWmw47kF_H2ts2pCJQ340jPWAVPL-i7L7cbiY",[1508,1510],{"title":224,"path":225,"stem":226,"description":1509,"icon":227,"children":-1},"RFC 9457 problem details mindenhol, alatta errs hibák stackkel, kóddal és kliensbiztos üzenettel.",{"title":233,"path":234,"stem":235,"description":1511,"icon":236,"children":-1},"TypeSpec → OpenAPI 3.0 → szigorú, típusos szerverkód chi\u002Fnet-http-n.",1785445885285]