EN /HU | Belépés

Wiki oldal

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.

Áttekintés

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.

Tartalom

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:

  • Gitben — szerkeszd a default.<nyelv>.md-t, commitolj, pushold; a webhook másodperceken belül élesíti.
  • Az adminfelületen (/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.

Nyelvek

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.

Frissítési folyamat

  1. Valaki pushol a wiki-pages repóba a Giteán, vagy szerkeszt egy oldalt az adminfelületen.
  2. A fetcher az éles munkamásolatban (/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.
  3. A repó bind mounttal van becsatolva, így a lehúzott változások azonnal élesek. Az asset-időbélyegek (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.
  4. A /custom/updates.json módosítási idő szerint listáz minden oldalt.
  5. Az Updater bot lekérdezi, összeveti a gyorsítótárával, és minden új frissítésről küld egy Discord-értesítést.

Szinkron

Az éles munkamásolatot mindkét oldalról írják, ezért a fetcher sávokra osztja az útvonalakat:

  • Tartalom — 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).
  • Kód — minden más: csak gitről. A szerveren történt változás drift: megjelenik a /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).
  • Állapot — a Grav futásidejű fájljai (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.

JSON API

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.

Analitika

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.

Repó

https://git.teletypegames.org/services/wiki-pages