Ez a wiki egy Grav CMS oldal, amelynek a tartalma git-repóban él, plusz két kísérőszolgáltatás: egy fetcher, amely mindkét irányban szinkronban tartja az éles munkamásolatot és a gitet, és egy telnetes BBS felület. A változások megjelennek egy JSON API-n, amelyet az Updater bot lekérdez, hogy bejelentse őket a Discordon.
Minden egyetlen repóban van — services/wiki-pages: tartalom (pages/), Grav-konfiguráció, téma, kísérőszolgáltatások. A Docker Compose két szolgáltatást futtat belőle:
| Szolgáltatás | Mit csinál |
|---|---|
grav |
Grav CMS (PHP 8.1 + Apache). A pages/, config/ és themes/ bind mounttal van becsatolva, így az oldal a munkamásolatot szolgálja ki. Az aktív téma a ttgwiki2 (a teletypegames.org kinézete, sötét/világos és retró móddal); a config/system.yaml-ben a pages.theme: ttgwiki hozza vissza a régit. |
wiki-fetcher |
Go szinkronszolgáltatás (fetcher/). A pusht a Gitea-webhookra (POST /hook) vagy 10 percenként hozza be, a szerveren készült tartalmi szerkesztéseket commitolja és pusholja, az állapotot a /health és a /metrics mutatja. Lásd lent: Szinkron. |
A telnetes felületnek, a TTG Wiki BBS-nek 2026-11-01 óta saját repója és stackje van (bbs/wiki-bbs); a JSON API-t http://wiki-grav néven olvassa, ez a grav konténer aliasa az interstack hálózaton.
A Grav mappák szerint útvonalaz: egy oldal a pages/<szekció>/<slug>/default.<nyelv>.md, YAML-frontmatterrel. A szekciók, ahol van ilyen, a Gitea-orgokat követik: services, platforms (a build org eszközláncai), engines, stores, dos, infrastructure, mellettük projects, team, technologies és development (útmutatók, pl. a RoR-styleguide). A slugok kötőjelesek, és minden elköltözött útvonalnak van átirányítása a config/site.yaml-ben — a /hu előtaggal is —, így a régi linkek továbbra is működnek. Az oldalsávot kézzel gondozzuk a config/sitenav.yaml-ben. Kétféleképpen lehet szerkeszteni:
default.<nyelv>.md-t, commitolj, pushold; a webhook másodperceken belül élesíti./admin) — a Grav a becsatolt munkamásolatba ír, a fetcher pedig nagyjából egy percen belül commitolja és pusholja.A projects/ és team/ alatti oldalakhoz belépés kell (az Authentikon át); egy szekció gyereklistája elrejti őket a vendégek elől. A képek az assets/ könyvtárban vannak, a /wiki-assets/… útvonalon szolgálva ki.
A wiki kétnyelvű: az angol az alapértelmezett, és nincs URL-előtagja, a magyar a /hu alatt él. Az oldal a nyelvét a fájlnevében hordozza — default.en.md vagy default.hu.md —, 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 config/system.yaml-ben a content_fallback 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 /custom/pages.json angol, a /hu/custom/pages.json magyar. Minden válasz visszaadja a kért lang értéket, és minden oldalon ott a locale, amely azt mondja meg, hogy a törzsszöveg valójában milyen nyelven van — a kettő pontosan ott tér el, ahol a visszaesés életbe lépett.
wiki-pages repóba a Giteán, vagy szerkeszt egy oldalt az adminfelületen./srv/stacks/wiki-pages) ö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, php/, apache/, fetcher/), a pipeline is lefut, és a ci-deploy wiki-pages újraépíti a konténereket.assets.enable_asset_timestamp) miatt a gyorsítótárazott böngészők is lehúzzák a megváltozott téma-CSS-t és -JS-t./custom/updates.json módosítási idő szerint listáz minden oldalt.Az éles munkamásolatot mindkét oldalról írják, ezért a fetcher sávokra osztja az útvonalakat:
pages/, assets/, accounts/: 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 (wiki (server): /team/meetings)./health-ben, egy óra után a Wiki server drift riasztás is jelez, de automatikusan sosem commitolódik. A docker exec wiki-fetcher wiki-fetcher status kilistázza; a wiki-fetcher commit -m "…" <útvonal> szándékosan commitolja (pl. GPM-frissítés után).data/api-keys.yaml, 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 server/conflict-<idő> ágra kerülnek: ezt kell beolvasztani a master-be és pusholni, a következő kör pedig magától rendbe jön. A /health válasza ok, vagy 503 fail, conflict, drift vagy stale indoklással; a Wiki sync failing riasztás ugyanezt figyeli. Részletek: fetcher/README.md.
A végpontok Grav-oldalak (pages/custom/), amelyeket a themes/ttgwiki2/templates/*.json.twig sablonok renderelnek. A nyelvet az URL-előtag adja (/hu/custom/…):
| Végpont | Mire való |
|---|---|
/custom/sitemap.json |
Minden útvonalazható oldal: route, cím, módosítás, címkék, privát jelző (törzsszöveg nélkül). |
/custom/page.json?route=<route> |
Egy oldal nyers markdownnal és renderelt HTML-lel. |
/custom/updates.json?limit=N |
Módosítási idő szerint rendezett oldalak — ezt figyeli az Updater bot. |
/custom/pages.json?tag=<tag> |
Taxonómiacímke szerint szűrt oldalak (a nyilvános oldal Blog és HowTos listái ezt használják). |
Privát oldal csak token=<SUPERVISOR_PASSWORD> mellett adja ki a törzsszövegét. A BBS ugyanezt a tokent használja a supervisor-belépéshez.
A téma hozza a Matomo-trackert (matomo.teletypegames.org, a site id a config/themes/ttgwiki2.yaml-ben). Sütik nélkül mér (disableCookies: nincs _pk_id süti, így hozzájárulás sem kell), és heartbeat-időzítővel, így az egyoldalas látogatások ideje is rögzül.
https://git.teletypegames.org/services/wiki-pages