---
title: 'BBS Web'
url: 'https://wiki.teletypegames.org/hu/services/bbsweb'
markdown: 'https://wiki.teletypegames.org/hu/services/bbsweb.md'
lang: hu
date: '2026-09-16'
description: '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 …'
taxonomy:
  tag:
    - howto
---

# 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](https://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](https://xtermjs.org/) 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  │
                                                                        └────────┘
```

# 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](https://github.com/FGasper/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](https://wiki.teletypegames.org/hu/services/bbs-network) boardjai: a [Teletype BBS](https://wiki.teletypegames.org/hu/services/teletype-bbs), az [Impostor BBS](https://wiki.teletypegames.org/hu/services/impostor-bbs), a [TTG Wiki BBS](https://wiki.teletypegames.org/hu/services/wiki-bbs), az [Alexandria BBS](https://wiki.teletypegames.org/hu/services/alexandria-bbs) és a [Feedia BBS](https://wiki.teletypegames.org/hu/services/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](https://git.teletypegames.org/services/bbs-web) 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](https://git.teletypegames.org/infra/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

'; 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: [BBS-hálózat](https://wiki.teletypegames.org/hu/services/bbs-network.md)
- Next: [Commodex BBS](https://wiki.teletypegames.org/hu/services/commodex-bbs.md)
