Loading…
Loading…
Install the SOAP-2-REST platform as a self-contained VM appliance (OVA/VHDX) for VMware or Hyper-V. Ideal for air-gapped or VM-only environments.
The VM appliance is a single, downloadable virtual machine that contains the complete SOAP-2-REST product stack, including all services and a bundled PostgreSQL database. This installation method is designed for environments that are restricted to virtual machines, operate without internet access (air-gapped), or where operators may not have Kubernetes or Docker expertise.
The appliance is available for both VMware and Microsoft Hyper-V hypervisors. It is downloaded from the Specaria portal (portal.specaria.io) in one of two formats:
| Format | Hypervisor | File Name |
|---|---|---|
| OVA | VMware vSphere / vCenter / Workstation / Fusion | s2r-appliance-<version>.ova |
| VHDX | Microsoft Hyper-V | s2r-appliance-<version>.vhdx |
Internally, the appliance is a minimal Debian 12 virtual machine with Docker pre-installed. The product's Docker images are included as tar archives, which are loaded on the first boot, eliminating the need to pull images from a container registry. A systemd service automates the initial setup by reading the configuration you provide and launching the entire stack using Docker Compose.
NOTE
Air-Gapped by Design
The appliance image contains all components required to run the product. The only outbound connection required is for licensing and updates to the Specaria platform (https://api.specaria.io). A 14-day offline grace period accommodates transient network interruptions.
Allocate the following minimum resources to the virtual machine. For production workloads, 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 ships with a 20 GB virtual disk. If you anticipate a high volume of traffic logs, expand the virtual disk in your hypervisor's settings before the first boot.
The appliance automates the deployment process on its first boot. The sequence of operations is as follows:
config-drive ISO in Hyper-V)..env file at /opt/s2r/deploy/.env.load-images.sh script loads the bundled product Docker images from their tar archives into the local Docker daemon.docker compose up -d command starts the full application stack in the correct order: PostgreSQL, admin-api, runtime, worker, generic-ingest, admin-ui, and a TLS reverse proxy (Traefik).Once the boot process completes (typically 2–4 minutes), the platform's user interface is accessible on HTTPS port 443 at the configured hostname. The generic ingest receiver listens on TCP port 8081 by default.
The following diagram illustrates the first-boot process:
sequenceDiagram
participant API Publisher
participant Hypervisor
participant VM Appliance
participant Docker Engine
API Publisher->>Hypervisor: Deploy Appliance with Config
Hypervisor->>VM Appliance: Power On
VM Appliance->>VM Appliance: First-boot service starts
VM Appliance->>VM Appliance: Read config (OVF/ISO)
VM Appliance->>VM Appliance: Render /opt/s2r/deploy/.env
VM Appliance->>Docker Engine: Load image tarballs
VM Appliance->>Docker Engine: Run `docker compose up -d`
Docker Engine->>Docker Engine: Start services in order
VM Appliance-->>API Publisher: Platform ready at https://<S2R_HOSTNAME>Configuration is supplied once during the VM import and first boot. The properties use the canonical names found throughout the product. 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 platform UI. This value is used for TLS certificate generation and routing. |
S2R_ADMIN_BOOTSTRAP_EMAILS | Yes | A comma-separated list of email addresses for the initial administrator accounts. |
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. 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. Defaults to none, which assumes authentication is terminated at an upstream reverse proxy or Identity Provider (IdP). |
S2R_INGEST_CREDENTIALS | No | A JSON string defining basic authentication credentials for the ingest receiver. If left blank, the ingest endpoint has no authentication. This should be set for production. |
S2R_INGEST_HOST_PORT | No | The TCP port for the generic-ingest receiver. Defaults to 8081. |
IMPORTANT
Keep S2R_CREDENTIAL_KEY Safe
Whether you supply this key or let the appliance generate one, you must record its value in a secure secret store. Loss of this key will result in permanent loss of access to all encrypted backend credentials stored in the platform.
To retrieve a generated key after boot, SSH into the appliance and run: sudo grep S2R_CREDENTIAL_KEY /opt/s2r/deploy/.env
Licensing is handled through the admin UI after the first boot and is not a first-boot property.
s2r-appliance-<version>.ova file from your local machine or provide a URL.S2R_HOSTNAME and S2R_ADMIN_BOOTSTRAP_EMAILS. You can leave secret fields like S2R_DB_PASSWORD blank to have them auto-generated.govc CLIFor automated deployments, you can use the govc command-line tool.
govc import.spec s2r-appliance-<version>.ova > spec.json
spec.json to set the desired values for the PropertyMapping keys (e.g., S2R_HOSTNAME).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.config-drive ISO as a second CD/DVD drive before the first power-on. See the Hyper-V section for instructions; the same ISO format works.Hyper-V does not have a mechanism equivalent to VMware's OVF properties. Configuration must be supplied using a config-drive ISO that conforms to the cloud-init NoCloud datasource format.
Create the config-drive ISO. This is a one-time setup on any machine with an ISO creation tool.
user-data file by copying build/appliance/config-drive/user-data.example and editing the key-value pairs.meta-data file containing an instance-id and local-hostname.cidata.
genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data
oscdimg -lcidata -j2 .\seed seed.iso
In 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.
In the VM's settings, add a DVD Drive and attach the seed.iso file you created.
Assign resources to the VM (at least 2 vCPUs, 4 GB RAM) and connect it to a virtual switch.
Start the VM. The first-boot service will read the configuration from the ISO and start the application stack. The ISO can be detached after the first successful boot.
NOTE
If no config-drive ISO is attached, the appliance will fall back to an interactive prompt on the VM console for the hostname and admin email, and it will auto-generate the required secrets.
The appliance requires the following network access:
| Direction | Port / Target | Purpose |
|---|---|---|
| Inbound | TCP 443 (and 80) | Access for operators and API consumers to the platform UI. Port 80 redirects to 443. |
| Inbound | TCP 8081 (default) | The generic-ingest receiver. Required only if traffic logs are forwarded directly to the appliance. |
| Inbound | UDP/TCP 514 (syslog) | Required only if using an optional syslog relay agent for certain integrations (e.g., F5). |
| Outbound | TCP 443 → api.specaria.io | Required for product licensing and updates. |
It is recommended to restrict inbound access on port 443 to your trusted operator network. For single sign-on (SSO), place the appliance behind your own reverse proxy or load balancer, set S2R_ADMIN_UI_AUTH_MODE=none, and terminate authentication at the proxy.
https://<S2R_HOSTNAME>.S2R_ADMIN_BOOTSTRAP_EMAILS property.To verify that the application stack is running correctly from within the VM, you can use the following commands:
# Check the status of the Docker containers
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 appliance and restart the proxy service.
# Copy your certificate and key files
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 in the config-drive ISO.
The appliance's data, configuration, and certificates are stored in persistent locations and are preserved during upgrades.
This method updates the product images on the existing VM.
deploy/images/ bundle) from the Specaria portal.*.tar files to the appliance and run the upgrade scripts.
# Copy the new image archives to the appliance
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.This method involves deploying a new appliance and migrating data from the old one.
S2R_CREDENTIAL_KEY as the old one to maintain access to encrypted credentials.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 database, respectively.
| Symptom | Action |
|---|---|
| Application stack did not start | Check the first-boot service logs for errors related to configuration or image loading: sudo journalctl -u s2r-appliance -u s2r-firstboot. |
.env file was not generated | Verify that a configuration source was present on first boot (OVF properties or a config-drive ISO with the volume label cidata). You can re-run the renderer with sudo /opt/s2r/s2r-firstboot.sh. |
| Need to re-run first-boot setup | To force the first-boot process to run again, remove the marker files and 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 your firewall allows inbound traffic on TCP port 443 to the VM. Verify that the S2R_HOSTNAME resolves to the correct IP address of the VM. |
| Disk is filling up | Container log rotation is enabled by default (5 files of 20 MB each). If the disk is filling with traffic logs, you must expand the VM's virtual disk in your hypervisor. |