---
title: 'Wiki oldal'
url: 'https://wiki.teletypegames.org/hu/services/wiki-site'
markdown: 'https://wiki.teletypegames.org/hu/services/wiki-site.md'
lang: hu
date: '2026-11-01'
description: '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 beje…'
---

# Wiki oldal

> Ez a wiki egy [Grav CMS](https://getgrav.org/) 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](https://wiki.teletypegames.org/hu/services/updater) lekérdez, hogy bejelentse őket a Discordon.

# Áttekintés

Minden egyetlen repóban van — [`services/wiki-pages`](https://git.teletypegames.org/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](https://wiki.teletypegames.org/hu/services/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](https://wiki.teletypegames.org/hu/infrastructure/idp) á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](https://wiki.teletypegames.org/hu/services/updater) 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

'; var prevLevel = 2; for (var i = 0; i < headings.length; i++) { var h = headings\[i\]; var text = h.textContent.trim(); var slug = text.toLowerCase() .replace(/\[áàâä\]/g,'a').replace(/\[éèêë\]/g,'e').replace(/\[íìîï\]/g,'i') .replace(/\[óòôöő\]/g,'o').replace(/\[úùûüű\]/g,'u') .replace(/\[^a-z0-9\]+/g, '-').replace(/^-|-$/g, ''); if (!slug) slug = 'heading-' + i; if (used\[slug\]) { slug += '-' + i; } used\[slug\] = true; h.id = slug; var level = parseInt(h.tagName.charAt(1)); var cls = level > 2 ? ' class="toc-child"' : ''; html += '- [' + text + '](#'%20+%20slug%20+%20')
'; } html += '
'; toc.innerHTML = html; // Scroll-spy: highlight current heading var links = toc.querySelectorAll('a'); var ids = \[\]; for (var j = 0; j < links.length; j++) ids.push(links\[j\].getAttribute('href').slice(1)); function updateActive() { var current = ''; for (var k = 0; k < ids.length; k++) { var el = document.getElementById(ids\[k\]); if (el && el.getBoundingClientRect().top <= 80) current = ids\[k\]; } for (var m = 0; m < links.length; m++) { links\[m\].parentNode.classList.toggle('active', links\[m\].getAttribute('href') === '#' + current); } } window.addEventListener('scroll', updateActive, { passive: true }); updateActive(); })();

---

## Navigation

- Parent: [Szolgáltatások](https://wiki.teletypegames.org/hu/services.md)
- Previous: [TTG Wiki BBS](https://wiki.teletypegames.org/hu/services/wiki-bbs.md)
