EN /HU | Belépés

BBS Web

A bbsweb weben teszi elérhetővé a telnetes BBS-einket úgy, hogy egyetlen sort sem kell átírni bennük. A tárcsázó képernyő listázza a rendszereket, és mindegyik valódi terminálban nyílik meg a böngészőben.

Élesben: bbsweb.teletypegames.org

Áttekintés

A BBS-eink sima telnetet beszélnek a 2323–2327 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 xterm.js fut.

Általános termék, nem Teletype-telepítés. Egyetlen config.json í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.

TXT
böngésző                nginx (TLS)              bbsweb konténer      BBS-ek
┌────────────┐  wss://  ┌──────────────┐  http   ┌────────────────┐ TCP ┌────────┐
│ xterm.js   ├─────────►│ proxy /ws    ├────────►│ WS↔telnet híd  │────►│ :2323  │
│ 256 szín   │          │ proxy /      │         │ + statikus web │     │ :2324  │
│ UTF-8, egér│          └──────────────┘         └────────────────┘     │ :2325  │
└────────────┘                                                          │ :2326  │
                                                                        │ :2327  │
                                                                        └────────┘

Mit visz át

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:

  • Kattintható menük — az egérjelentések átmennek, így a menüsor pontosan úgy működik, mint terminálban.
  • Terminálméret — a böngésző minden átméretezéskor NAWS-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.
  • Angol / magyar felület, 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.
  • Teljes képernyő — 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.
  • Érintőképernyős billentyűsor — ESC / TAB / CTRL / nyilak telefonon és tableten.
  • Fájlletöltés (ZMODEM) — ha egy BBS ZMODEM-mel küld fájlt (a WarpEngine BBS ezt teszi), az oldal a zmodem.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ő öt rendszer a BBS-hálózatunk boardjai: a Teletype BBS, az Impostor BBS, a TTG Wiki BBS, az Alexandria BBS és a Feedia BBS. Mindegyik továbbra is elérhető sima telnettel, a kártyáján látható címen, és mindegyiken ott a C64-kapcsoló (petscii: true) a PETSCII-arcához.

Konfiguráció

A config/config.json a compose fájl mellett van (a config mappa van a konténerbe mountolva), és a teljes telepítést lefedi:

Csoport Mit vezérel
site oldalnév, tagline, ASCII-logó, lábléc, favicon, kiemelőszín
languages, defaultLanguage a nyelvváltó gombjai és az induló nyelv
terminal méret, betűkészlet, téma, kurzor, scrollback, induló nézetmód
server munkamenet-korlátok, időtúllépések, ping, a TTYPE válasz
boards a rendszerek, kártyánként saját színnel és mérettel

Minden kulcs elhagyható — a hiányzókat beépített alapérték adja. Bármelyik szöveges mező lehet nyelvenkénti objektum: "name": { "en": "…", "hu": "…" }.

A szerver figyeli a fájl módosítási idejét, ezért szerkesztés után nem kell újraindítani — 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ó README fájljában van.

Miért nem nyílt proxy

A böngésző kizárólag egy id-t küld (/ws?id=teletype). A tényleges host és port sosem a kliensből jön, hanem a config.json-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.

Telnet-részletek, amiket érdemes tudni

A híd kezeli az IAC-egyeztetést (ECHO, SGA, BINARY, TTYPE, NAWS), minden mást udvariasan elutasít. A gyakorlatban két dolog számít:

  • A magányos CR nem sorvég. Az xterm.js Enter-re csak CR-t küld, a BBS viszont sorvéget vár, ezért NVT ASCII módban a híd LF-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.
  • Az nginx elbontja a néma kapcsolatot. Egy BBS-munkamenet percekig csendben van, amíg valaki olvas, és az alapértelmezett 60 másodperces proxy_read_timeout 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.

Telepítés

A master-re pusholt változás Woodpeckerből települ, ha a compose.yaml-t, a bbsweb/ mappát vagy a config/config.json-t érinti. A pipeline előbb ellenőrzi a szkripteket (node --check), a JSON-fájlokat és a compose.yaml-t; a deploy lépés aztán csak SSH-n kéri a szervert a telepítésre. A kulcsa (deploy_ssh_key secret) a szerveren egyetlen fix parancshoz van kötve, a ci-deploy bbs-web-hez (host-config), amely maga klónozza a mastert a Giteáról, egy szabálylistával ellenőrzi a compose.yaml-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 /srv/stacks/bbs-web-be, és lefuttatja a docker compose up -d --build-et.

A csak konfigot érintő változáshoz nem kell újraépítés vagy újraindítás: a deploy kicseréli a config/config.json-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á.)

Üzemeltetés

BASH
cd /srv/stacks/bbs-web
docker compose up -d --build     # kézi indítás (általában a pipeline végzi)
docker compose logs -f bbsweb    # kapcsolatnapló (IP -> BBS)
curl -s localhost:9140/api/health

A konténer a 127.0.0.1:9140 porton hallgat; a TLS és a domain az nginx dolga. A vhost a /etc/nginx/sites-available/bbsweb.teletypegames.org, 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 X-Forwarded-For-t. A valódi kliens-IP a bbsweb naplójában van.

Repó

https://git.teletypegames.org/services/bbs-web