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
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.
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 │
└────────┘
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:
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.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.
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.
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.
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:
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.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.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á.)
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.
https://git.teletypegames.org/services/bbs-web