TITLE=Wiki oldal ROUTE=/services/wiki-site LOCALE=hu MODIFIED=1792615260 URL=https://wiki.teletypegames.org/hu/services/wiki-site L=1 https://getgrav.org/ L=2 #71 L=3 https://git.teletypegames.org/services/wiki-pages L=4 https://git.teletypegames.org/engines/rubbs L=5 #66 q│ Ez a wiki egy 1Grav CMS oldal, amelynek a tartalma git-repóban él, plusz két q│ kísérőszolgáltatás: egy bfetcherq, amely mindkét irányban szinkronban tartja q│ az éles munkamásolatot és a gitet, és egy telnetes bBBSq felület. A változások q│ megjelennek egy JSON API-n, amelyet az 2Updater bot lekérdez, hogy bejelentse q│ őket a Discordon. 1Áttekintés 1══════════ Minden egyetlen repóban van — 3cservices/wiki-pages0: tartalom (cpages/0), Grav-konfiguráció, téma, kísérőszolgáltatások. A Docker Compose három szolgáltatást futtat belőle: t┌──────────────┬─────────────────────────────────────────────────────────────┐ t│h Szolgáltatás t│h Mit csinál t│ t├──────────────┼─────────────────────────────────────────────────────────────┤ t│0 cgrav0 t│0 Grav CMS (PHP 8.1 + Apache). A cpages/0, cconfig/0 és cthemes/0 t│ t│0 t│0 bind mounttal van becsatolva, így az oldal a munkamásolatot t│ t│0 t│0 szolgálja ki. Az aktív téma a cttgwiki20 (a teletypegames.org t│ t│0 t│0 kinézete, sötét/világos és retró móddal); a t│ t│0 t│0 cconfig/system.yaml0-ben a cpages.theme: ttgwiki0 hozza vissza t│ t│0 t│0 a régit. t│ t├──────────────┼─────────────────────────────────────────────────────────────┤ t│0 cwiki-fetcher0 t│0 Go szinkronszolgáltatás (cfetcher/0). A pusht a t│ t│0 t│0 Gitea-webhookra (cPOST /hook0) vagy 10 percenként hozza be, a t│ t│0 t│0 szerveren készült tartalmi szerkesztéseket commitolja és t│ t│0 t│0 pusholja, az állapotot a c/health0 és a c/metrics0 mutatja. t│ t│0 t│0 Lásd lent: iSzinkron0. t│ t├──────────────┼─────────────────────────────────────────────────────────────┤ t│0 cwiki-bbs0 t│0 Telnet felület (cbbs/0, 4rubbs alapon), amely a JSON API-n t│ t│0 t│0 keresztül böngészi a wikit. Induláskor a legújabb commitra t│ t│0 t│0 frissíti a rubbs-ot, de előbb legfeljebb egy percig várja a t│ t│0 t│0 Giteát (szerver-újraindítás után a Gitea egy ideig 502-t t│ t│0 t│0 ad); ha addig sem érhető el, a telepített verzióval indul. t│ t│0 t│0 Lásd: 5BBS-szerver. t│ t└──────────────┴─────────────────────────────────────────────────────────────┘ 1Tartalom 1════════ A Grav mappák szerint útvonalaz: egy oldal a cpages///default..md0, YAML-frontmatterrel. A szekciók, ahol van ilyen, a Gitea-orgokat követik: cservices0, cplatforms0 (a build org eszközláncai), cengines0, cstores0, cdos0, cinfrastructure0, mellettük cprojects0, cteam0, ctechnologies0 és cdevelopment0 (útmutatók, pl. a RoR-styleguide). A slugok kötőjelesek, és minden elköltözött útvonalnak van átirányítása a cconfig/site.yaml0-ben — a c/hu0 előtaggal is —, így a régi linkek továbbra is működnek. Az oldalsávot kézzel gondozzuk a cconfig/sitenav.yaml0-ben. Kétféleképpen lehet szerkeszteni: • bGitben0 — szerkeszd a cdefault..md0-t, commitolj, pushold; a webhook másodperceken belül élesíti. • bAz adminfelületen0 (c/admin0) — a Grav a becsatolt munkamásolatba ír, a fetcher pedig nagyjából egy percen belül commitolja és pusholja. A cprojects/0 és cteam/0 alatti oldalakhoz belépés kell (az Authentikon át); egy szekció gyereklistája elrejti őket a vendégek elől. A képek az cassets/ könyvtárban vannak, a c/wiki-assets/…0 útvonalon szolgálva ki. 1Nyelvek 1═══════ A wiki kétnyelvű: baz angol az alapértelmezett, és nincs URL-előtagja0, a magyar a c/hu0 alatt él. Az oldal a nyelvét a fájlnevében hordozza — cdefault.en.md0 vagy cdefault.hu.md0 —, a nyelvváltó pedig a felső sávban van. Az angol oldalaknak van magyar fordítása. A csak magyarul létező oldalak (az egyesületi papírmunka, a jegyzőkönyvek, a Neumatronic Universe háttéranyagai) nem kapnak angolt: a cconfig/system.yaml0-ben a ccontent_fallback0 miatt az angol kérés átesik a magyar fájlra, így semmi nem lesz 404-es. A JSON API ugyanezt a szabályt követi: a c/custom/pages.json0 angol, a c/hu/custom/pages.json0 magyar. Minden válasz visszaadja a kért clang0 értéket, és minden oldalon ott a clocale0, amely azt mondja meg, hogy a törzsszöveg ivalójában0 milyen nyelven van — a kettő pontosan ott tér el, ahol a visszaesés életbe lépett. 1Frissítési folyamat 1═══════════════════ 1. Valaki pushol a cwiki-pages0 repóba a Giteán, vagy szerkeszt egy oldalt az adminfelületen. 2. A fetcher az éles munkamásolatban (c/srv/stacks/wiki-pages0) összefésüli a két oldalt: a push a Gitea-webhookon át érkezik, az adminszerkesztést commitolja és pusholja. Ha maga a stack változik (compose, Dockerfile-ok, cphp/0, capache/0, cfetcher/0, cbbs/0), a pipeline is lefut, és a cci-deploy cwiki-pages0 újraépíti a konténereket. 3. A repó bind mounttal van becsatolva, így a lehúzott változások azonnal élesek. Az asset-időbélyegek (cassets.enable_asset_timestamp0) miatt a gyorsítótárazott böngészők is lehúzzák a megváltozott téma-CSS-t és -JS-t. 4. A c/custom/updates.json0 módosítási idő szerint listáz minden oldalt. 5. Az 2Updater bot lekérdezi, összeveti a gyorsítótárával, és minden új frissítésről küld egy Discord-értesítést. 1Szinkron 1════════ Az éles munkamásolatot mindkét oldalról írják, ezért a fetcher sávokra osztja az útvonalakat: • bTartalom0 — cpages/0, cassets/0, caccounts/0: kétirányú. A szerveren készült szerkesztést akkor commitolja, ha a fájljai 30 másodperce nem változtak, és a commit nevében az útvonal szerepel (cwiki (server): /team/meetings0). • bKód0 — minden más: csak gitről. A szerveren történt változás idrift0: megjelenik a c/health0-ben, egy óra után a iWiki server drift0 riasztás is jelez, de automatikusan sosem commitolódik. A cdocker exec wiki-fetcher cwiki-fetcher status0 kilistázza; a cwiki-fetcher commit -m "…" <útvonal> szándékosan commitolja (pl. GPM-frissítés után). • bÁllapot0 — a Grav futásidejű fájljai (cdata/api-keys.yaml0, gyorsítótárak): gitignore-olva. Ha mindkét oldalon van új commit, a szerveroldaliakat egy eldobható worktree-ben rebase-eli a távolira; az élő fa csak fast-forwarddal mozdul. Ütközésnél az éles wiki marad, ahogy volt, a szerveroldali commitok pedig egy cserver/conflict-0 ágra kerülnek: ezt kell beolvasztani a cmaster0-be és pusholni, a következő kör pedig magától rendbe jön. A c/health0 válasza cok0, vagy 503 cfail0, cconflict0, cdrift0 vagy cstale0 indoklással; a iWiki sync failing0 riasztás ugyanezt figyeli. Részletek: cfetcher/README.md0. 1JSON API 1════════ A végpontok Grav-oldalak (cpages/custom/0), amelyeket a cthemes/ttgwiki2/templates/*.json.twig0 sablonok renderelnek. A nyelvet az URL-előtag adja (c/hu/custom/…0): t┌─────────────────────────────────┬──────────────────────────────────────────┐ t│h Végpont t│h Mire való t│ t├─────────────────────────────────┼──────────────────────────────────────────┤ t│0 c/custom/sitemap.json0 t│0 Minden útvonalazható oldal: route, cím, t│ t│0 t│0 módosítás, címkék, privát jelző t│ t│0 t│0 (törzsszöveg nélkül). t│ t├─────────────────────────────────┼──────────────────────────────────────────┤ t│0 c/custom/page.json?route=0 t│0 Egy oldal nyers markdownnal és renderelt t│ t│0 t│0 HTML-lel. t│ t├─────────────────────────────────┼──────────────────────────────────────────┤ t│0 c/custom/updates.json?limit=N0 t│0 Módosítási idő szerint rendezett oldalak t│ t│0 t│0 — ezt figyeli az Updater bot. t│ t├─────────────────────────────────┼──────────────────────────────────────────┤ t│0 c/custom/pages.json?tag=0 t│0 Taxonómiacímke szerint szűrt oldalak (a t│ t│0 t│0 nyilvános oldal Blog és HowTos listái t│ t│0 t│0 ezt használják). t│ t└─────────────────────────────────┴──────────────────────────────────────────┘ Privát oldal csak ctoken=0 mellett adja ki a törzsszövegét. A BBS ugyanezt a tokent használja a supervisor-belépéshez. 1Analitika 1═════════ A téma hozza a Matomo-trackert (cmatomo.teletypegames.org0, a site id a cconfig/themes/ttgwiki2.yaml0-ben). bSütik nélkül0 mér (cdisableCookies0: nincs c_pk_id0 süti, így hozzájárulás sem kell), és bheartbeat-időzítővel0, így az egyoldalas látogatások ideje is rögzül. 1Repó 1════ https://git.teletypegames.org/services/wiki-pages