Installation
We recommend moving your monitoring to RMON.
For container deployments, see Docker Compose, Helm and process setup, or try the local HTTPS quick start.
For Kubernetes, install the published Helm chart from GHCR using the Helm deployment guide.
Roxy-WI 10.0 also supports Podman with native systemd Quadlet units, for rootful or rootless controller deployment.
OS support
following OSes:
- EL7 (RPM installation and manual installation). It must be "Infrastructure Server" at least. x86_64 only.
- EL8 (RPM installation and manual installation). It must be "Infrastructure Server" at least. x86_64 only.
- EL9 (RPM installation and manual installation). It must be "Infrastructure Server" at least. x86_64 only.
- Ubuntu (DEB installation and manual installation). x86_64 only.
- Other Linux distributions (manual installation only). x86_64 only.
- At least Python 3.9 for Ubuntu and Python 3.11 for EL
Install Roxy-WI with Podman
From Roxy-WI 10.0, the controller can run on Podman with native Quadlet units. The profile includes Web, Scheduler, Service Events, Operations, RabbitMQ, SQLite and a local HTTPS endpoint, with persistent data and encrypted Podman secrets.
Prepare a Linux host with systemd, cgroup v2, Python 3.10+, Podman 4.9+ with Quadlet, and an encryption-capable GPG key for the Podman owner. Follow the host and secret-storage requirements before starting.
From a Roxy-WI 10.0 source checkout, run these commands as the rootless owner. Replace GPG_FINGERPRINT with that account's full key fingerprint:
python3 podman/deploy.py prepare --build --gpg-fingerprint GPG_FINGERPRINTpython3 podman/deploy.py startpython3 podman/deploy.py password
Open https://localhost:8443 and sign in as admin with the generated password. For system units, use sudo consistently and root's GPG key. The default endpoint binds to loopback and uses a local evaluation CA.
See the Podman controller guide for remote access, startup after reboot, upgrades and recovery. This profile does not automatically migrate an existing package or Compose installation.
To install HAProxy, NGINX or Apache containers on managed servers, follow managed Docker and Podman services.
Installation on:
sudo yum install https://repo.roxy-wi.org/roxy-wi-release-7-2-5.noarch.rpmorsudo yum install https://repo1.roxy-wi.org/roxy-wi-release-7-2-5.noarch.rpm
sudo yum install epel-release
# Disable SELinux in config /etc/selinux/config and run command:sudo setenforce 0# Install Roxy-WI and services:sudo yum install roxy-wi roxy-wi-smon roxy-wi-keep_alive roxy-wi-portscanner
sudo echo \
"deb [arch=amd64, trusted=yes] https://repo.roxy-wi.org/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/roxy-wi.list > /dev/null
sudo apt-get updatesudo apt-get install roxy-wi roxy-wi-smon roxy-wi-portscanner roxy-wi-keep-alive
pip3 install setuptools_rust --break-system-packages
pip3 install paramiko-ng --break-system-packages
[main]# Path to the files destinationfullpath = /var/www/haproxy-wilog_path = /var/log/roxy-wilib_path = /var/lib/roxy-wi# Change secret_phrase to 32 url-safe base64-encodedsecret_phrase = _B8avTpFFL19M8P9VyTiX42NyeyUaneV26kyftB2E_4=[configs]# Folders for configshaproxy_save_configs_dir = ${main:lib_path}/configs/hap_config/keepalived_save_configs_dir = ${main:lib_path}/configs/kp_config/nginx_save_configs_dir = ${main:lib_path}/configs/nginx_config/apache_save_configs_dir = ${main:lib_path}/configs/apache_config/[mysql]# By default Sqlite DB is usedenable = 0mysql_user = roxy-wimysql_password = roxy-wimysql_db = roxywimysql_host = 127.0.0.1mysql_port = 3306
# EL/RHEL-compatible systemssudo dnf install roxy-wi-checker roxy-wi-metrics roxy-wi-portscanner roxy-wi-socket# Debian/Ubuntusudo apt updatesudo apt install roxy-wi-checker roxy-wi-metrics roxy-wi-portscanner roxy-wi-socket
These packages do not depend on the Roxy-WI package. They create dedicated unprivileged users, install their Python
dependencies into service-owned directories and enable roxy-wi-checker.service,
roxy-wi-metrics.service, roxy-wi-portscanner.service and roxy-wi-socket.service.
Allow outbound HTTPS access to the configured Python package index during installation.
On the Roxy-WI host, the default auto mode reuses RabbitMQ settings from the local Roxy-WI database. On a
worker-only host, edit the corresponding /etc/roxy-wi/checker.env, metrics.env,
portscanner.env or socket.env: set *_USE_ROXYWI_RABBITMQ_SETTINGS=0 and provide the service's
*_RABBITMQ_HOST, port, vhost, user and password. Then run the systemctl enable --now commands above.
A fresh standalone package is enabled but waits for this configuration before it is started.
Socket additionally needs a read-only copy of the Roxy-WI JWT public key. The Roxy-WI private key must never be copied to a worker host.
# Run only on the Roxy-WI hostsudo systemctl enable --now roxy-wi-scheduler roxy-wi-service-events# Run on each worker host after its env-file is configuredsudo systemctl enable --now roxy-wi-checkersudo systemctl enable --now roxy-wi-metricssudo systemctl enable --now roxy-wi-portscannersudo systemctl enable --now roxy-wi-socket
- Checker image:
ghcr.io/roxy-wi/roxy-wi-checker:5.0.0 - Metrics image:
ghcr.io/roxy-wi/roxy-wi-metrics:4.0.0 - Port Scanner image:
ghcr.io/roxy-wi/roxy-wi-portscanner:2.0.0 - Socket image:
ghcr.io/roxy-wi/roxy-wi-socket:2.0.0
Containers do not read the Roxy-WI database. Pass the matching CHECKER_RABBITMQ_*,
METRICS_RABBITMQ_*, PORTSCANNER_RABBITMQ_* or SOCKET_RABBITMQ_* environment variables. Socket also requires the
Roxy-WI JWT public key. Use Secrets rather than placing passwords or keys in Compose files or Kubernetes manifests.
One Checker, Metrics or Port Scanner replica may use its persistent SQLite volume. Multiple replicas must share a dedicated MySQL/MariaDB schema for that service. Do not point a worker at the Roxy-WI application schema.
Monitored server addresses and HAProxy, NGINX or Apache statistics endpoints must be reachable from the worker host.
Use a routable private IP or DNS name instead of 127.0.0.1 when the worker runs on another server.
See the Checker, Metrics, Port Scanner and Socket pages for service-specific configuration. For migration from older master processes, follow the update guide.
sudo yum install roxy-wi-selinux
[main]
# Path to the files destination
fullpath = /var/www/haproxy-wi
log_path = /var/log/roxy-wi
lib_path = /var/lib/roxy-wi
# Change secret_phrase to 32 url-safe base64-encoded
secret_phrase = _B8avTpFFL19M8P9VyTiX42NyeyUaneV26kyftB2E_4=
[configs]
# Folders for configs
haproxy_save_configs_dir = ${main:lib_path}/configs/hap_config/
keepalived_save_configs_dir = ${main:lib_path}/configs/kp_config/
nginx_save_configs_dir = ${main:lib_path}/configs/nginx_config/
apache_save_configs_dir = ${main:lib_path}/configs/apache_config/
[mysql]
# By default Sqlite DB is used
enable = 0
mysql_user = roxy-wi
mysql_password = roxy-wi
mysql_db = roxywi
mysql_host = 127.0.0.1
mysql_port = 3306
[mysql]
#Enable MySQL DB. Default will be used Sqlite DB. Default disable
enable = 1
mysql_user = roxywi
mysql_password = roxy-wi
mysql_db = roxywi
mysql_host = 127.0.0.1
MariaDB [(none)]> create user 'roxy-wi'@'%';
MariaDB [(none)]> create database roxywi;
MariaDB [(none)]> grant all on roxywi.* to 'roxy-wi'@'%' IDENTIFIED BY 'roxy-wi';
MariaDB [(none)]> grant all on roxywi.* to 'roxy-wi'@'localhost' IDENTIFIED BY 'roxy-wi';
sudo vi /etc/httpd/conf.d/roxy-wi.conf
<VirtualHost *:80>
ServerName my_domain.local
Redirect permanent "/" "https://my_domain.local/"
</VirtualHost>
<VirtualHost *:443>
...
ServerName my_domain.local
...
</VirtualHost>
<VirtualHost *:443>
...
SSLEngine on
SSLCertificateFile /var/www/haproxy-wi/app/certs/haproxy-wi.crt
SSLCertificateKeyFile /var/www/haproxy-wi/app/certs/haproxy-wi.key
...
</VirtualHost>
from cryptography.fernet import Fernet
key = Fernet.generate_key()
print(key)