Loading…
Loading…
Install the complete SOAP-2-REST platform on VMware or Hyper-V using a self-contained OVA or VHDX virtual machine appliance for air-gapped environments.
The VM appliance is a single, downloadable virtual machine that contains the complete SOAP-2-REST product, including all services and a bundled PostgreSQL database. This installation method is designed for environments that do not use Kubernetes or Docker, or for deployments in air-gapped networks with no internet access.
The appliance is available for VMware and Microsoft Hyper-V hypervisors. It consists of a minimal Debian 12 virtual machine with Docker pre-installed. The product's container images are included as tar archives within the appliance and are loaded into the local Docker engine on first boot, eliminating the need to pull from an external container registry.
A systemd-managed service automates the initial setup process by reading user-provided configuration, preparing the environment, and starting the entire application stack using Docker Compose.
Two appliance formats are available for download from the Specaria portal:
| Format | Hypervisor | File Name |
|---|---|---|
| OVA | VMware vSphere / vCenter / Workstation / Fusion | s2r-appliance-<version>.ova |
| VHDX | Microsoft Hyper-V | s2r-appliance-<version>.vhdx |
NOTE
Air-Gapped by Design
The appliance contains all components necessary to run the product. The only outbound connection required is to the Specaria platform (api.specaria.io) for licensing and software updates. A 14-day offline grace period accommodates transient network interruptions. For more details, see the Egress Allow-list and Licensing documentation.
Provision the virtual machine with the following minimum resources. For production environments, use the recommended values.
| Resource | Minimum | Recommended (Production) |
|---|---|---|
| vCPU | 2 | 4 |
| RAM | 4 GB | 8 GB |
| Disk | 20 GB | 40 GB+ (grows with traffic-log retention) |
The appliance is distributed with a 20 GB virtual disk. If you anticipate high volumes of traffic logs, expand the virtual disk in your hypervisor settings before the first boot.
On its first boot, the appliance executes an automated setup sequence:
flowchart TD
A[VM Power On] --> B{First Boot?};
B -- Yes --> C[First-boot Service Starts];
C --> D[Read Configuration<br/>(OVF Properties or Config-Drive ISO)];
D --> E[Render /opt/s2r/deploy/.env];
E --> F[Load Bundled Docker Images<br/>(load-images.sh)];
F --> G[Start Application Stack<br/>(docker compose up -d)];
G --> H[Generate Self-Signed TLS Certificate];
H --> I[Platform Ready];
I --> J[Admin UI on Port 443];
I --> K[Ingest Receiver on Port 8081];
B -- No --> I;/opt/s2r/deploy/.env file from the configuration properties you supply during import.load-images.sh to load the bundled product image tarballs into the local Docker engine.docker compose up -d to launch the full stack in the correct order: PostgreSQL, admin-api, runtime, worker, generic-ingest, admin-ui, and a Traefik reverse proxy.After this process completes, the platform's admin UI is accessible via HTTPS on port 443 at the configured hostname. The generic-ingest receiver listens on its default port, 8081.
You must provide configuration properties once, at the time of VM import or first boot. These keys are the canonical environment variables used across all deployment types. You do not need to edit files inside the VM manually.
| Property | Required | Description |
|---|---|---|
S2R_HOSTNAME | Yes | The fully qualified domain name (FQDN) or IP address for the admin UI. This value is used for the TLS certificate's Subject Alternative Name (SAN) and for routing. |
S2R_ADMIN_BOOTSTRAP_EMAILS | Yes | A comma-separated list of email addresses for the initial administrator accounts to be created on first boot. |
S2R_DB_PASSWORD | No | The password for the bundled PostgreSQL database. If left blank, a strong, random password is automatically generated. |
S2R_CREDENTIAL_KEY | No | A 32-byte, base64-encoded AES key for encrypting backend credentials stored in the database. If left blank, a key is automatically generated. This key must be backed up. |
S2R_ADMIN_UI_AUTH_MODE | No | The authentication mode for the admin UI. The default is none, which is suitable when terminating authentication at an upstream reverse proxy or Identity Provider (IdP). |
S2R_INGEST_CREDENTIALS | To receive gateway traffic | A JSON string defining basic authentication credentials for the ingest receiver. If left blank, the receiver will reject all incoming requests with a 503 Service Unavailable status until configured. |
S2R_INGEST_HOST_PORT | No | The host port for the generic-ingest receiver. Defaults to 8081. |
IMPORTANT
Keep S2R_CREDENTIAL_KEY Safe
Whether you supply a value for S2R_CREDENTIAL_KEY or allow the appliance to generate one, you must record this key in a secure secret store. Loss of this key will result in the permanent loss of access to all configured backend credentials.
To retrieve a generated key after boot, SSH into the VM and run: sudo grep S2R_CREDENTIAL_KEY /opt/s2r/deploy/.env.
s2r-appliance-<version>.ova file from your local machine or provide a URL.S2R_HOSTNAME and S2R_ADMIN_BOOTSTRAP_EMAILS. Leave secret fields like S2R_DB_PASSWORD blank to have them auto-generated.For automated deployments, use the govc command-line tool.
# Inspect the OVA to see the configurable properties
govc import.spec s2r-appliance-<version>.ova > spec.json
# Edit spec.json to set the desired values in the PropertyMapping section
# (e.g., S2R_HOSTNAME, S2R_ADMIN_BOOTSTRAP_EMAILS).
# Import the OVA using the modified spec file and power it on
govc import.ova -options=spec.json -name=s2r-appliance s2r-appliance-<version>.ova
govc vm.power -on s2r-appliance
File → Open and choose the .ova file.cidata-labeled ISO file (as described in the Hyper-V section) as a second CD/DVD drive before the first power-on.Hyper-V does not have a mechanism equivalent to VMware's vApp properties. Configuration must be supplied using a cloud-init compatible "config-drive" ISO file.
Create the config-drive ISO. This is a one-time setup on any machine with an ISO creation tool.
user-data file containing the first-boot properties. An example file is available in the source at build/appliance/config-drive/user-data.example.meta-data file specifying an instance-id and local-hostname.cidata.
genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-dataoscdimg -lcidata -j2 .\seed seed.isoIn Hyper-V Manager, create a New Virtual Machine. Select Generation 1.
When prompted for the hard disk, choose Use an existing virtual hard disk and select the s2r-appliance-<version>.vhdx file.
Before starting the VM, edit its settings to add a DVD Drive and mount the seed.iso file you created.
Assign resources (vCPU, RAM) and connect the VM to a virtual switch.
Start the VM. The first-boot service will detect and read the config-drive ISO, configure the system, and start the application stack. The ISO can be detached after the first successful boot.
NOTE
If no config-drive ISO is detected, the appliance will fall back to an interactive prompt on the VM console, asking for the hostname and admin email, and will auto-generate the required secrets.
The appliance requires the following network access:
| Direction | Port / Target | Purpose |
|---|---|---|
| Inbound | TCP 443 (and 80 for redirect) | Access to the platform UI and API for operators. |
| Inbound | TCP 8081 (default) | Receives traffic logs from a gateway or load balancer configured for the generic-ingest receiver. |
| Inbound | UDP/TCP 514 (syslog) | Optional. Used only if a gateway (e.g., F5) relays traffic logs via a syslog agent. |
| Outbound | TCP 443 → api.specaria.io | Required for product licensing and software updates. |
For production deployments, restrict inbound access to port 443 to your trusted operator network. If you require single sign-on (SSO), front the appliance with your own load balancer or reverse proxy, set S2R_ADMIN_UI_AUTH_MODE=none, and terminate authentication at that layer.
https://<S2R_HOSTNAME>.S2R_ADMIN_BOOTSTRAP_EMAILS.To verify that all services are running correctly from within the VM, you can use the following commands:
# Check the status of all Docker containers in the stack
sudo docker compose -f /opt/s2r/deploy/docker-compose.yml ps
# Run the health check script
sudo /opt/s2r/deploy/scripts/test-health.sh https://<S2R_HOSTNAME> --insecure
To replace the default self-signed certificate with your own, copy your certificate and private key to the VM and restart the proxy service.
# Copy your certificate and key to the correct location
sudo cp your-tls.crt /opt/s2r/deploy/certs/tls.crt
sudo cp your-tls.key /opt/s2r/deploy/certs/tls.key
# Restart the proxy container to apply the new certificate
sudo docker compose -f /opt/s2r/deploy/docker-compose.yml restart proxy
You can also pre-load a certificate by including /etc/s2r/tls.crt and /etc/s2r/tls.key files in the config-drive ISO.
Your configuration (.env), database, and certificates are preserved across upgrades.
This method updates the application images without redeploying the entire VM.
*.tar files into the appliance's image directory and run the upgrade commands.# Copy new image tarballs into the VM
sudo cp /path/to/new/*.tar /opt/s2r/deploy/images/
# Load the new images into Docker
sudo /opt/s2r/deploy/scripts/load-images.sh
# Re-create the containers with the new images
sudo docker compose -f /opt/s2r/deploy/docker-compose.yml up -d
Database schema migrations are applied automatically when the admin-api service starts.
CAUTION
During an upgrade, do not delete the /opt/s2r/deploy/.env file, the /opt/s2r/deploy/certs/ directory, or the Docker volume named s2r_postgres_data. These contain your configuration, TLS certificate, and all product data.
Alternatively, you can deploy a new version of the OVA/VHDX appliance and migrate your data.
S2R_CREDENTIAL_KEY from your old appliance so that encrypted data remains accessible.| Symptom | Action |
|---|---|
| Application stack did not start | Check the first-boot service logs for configuration or image loading errors: sudo journalctl -u s2r-appliance -u s2r-firstboot. |
.env file was not created | Verify that a configuration source was present on first boot (OVF properties or a config-drive ISO with the cidata volume label). You can re-run the configuration renderer with sudo /opt/s2r/s2r-firstboot.sh. |
| Need to re-run first-boot configuration | To force the first-boot process to run again, remove the completion marker and .env file, then restart the services: sudo rm /opt/s2r/.firstboot-done /opt/s2r/deploy/.env && sudo systemctl restart s2r-firstboot s2r-appliance. |
| Cannot reach the UI | Confirm that firewall rules allow inbound traffic on TCP port 443 to the VM. Ensure that the S2R_HOSTNAME resolves to the VM's IP address. |
| Disk is filling up | The appliance enables container log rotation by default (5 files of 20 MB each). To retain more traffic-log data, expand the VM's virtual disk in your hypervisor. |