TITLE=BBS Web ROUTE=/services/bbsweb LOCALE=hu MODIFIED=1792746206 URL=https://wiki.teletypegames.org/hu/services/bbsweb L=1 https://bbsweb.teletypegames.org L=2 https://xtermjs.org/ L=3 https://github.com/FGasper/zmodem.js L=4 #66 L=5 https://git.teletypegames.org/services/bbs-web L=6 https://git.teletypegames.org/infra/host-config q│ A bbsweb weben teszi elérhetővé a telnetes BBS-einket úgy, hogy egyetlen q│ sort sem kell átírni bennük. A tárcsázó képernyő listázza a rendszereket, és q│ mindegyik valódi terminálban nyílik meg a böngészőben. q│ q│ bÉlesben: 1bbsweb.teletypegames.org 1Áttekintés 1══════════ A BBS-eink sima telnetet beszélnek a 2323–2325 portokon, amihez telnet kliens kell. A bbsweb egy webes felületet tesz eléjük: egy Node szerver WebSocketről TCP-re hidal, a böngészőben pedig 2xterm.js fut. Általános termék, nem Teletype-telepítés. Egyetlen cconfig.json0 írja le, milyen rendszerek látszanak, milyen néven, milyen nyelveken és milyen kinézettel — magában az alkalmazásban nincs telepítésfüggő szöveg, szín vagy cím. Idegen BBS felvétele egy JSON-blokk. p böngésző nginx (TLS) bbsweb konténer BBS-ek p ┌────────────┐ wss:// ┌──────────────┐ http ┌────────────────┐ TCP ┌───» p ─────┐ p │ xterm.js ├─────────►│ proxy /ws ├────────►│ WS↔telnet híd │────►│ :2» p 323 │ p │ 256 szín │ │ proxy / │ │ + statikus web │ │ :2» p 324 │ p │ UTF-8, egér│ └──────────────┘ └────────────────┘ │ :2» p 325 │ p └────────────┘ └───» p ─────┘ 1Mit visz át 1═══════════ A BBS-ek teljes képernyős ANSI-t küldenek 256 színnel, UTF-8 keretrajzoló karakterekkel és SGR egérjelentésekkel. Mindez sértetlenül megérkezik: • bKattintható menük0 — az egérjelentések átmennek, így a menüsor pontosan úgy működik, mint terminálban. • bTerminálméret0 — a böngésző minden átméretezéskor cNAWS0-t küld, így a BBS tudja, hány oszlopra rajzoljon. Két mód van: rögzített 80×25, ami a betűméretet igazítja az ablakhoz, és egy ablakhoz igazított mód, ami a teljes ablakot odaadja a BBS-nek. • bAngol / magyar felület0, alapértelmezetten angol, a választás a böngészőben marad. A szerver státuszüzenetei kulcsként utaznak, nem kész mondatként, így a futó munkamenet felirata is átfordul. • bTeljes képernyő0 — a felső sáv jobb szélén lévő ikon csak a terminált mutatja. Chromium-alapú böngészőben az Esc továbbra is a BBS-hez jut (nyomva tartva lép ki a teljes képernyőből), máshol az Esc kilép. • bÉrintőképernyős billentyűsor0 — ESC / TAB / CTRL / nyilak telefonon és tableten. • bFájlletöltés (ZMODEM)0 — ha egy BBS ZMODEM-mel küld fájlt (a Teletype BBS FTP Browsere ezt teszi), az oldal a 3zmodem.js-sel fogadja, a böngésző pedig elmenti; az állapotsor mutatja a haladást, az Esc megszakítja. A tárcsázón szereplő három rendszer a 4Teletype BBS, az Impostor BBS és a Wiki BBS. Mindegyik továbbra is elérhető sima telnettel, a kártyáján látható címen. 1Konfiguráció 1════════════ A cconfig/config.json0 a compose fájl mellett van (a cconfig0 mappa van a konténerbe mountolva), és a teljes telepítést lefedi: t┌────────────────────────────┬───────────────────────────────────────────────┐ t│h Csoport t│h Mit vezérel t│ t├────────────────────────────┼───────────────────────────────────────────────┤ t│0 csite0 t│0 oldalnév, tagline, ASCII-logó, lábléc, t│ t│0 t│0 favicon, kiemelőszín t│ t├────────────────────────────┼───────────────────────────────────────────────┤ t│0 clanguages0, cdefaultLanguage0 t│0 a nyelvváltó gombjai és az induló nyelv t│ t├────────────────────────────┼───────────────────────────────────────────────┤ t│0 cterminal0 t│0 méret, betűkészlet, téma, kurzor, scrollback, t│ t│0 t│0 induló nézetmód t│ t├────────────────────────────┼───────────────────────────────────────────────┤ t│0 cserver0 t│0 munkamenet-korlátok, időtúllépések, ping, a t│ t│0 t│0 cTTYPE0 válasz t│ t├────────────────────────────┼───────────────────────────────────────────────┤ t│0 cboards0 t│0 a rendszerek, kártyánként saját színnel és t│ t│0 t│0 mérettel t│ t└────────────────────────────┴───────────────────────────────────────────────┘ Minden kulcs elhagyható — a hiányzókat beépített alapérték adja. Bármelyik szöveges mező lehet nyelvenkénti objektum: c"name": { "en": "…", "hu": "…" }0. A szerver figyeli a fájl módosítási idejét, ezért bszerkesztés után nem kell bújraindítani0 — elég frissíteni az oldalt. Hibás JSON esetén az utolsó működő konfiguráció marad érvényben, a hiba a naplóba kerül. A teljes referencia a repó 5README fájljában van. 1Miért nem nyílt proxy 1═════════════════════ A böngésző kizárólag egy cid0-t küld (c/ws?id=teletype0). A tényleges host és port sosem a kliensből jön, hanem a cconfig.json0-ből, és a publikus API-ban meg sem jelenik. E nélkül a híd kérésre bármilyen TCP címre továbbítana. 1Telnet-részletek, amiket érdemes tudni 1══════════════════════════════════════ A híd kezeli az IAC-egyeztetést (cECHO0, cSGA0, cBINARY0, cTTYPE0, cNAWS0), minden mást udvariasan elutasít. A gyakorlatban két dolog számít: • bA magányos cCRb nem sorvég.0 Az xterm.js cEnter0-re csak cCR0-t küld, a BBS viszont sorvéget vár, ezért NVT ASCII módban a híd cLF0-et fűz hozzá, ahogy egy igazi telnet kliens. E nélkül a belépőképernyő soha nem lép tovább — és a tünet megtévesztő, mert a beírt név rendben megjelenik a képernyőn. • bAz nginx elbontja a néma kapcsolatot.0 Egy BBS-munkamenet percekig csendben van, amíg valaki olvas, és az alapértelmezett 60 másodperces cproxy_read_timeout0 elvágná. A vhost 3600s-t használ, a szerver pedig 30 másodpercenként pingel WebSocketen, hogy a közbeeső NAT-ok is tartsák a kapcsolatot. 1Telepítés 1═════════ A cmaster0-re pusholt változás Woodpeckerből települ, ha a ccompose.yaml0-t, a cbbsweb/0 mappát vagy a cconfig/config.json0-t érinti. A pipeline előbb ellenőrzi a szkripteket (cnode --check0), a JSON-fájlokat és a ccompose.yaml0-t; a deploy lépés aztán csak SSH-n kéri a szervert a telepítésre. A kulcsa (cdeploy_ssh_key secret) a szerveren egyetlen fix parancshoz van kötve, a cci-deploy bbs-web0-hez (6host-config), amely maga klónozza a mastert a Giteáról, egy szabálylistával ellenőrzi a ccompose.yaml0-t (nincs privileged mód, extra capability, docker socket, bind mount csak a stacken belül, publikus port nincs), átmásolja ezeket az útvonalakat a c/srv/stacks/bbs-web0-be, és lefuttatja a cdocker compose cup -d --build0-et. A csak konfigot érintő változáshoz nem kell újraépítés vagy újraindítás: a deploy kicseréli a cconfig/config.json0-t, és mivel az egész mappa van mountolva, a szerver látja az új fájlt, és a módosítási ideje alapján újratölti. (Egyetlen fájl mountolásánál a csere után is a régit látná.) 1Üzemeltetés 1═══════════ p cd /srv/stacks/bbs-web p docker compose up -d --build # kézi indítás (általában a pipeline végzi) p docker compose logs -f bbsweb # kapcsolatnapló (IP -> BBS) p curl -s localhost:9140/api/health A konténer a c127.0.0.1:91400 porton hallgat; a TLS és a domain az nginx dolga. A vhost a c/etc/nginx/sites-available/bbsweb.teletypegames.org0, a tanúsítványt a certbot kezeli. Egy korlát: a BBS minden webes látogatót a híd konténer IP-jéről lát, mert a telnet nem ismer cX-Forwarded-For0-t. A valódi kliens-IP a bbsweb naplójában van. 2Repó 2──── https://git.teletypegames.org/services/bbs-web