Trusted Servants Pro is a self-hosted web portal that helps addiction-recovery fellowship groups run the practical side of service work: managing meetings, sharing readings and files, coordinating Zoom host accounts, and handling member access requests — all from a single web UI, with no command line required. It ships as a single Docker container with persistent data volumes.
Features
- Meetings — create, edit, archive and restore; in-person / online / hybrid; unlimited weekly schedules, per-meeting logos and alert banners, click-to-copy Zoom credentials
- Libraries — grouped reading collections with drag-and-drop ordering, inline editing, thumbnails and external-link entries
- File browser — a central media library with search, rename, and human-readable public share URLs at
/pub/<filename> - Access requests — a public form on the login screen, emailed to admins, with a triage dashboard
- Zoom account management — Fernet-encrypted credentials, a weekly assignment calendar with conflict detection, and separate OTP email logins
- Themes & branding — six palettes, an animated login screen with nine selectable effects, and configurable sidebar branding
- Dashboard, settings & email — configurable widgets, global SMTP with encrypted passwords and a one-click test send
- Data export/import and Frontend Staging Sync — build on a staging instance and push the public site to live over the network, with automatic rollback snapshots
Requirements
- Docker Engine with the Compose plugin (Ubuntu 24.04 LTS for the automated installer)
- A port for the portal (default
8090) reachable, ideally behind TLS
Install
One-command install (Ubuntu 24.04)
Installs Docker, opens the firewall, provisions a TLS cert (Let's Encrypt or self-signed), generates a secret key, and starts the portal — typically in 2–5 minutes:
curl -fsSL https://raw.githubusercontent.com/hyprlab/trusted-servants-pro/main/install.sh | sudo bash
Run it non-interactively by passing env vars:
sudo TSP_DOMAIN=portal.example.org \
[email protected] \
TSP_ADMIN_PASSWORD='a-strong-password' \
bash install.sh
Docker Compose (manual)
services:
tsp:
image: hyprlab/tspro:latest
container_name: tspro
ports:
- "8090:8000"
volumes:
- ./data:/data
environment:
- TSP_SECRET_KEY=${TSP_SECRET_KEY:?TSP_SECRET_KEY must be set in .env}
- TSP_ADMIN_USERNAME=admin
- TSP_ADMIN_PASSWORD=admin
- [email protected]
restart: unless-stopped
Generate a secret key into .env, then start and open http://localhost:8090 (default admin / admin — change it immediately):
openssl rand -base64 48 | tr -d '\n/+=' | cut -c1-64 # -> TSP_SECRET_KEY in .env
docker compose up -d --build
Configuration
| Variable | Default | Purpose |
|---|---|---|
TSP_SECRET_KEY |
dev-secret-change-me |
Flask session signing key (set in production) |
TSP_ADMIN_USERNAME / TSP_ADMIN_PASSWORD / TSP_ADMIN_EMAIL |
admin / admin / … |
Seeded on first boot only |
TSP_DATA_DIR |
/data |
In-container data directory |
TSP_FERNET_KEY |
auto | Encryption key for Zoom/SMTP secrets (stored at data/zoom.key if unset) |
Zoom, OTP-email and SMTP passwords are encrypted at rest with Fernet. Uploads are capped at 256 MB.
Updating
Manual:
cd /opt/tspro
docker compose pull && docker compose up -d
Or let the bundled Watchtower service auto-update the container every 24 hours.
Tech stack & license
Flask · SQLAlchemy · SQLite, with Fernet-encrypted secrets and Caddy for TLS, in a single Docker container. Free and open source under the GNU AGPL-3.0. Website: gettspro.com · Source and releases on GitHub.