Quickstart
Cyferio has two layers, and you can stop at either one:
- The CLI toolkit (
openvpn-install.sh+vpn-status.py) – installs and manages OpenVPN itself: adding/revoking clients, MAC-address binding, live status. Works standalone, no web app required. - The web admin (this repo’s
app/) – a FastAPI frontend over that same CLI toolkit, for teams who’d rather click buttons than SSH in: RBAC, restrictions dashboard, reporting, a self-service portal for end users.
Requirements
Section titled “Requirements”- Ubuntu 18.04+, Debian 9+, AlmaLinux/Rocky/CentOS 7+, or Fedora
- Root (or passwordless
sudo) to runopenvpn-install.sh - Python 3 for
vpn-status.py - Docker + the Compose plugin, only if you’re running the web admin
1. Install the CLI toolkit
Section titled “1. Install the CLI toolkit”-
Clone the repo and run the installer:
Terminal window git clone https://github.com/cloudlative/cyferio.gitcd cyferiosudo bash openvpn-install.sh -
The first run walks you through a normal OpenVPN server install (IP, protocol, port, DNS). Every run after that (once
/etc/openvpn/server/server.confexists) drops into a management menu instead:1) Add a new client2) List existing clients3) List revoked clients4) List MAC addresses for a client5) Add a MAC address for an existing client6) Remove a MAC address from an existing client7) Revoke an existing client8) Remove OpenVPN9) Show/print a client's .ovpn config10) Permanently delete a revoked client's leftover files11) Restore (reissue a new cert for) a revoked client12) Exit -
Add your first client. You’ll be prompted for a name and the device’s MAC address (any common format works –
aa:bb:cc:dd:ee:ff,AA-BB-CC-DD-EE-FF,aabbccddeeff, mixed case – all normalized automatically).
Check status any time with vpn-status.py – see the
CLI Reference for the full flag list, JSON output, and
shell completion.
2. Bring up the web admin (optional)
Section titled “2. Bring up the web admin (optional)”The web admin lives in this same repo, but docker-compose.yml and
.env.example are at the repo root, not in app/ – the compose file’s
bind mounts expect ./openvpn-install.sh and ./vpn-status.py at
predictable, root-relative paths.
-
From the repo root, copy the env template and fill in the required values:
Terminal window cp .env.example .envAt minimum, set
SECRET_KEY,BOOTSTRAP_ADMIN_USERNAME, andBOOTSTRAP_ADMIN_PASSWORDin.env. -
Pull and start the stack:
Terminal window docker compose pull && docker compose up -dThe
appservice pulls a pre-built image from GHCR (ghcr.io/cloudlative/cyferio-app, public – nodocker loginneeded) rather than building locally. See Deployment & Configuration for TLS/Traefik, Postgres, and how releases are versioned. -
Log in with the bootstrap admin credentials from step 1.

-
You land on the dashboard – a live overview of who’s connected, client counts, MAC registrations, and rejected-connection alerts.

Next steps
Section titled “Next steps”- CLI Reference – every flag, JSON output, shell completion
- Device & Access Restrictions – country/city/ASN/IP/OS/bandwidth limits per client
- Roles & Permissions – RBAC and the self-service portal
- Deployment & Configuration – TLS, Postgres, releases, a fresh-machine setup script