Wiki contents
Installing and hosting

Install on Linux

Install on a supported systemd Linux host or virtual machine.

linux/open-tabletop.sh installs directly on a regular systemd Linux host or VM: Debian 12/13, Ubuntu 22.04/24.04/26.04 LTS, package-managed Fedora, or Arch Linux. Use a dedicated host with current distro packages. Fedora Atomic desktops and non-systemd variants are outside this installer’s scope. Full VM installation testing on each distro is still pending; automated command-mocked tests cover provisioning and update behavior.

It reuses the Proxmox native installer for releases, separate database roles, credentials, upload storage, backups, and the non-root systemd service. Debian/Ubuntu use NodeSource Node.js 26, the distro’s PostgreSQL package, and Redis. Fedora/Arch use their Node.js/npm, PostgreSQL, and Valkey packages (Fedora package, Arch package); Node.js 22.12 or newer is required. Arch installation runs a full pacman -Syu --needed --noconfirm to avoid partial upgrades. Install git first for repository fetches (apt install git, dnf install git, or pacman -Syu git as appropriate).

From a checkout containing this launcher, install a pushed revision with:

sudo env SOURCE_REF=main BOOTSTRAP_ADMIN_EMAIL=you@example.com \
  bash linux/open-tabletop.sh install

The source defaults to https://github.com/optimuspryne/open-tabletop.git at main. Use a tag or full commit ID for SOURCE_REF to select a revision, or override SOURCE_REPO. The installer is extracted from that same source archive. The selected revision must include this Linux-capable companion installer; an older pushed revision will not gain Linux support from a newer launcher alone. Admin username defaults to admin; omitting the email prompts for it.

To install from a local checkout instead of fetching a remote revision, package the tracked working-tree files, including edits, and pass the archive:

git ls-files -z | tar --null -T - -cf /tmp/open-tabletop-source.tar
sudo env SOURCE_ARCHIVE=/tmp/open-tabletop-source.tar BOOTSTRAP_ADMIN_EMAIL=you@example.com \
  bash linux/open-tabletop.sh install

This packaging command excludes untracked files, including new application files; add any required new files explicitly to your archive. Archives must contain root-level package.json, package-lock.json, server.js, and proxmox/install.sh. Only use source and archives you trust: the companion installer executes as root. Downloading dependencies still requires internet access.

Open http://HOST-IP:2567 after installation. Credentials are stored with root-only permissions in /root/open-tabletop-credentials.txt; configuration and password files are in /etc/open-tabletop/. The installer allocates an open-tabletop system account without taking UID 1000. Uploads live at /var/lib/open-tabletop/assets; releases live under /opt/open-tabletop/releases/, with current pointing to the active release. PostgreSQL uses local port 5432; Redis/Valkey uses 6379. Linux setup adds a localhost SCRAM rule only for the tabletop database and its two roles, preserving other PostgreSQL access rules. It requires unused open-tabletop user/group and tabletop/tabletop_app database roles on first installation; it does not adopt an existing manual or Docker deployment.

Firewall rules, TLS/reverse proxy configuration, and SELinux policy remain host-managed. Allow inbound TCP 2567 only on the intended network, or proxy it through your existing HTTPS endpoint; keep database/cache ports private. Set proxy trust in /etc/open-tabletop/open-tabletop.env if needed (see the deployment configuration above). For mounted upload storage, prepare ownership for id -u open-tabletop / id -g open-tabletop on that host and ensure the mount is available before starting the service; the installer checks writability and does not change mount-point ownership.

sudo env SOURCE_REF=main bash linux/open-tabletop.sh update
sudo journalctl -u open-tabletop -n 100 --no-pager

Save active games and have players leave before updating. The database dump cannot include unsaved live hands or moves. Updates also accept SOURCE_ARCHIVE, preserve credentials/configuration, and create a database dump in /var/backups/open-tabletop/ before switching releases and restarting the service. They do not upgrade OS packages or PostgreSQL major versions. Back up uploaded files separately; for rollback, restore both the database dump and the matching old release because migrations may not be reversible. Interrupted fresh installs may leave accounts, roles, or configuration: inspect the failure before retrying; the installer does not delete or overwrite that state.

Manual acceptance remains: fresh install and reboot on each distro, administrator login, asset upload, two-client room connection, then update with data and credentials preserved. The installer restarts the application; refresh clients after an application update.

Sources checked: linux/open-tabletop.sh, proxmox/install.sh, docs/REFERENCE.md. Reviewed September 29, 2026 against the working source. Published releases may differ; check the changelog for your version.