Installation — overview
Liberty Framework ships as a small FastAPI process serving a React SPA on one HTTP port. There's nothing exotic to install — Python 3.12, a database for the framework's own metadata, and (optionally) a reverse proxy in front. You can run it from source on a Linux host or as a Docker Compose stack.
This section walks both paths plus the optional pieces most production installs add.
The two paths
| Path | When to pick | Reads |
|---|---|---|
| Python source install | Dev shell. Single Linux server. You're comfortable with systemd and want minimal moving parts. | Python server. |
| Docker Compose | Multi-service stack, easier onboarding for ops. Reproducible across envs (dev / staging / prod). | Docker. |
Both paths give the same runtime — same UI, same REST API, same Nomaflow scheduler. The choice is operational.
If your team already runs containers, Docker is the path of least friction. If you're starting fresh on a fresh Linux box and prefer plain processes, Python source + systemd works fine and adds no Docker layer to debug.
What you always need
Regardless of the path:
| Component | Why |
|---|---|
| Python 3.12 (Python source path only — Docker bakes it in) | The framework runtime. |
| Node.js ≥ 20 + npm (Python source path only — Docker bakes it in) | Build the React frontend bundle. |
| A database | The framework's own pool — auth, jobs, locks, run history. PostgreSQL is the default; SQLite works for dev. Oracle is supported when a customer ERP requires it. |
The liberty-apps repo | Your configuration: connectors.toml, dictionary.toml, screens.toml, menus.toml, dashboards.toml, charts.toml, jobs.toml, plus any Python plugins under plugins/. |
| An HTTP port | One. The framework serves the API and the SPA on the same port. |
What you optionally add
| Component | Why |
|---|---|
| Reverse proxy (Traefik / nginx / Caddy) | Terminate TLS, hide the framework behind a friendly hostname, route multiple apps on the same host. See Traefik for the canonical Docker setup. |
| Portainer | Visual management for the Docker stack — see status, logs, restart services without typing docker compose commands. See Portainer. |
| A multi-replica deployment | When one replica isn't enough for the load. Pin the scheduler to one replica per the Nomaflow rules. See Production. |
| External monitoring (Prometheus / Grafana / OpenTelemetry) | When the built-in Monitoring page isn't enough. |
At a glance
Read in order
| Step | Page |
|---|---|
| 0 | This overview. |
| 1 | Pick a path: Python server or Docker. |
| 2 | (Optional) Add a reverse proxy and TLS: Traefik. |
| 3 | (Optional) Add a visual Docker manager: Portainer. |
| 4 | Production hardening (multi-replica, logs, backup): Production. |
| 5 | When a new version ships: Upgrading. |
Sanity check — what "installed" looks like
After either path:
curl http://<host>:8000/healthreturns{"status":"ok"}.- The login page renders at
http://<host>:8000/. - The framework log shows
liberty.plugins importable from <path>(yourplugins/dir was found). - The admin user you bootstrapped with
liberty-admin init-dbcan sign in.
If any of those don't hold, jump to the path's troubleshooting section.
What's next
- Python server — the source-install path.
- Docker — the Docker Compose path.
- Production — once it's installed, run it like prod.