rConfig V8 Pro Docker Deployment Guide
rConfig V8 Pro Docker Deployment: Containerized Network Management Setup
Section titled “rConfig V8 Pro Docker Deployment: Containerized Network Management Setup”This guide covers installing, running and updating rConfig V8 Professional with Docker Compose, using the rconfig8docker repository. See also the full Linux installation guide and the update process.
Before proceeding, review the OS Configuration guide and Security Hardening guidelines.
Complete the rConfig Professional Docker deployment with the following steps. Run the docker commands as root on the Docker host. For offline environments, see the V8 Pro Offline Installation instructions.
- Clone the repository
- Log in to the rConfig registry
- Configure environment variables
- Start the containers
- Complete the installation
- Check the container is healthy
- Access rConfig V8 Professional
Docker Deployment Overview
Section titled “Docker Deployment Overview”Prerequisites
Section titled “Prerequisites”- Docker and Docker Compose are installed on the target server.
- The contents of the repository’s
datadirectory are in thedatadirectory on your server. Cloning the repository and using itsdatadirectory as it is works. - An rConfig Professional subscription, with the registry username and token rConfig sent you.
rooton the Docker host.
The examples use the Docker Compose plugin (docker compose). The standalone docker-compose binary works the same way; use whichever is installed, and don’t mix them in scripts.
Deployment Procedures
Section titled “Deployment Procedures”Clone the Repository
Section titled “Clone the Repository”git clone https://github.com/rconfig/rconfig8docker.gitcd rconfig8dockerLog in to the rConfig Registry
Section titled “Log in to the rConfig Registry”docker login reg.rconfig.com:8443Username: # the robot account username rConfig sent youPassword: # the token rConfig sent youConfigure Environment Variables
Section titled “Configure Environment Variables”Edit data/.env:
APP_DEBUG=true/falseAPP_URL=http://yourFQDNorIP.domain.comDB_HOST=db # The database container, or another server if you use an external databaseDB_PORT=ENVOY_DB_PORT # 3306 for MariaDB unless customisedDB_DATABASE=ENVOY_DB_DATABASE # Any name for a new databaseDB_USERNAME=ENVOY_DB_USERNAME # The database userDB_PASSWORD=ENVOY_DB_PASSWORD # The database user's passwordRCONFIG_API_TOKEN=ENVOY_API_TOKEN # From the rConfig portalLeave APP_KEY and REDIS_PASSWORD empty. The container generates both on first start and saves them in data/.env.
Start the Containers
Section titled “Start the Containers”From the root of the clone:
docker compose up -dWatch the app container start. It is ready when the log shows Starting services...:
docker compose logs -f appComplete the Installation
Section titled “Complete the Installation”Run the setup commands. Always run artisan as www-data (-u www-data), never as root, so the files it writes stay owned by the app:
docker compose exec -u www-data app php artisan migrate --forcedocker compose exec -u www-data app php artisan rconfig:sync-tasksdocker compose exec -u www-data app php artisan rconfig:update-rbac-datadocker compose exec app supervisorctl restart horizonFrom V8.4.1 you don’t need to chown or chmod anything, and you don’t run key:generate. The container sets the owner and permissions of data/storage and data/.env on every start, and creates APP_KEY itself.
Check the Container is Healthy
Section titled “Check the Container is Healthy”docker compose psThe status column should show (healthy) within about two minutes. If it shows (unhealthy), see Container health.
Access rConfig V8 Professional
Section titled “Access rConfig V8 Professional”Open the URL you set as APP_URL and log in with the default credentials:
- Username:
admin@domain.com - Password:
admin
After first login, follow the security hardening guidance to align the container with enterprise policies.
Post-Installation Verification
Section titled “Post-Installation Verification”- Change the default account credentials.
- Check the version number on the Settings page.
- Open External Tools > Queue Manager and check that Horizon shows as active on the dashboard.
- Check the services in the container:
docker compose exec app supervisorctl statusExpected output (PIDs and uptimes differ):
apache2 RUNNING pid …, uptime …cache-rebuild EXITED …horizon RUNNING pid …, uptime …redis RUNNING pid …, uptime …schedule-run RUNNING pid …, uptime …cache-rebuild rebuilds the config, route and view caches once on start, then exits. schedule-run runs php artisan schedule:work, which takes the place of a cron line. If the SNMP trap receiver is on, rconfig-snmp-trap is also listed as RUNNING.
Next Steps:
- Understand V8 Features and Capabilities
- Review Update Procedures
- Consider Vector Server Upgrade for enhanced capabilities
How the Container Runs
Section titled “How the Container Runs”From V8.4.1:
- Horizon, the scheduler and the web server’s workers run as
www-data, and Redis runs asredis. Nothing in the app runs as root. The Worker Privilege checks are for bare metal and show “Not applicable in Docker”; the container health check covers the same ground. - Redis only listens inside the container and requires the password in
REDIS_PASSWORD. Keep that line indata/.env: the container reuses it on every start and upgrade. data/storageanddata/.envbelong towww-data(uid 1000) with no access for other users: folders0750, files0640, stored device configs0440. On the host they show as owned by whichever user has uid 1000. Host tools that read them as another non-root user lose access.- The database is not published on the host. To reach it from the host itself, uncomment the
127.0.0.1:3360:3306lines indocker-compose.yml. It then listens on 127.0.0.1 only.
Running artisan
Section titled “Running artisan”Run artisan as www-data:
docker compose exec -u www-data app php artisan <command>As root, artisan can create root-owned files in storage that the app then cannot write. Restart Horizon with supervisorctl, which runs as root in the container:
docker compose exec app supervisorctl restart horizonFrom V8.4.1, Horizon, scheduler, web server and Redis output goes to the container’s output, not to files in storage/logs. There is no horizon.log in Docker.
docker compose logs app # all service outputdocker compose logs -f app # follow itdocker compose logs --since 1h appThe app’s own logs (laravel-YYYY-MM-DD.log and the others) stay in data/storage/logs and show in the System Log Viewer. Docker keeps the service output with its logging driver, so set size limits there (for example max-size and max-file for the default json-file driver).
Container Health
Section titled “Container Health”From V8.4.1, the image has a Docker health check. It runs every 60 seconds, after a 120 second start period, and marks the container unhealthy after three failures in a row. It fails if:
- Horizon or the scheduler is not running as
www-data - Horizon or the scheduler is running as root
- the SNMP trap receiver is on but not running as
www-data - Redis answers without a password, or does not answer
- the web server returns an error (HTTP 500 or above) for
/login
docker compose ps shows the result. To see why the container is unhealthy:
docker inspect --format '{{json .State.Health}}' rconfig8docker-app-1Use the name docker compose ps shows if yours differs. The Output of each entry in Log lists the problems, for example Horizon is not running as www-data. Check docker compose logs app for the cause.
SNMP Trap Receiver (Optional)
Section titled “SNMP Trap Receiver (Optional)”From V8.4.1, the container can run the SNMP trap receiver:
- Set
RCONFIG_SNMP_TRAPS=trueindata/.env. - Uncomment the
- "162:1162/udp"line underports:indocker-compose.yml. - Run
docker compose up -d.
The receiver runs as www-data on UDP 1162 inside the container, and the host’s UDP 162 is mapped to it. rConfig identifies devices by the source address of their traps. Docker keeps that address with its default iptables networking. If your Docker host uses the userland proxy instead, every trap appears to come from the Docker bridge; in that case run the app container with network_mode: host.
See SNMP Traps for filters and actions.
Not Supported in Docker
Section titled “Not Supported in Docker”- xFTP (the TFTP, FTP and SFTP services) runs as separate containers controlled through the host’s Docker socket. Giving the rConfig container that socket would give it root on the host, so the xFTP pages say it is unavailable here. Run xFTP on a bare-metal rConfig install instead.
- Vector Hub needs systemd and a root helper on the server, which a container does not have. Use a bare-metal rConfig install for Vector Hub.
Updating
Section titled “Updating”Registry Version Discovery
Section titled “Registry Version Discovery”docker login reg.rconfig.com:8443Update Steps
Section titled “Update Steps”Run these from the root of your rconfig8docker clone.
-
Wait until the queue is empty. Settings > Queue Manager should show no pending jobs. Redis lives inside the app container, so queued jobs, sessions and cache are cleared whenever the container is recreated.
-
Back up the database and the
datadirectory:Terminal window docker compose exec db sh -c 'mariadb-dump -uroot -p"$MARIADB_ROOT_PASSWORD" --all-databases' > rconfig-db-backup.sqltar czf rconfig-data-backup.tar.gz data/.env data/storage -
Check which MariaDB version is running now:
Terminal window docker compose exec db mariadb --version -
Update
docker-compose.ymlfrom the repository. Then set itsdbimage to your current MariaDB major version or a later one, for examplemariadb:12.3if step 3 shows 12.3 or anything older. If step 3 shows a newer major (for example 13.0), use that one (mariadb:13.0). Never set a lower major than the one in use: MariaDB cannot move data back to an older major. Copy any local changes, such as other ports, from your old file. -
If anything on the host connected to the database on port 3360, uncomment the
127.0.0.1:3360:3306lines. From V8.4.1 the database is no longer published by default, and when enabled it listens on 127.0.0.1 only. -
Pull the new image and recreate the containers:
Terminal window docker compose pulldocker compose up -ddocker compose logs -f app # wait for "Starting services..."On the first start of the V8.4.1 image, the container fixes the owner and permissions of everything in
data/storage(this can take a few minutes on a large install), and addsREDIS_PASSWORDtodata/.env. -
Run the database migrations and restart Horizon. Migrations are not run automatically:
Terminal window docker compose exec -u www-data app php artisan migrate --forcedocker compose exec app supervisorctl restart horizon -
Check that
docker compose psshows(healthy), Settings > Queue Manager shows Horizon as active, and the version on the Settings page is the new one.
Rollback
Section titled “Rollback”To go back to the previous image, set the app image: line in docker-compose.yml to the previous version’s tag and run docker compose up -d. You can leave data/.env and data/storage as they are.
An image older than V8.4.1 runs Redis without a password and runs Horizon and the scheduler as root again, so treat it as a short-term step. If the data itself needs restoring, use the backups from step 2.
What’s next
Section titled “What’s next”- V8 Pro Installation (Linux) - Standard bare-metal installation guide for comparison
- V8 Pro Update Process - Updating a bare-metal install
- Horizon Queue Manager - Monitoring the queue
- OS Configuration - Operating system prerequisites and security hardening