Quick Start
Requirements
- Linux (Ubuntu 22.04+ or Debian 12+ recommended)
- Python 3.10+ (3.12 preferred — the installer looks for
python3.12
first, falling back to 3.11, 3.10, then plainpython3) - ~500 MB disk for app + venv, plus space for
data/ - Open TCP ports for any protocols you want exposed
(default: 5000 web, 2233 telnet, 2234 SSH, 513 rlogin,
21 + 40000-40050 FTP if enabled)
Fresh install
# extract the release tarball
tar xzf ANetBBS-v1.0b2.NNN.tar.gz
cd ANetBBS-v1.0b2.NNN
# run the installer
sudo bash install.sh
The wizard asks every question it needs, roughly in this order:
- Install mode (
production/behind/test) — this is the
first question and changes several other defaults (web port,
whether nginx+SSL get offered, etc.).production= full public BBS
with HTTPS via Let's Encrypt;behind= you already have your own
reverse proxy/TLS in front;test= local/LAN, no domain needed. - BBS name + description
- System service user + install directory
- Sysop username (your own login handle) + sysop password
(leave blank to auto-generate one — it's written to
data/admin_password.txteither way) - Domain / hostname + web / telnet / SSH ports
- Enable Telnet? Enable SSH? Enable nginx reverse proxy?
- Install the MRC bridge (inter-BBS chat)?
- Enable inter-BBS Instant Messaging (MSP/SYSTAT — privileged ports
18/11)? Enable Finger (privileged port 79)? Enable BinkP (FidoNet
inbound mail, port 24554)? - (if nginx enabled) Enable SSL via Let's Encrypt?
- Optional extras: DOSBox-staging (DOS door games), ClamAV (upload
virus scanning), lhasa (.lzh archive descriptions), libsixel-bin
(sixel images in the terminal RSS reader), Mystic BBS runtime (.mps
door support) — each its own yes/no, all default no. - Configure UFW firewall to open the ports you just enabled?
(default no)
Number of concurrent terminal nodes and echomail enable/disable are
not wizard prompts — they default on (GAMES_MAX_NODES=10,
ECHOMAIL_ENABLED=true) and are changed later via .env or
Admin → Settings, not during install.
It then, without any further prompts:
- Generates a strong random
SECRET_KEYand writes.env(skips
this if.envalready exists — re-run with--forceto
regenerate it). - Creates
data/,logs/, etc. - Builds a Python venv and runs
pip install -e .. - Initializes the SQLite database and seeds your admin user.
- Installs systemd unit files (paths and service user substituted for
this install — no/opt/anetbbshardcoding unless that's where
you actually installed it) and enables + starts every service you
said yes to — there's no separate manualsystemctl enable --now
step needed. - Runs a set of post-install health checks and prints a summary.
Visit http://<your_host>:<web_port>/ (port 5000 by default in
production mode, 8080 in test/behind mode) and log in with the
sysop credentials from the wizard.
Re-running the wizard
Safe to re-run. It won't touch an existing .env — it just skips
regenerating it and prints "already exists — skipping (use --force
to overwrite)". Pass --force if you actually want it to overwrite
your current config.
Putting nginx in front
Copy deploy/anetbbs-nginx.conf.template to
/etc/nginx/sites-available/anetbbs.conf, edit the server_name,
symlink it to sites-enabled/, and reload nginx. The template handles:
- HTTPS via certbot
- WebSocket upgrade for SocketIO + the MRC bridge
auth_requestgating of the MRC WebSocket so only logged-in users
can chat
(If you picked production mode in the wizard, this is already done
for you.)
What the install lays down
| Path | Purpose |
|---|---|
/opt/anetbbs/ |
code (default) |
data/ |
uploads, avatars, SQLite DB |
data/personal_pages/ |
sysop + per-user web pages |
data/admin_password.txt |
auto-generated sysop password (if you left it blank) |
logs/ |
gunicorn + app logs |
venv/ |
Python virtual env |
.env |
runtime config (mode 0600) |