Single VM Deployment Guide
Deployment guide for the MCM Platform on a Single VM — commands, requirements, and configurations.
MCM Platform — Single VM Deployment Guide
Get MCM up and running in under 30 minutes. This guide provides the essential commands, network requirements, and validation steps for deploying the platform on a Single VM.
Upgrading from v1.2
MCM 2.0 is a clean-start release. It uses a new data model (PostgreSQL and Elasticsearch only — MongoDB is no longer used), so data from a v1.2 installation is not migrated. Plan to deploy 2.0 on a fresh VM (or after removing the old installation), then re-onboard your cloud accounts and re-run discovery. v1.2 settings, users, policies, budgets, workspaces and AI conversation history are not carried over. Keep your v1.2 environment running until you have validated 2.0.
1. Prerequisites & VM Specifications
Ensure your target virtual machine meets the following minimum specifications:
| Requirement | Specification |
|---|---|
| OS | Ubuntu Server 24.04 LTS |
| CPU | 8 CPU |
| RAM | 32 GB |
| Disk | 150 GB |
| Network | 1 Gbps |
| Access | Root SSH |
| Inbound Ports | 22 (SSH), 443 (HTTPS) |
Scaling for Production
The above specifications are the minimum requirements to deploy and run the MCM Platform. For production environments with larger workloads, refer to the VM Sizing Guide for recommended specifications based on your managed resource count.
2. Network & Connectivity Requirements
Deploying the MCM platform on a Single VM requires provisioning the underlying hosting server. The instance should be configured with the operating system and resources specified in Prerequisites & VM Specifications (Ubuntu 24.04 LTS, 8 CPU, 32 GB RAM, 150 GB Disk).
Infrastructure Setup: On-Premises
Provision a single physical host or local virtual machine meeting the resource specifications:
- OS: Clean installation of Ubuntu Server 24.04 LTS.
- Networking: Assign a static internal LAN IP (and map a public IP or configure a reverse proxy/VPN gateway if external access is required).
Mandatory Outbound Internet Egress
Regardless of whether the VM is deployed on-premises, in a public subnet, or in a private subnet (behind VPN/Load Balancers), the server must have outbound internet access (directly or via NAT Gateway / Egress Firewall):
- Installation & Updates: Required during setup to download Docker containers, APT system packages, and software dependencies.
- Cloud API Synchronization: Required continuously at runtime for MCM backend services to communicate with public cloud provider APIs (AWS, Azure) to sync inventory, cost metrics, and security policies.
3. Firewall & Security Rules
To secure the single-node deployment, only administrative SSH and web traffic (HTTP/HTTPS) should be allowed inbound. Since the platform utilizes Docker Swarm internally, all cluster management ports (2377, 7946, 4789) must remain blocked from external inbound access to prevent unauthorized cluster probes. The same applies to the MCM management service (port 8642) — it is used only by the platform itself on the same host and must not be exposed.
Security Rule Rationale
- Port 22 (TCP): Used for administrative SSH access to the host.
- Port 80 (TCP): Used for standard HTTP traffic. Port 80 automatically redirects incoming requests to secure HTTPS (port 443) so users do not experience connection errors if they access the site via
http://. - Port 443 (TCP): Used for the primary secure application gateway access.
Changed in 2.0: fewer inbound ports
MCM 2.0 no longer uses the Wazuh agent ports (1514/1515) or the separate upgrade-agent port (9098). Only SSH, HTTP and HTTPS are needed inbound.
Procedure: On-Premises Host-Level Firewall (UFW)
Run the UFW configuration commands on your Single VM:
# 1. Set default policies
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. Allow SSH and Web traffic
sudo ufw allow 22/tcp comment "SSH Administrative Access"
sudo ufw allow 80/tcp comment "HTTP Gateway Redirection"
sudo ufw allow 443/tcp comment "HTTPS Ingress Gateway"
# 3. Enable the firewall
sudo ufw enableOutbound Connection Requirements
The MCM platform requires outbound HTTPS (port 443) connectivity to the following main domains:
IMPORTANT: Mandatory Egress Whitelisting for Private Infrastructure
If your infrastructure is provisioned inside a private subnet, air-gapped network, or operates behind a corporate egress firewall / forward proxy (e.g. Palo Alto, Fortinet, AWS NAT Gateway, Azure Firewall, Squid), you MUST whitelist every domain, port, and protocol listed below.
- Installation Impact: Failure to whitelist will cause
apt-getdependency installations, Docker container image pulls, or installer package downloads to hang or fail. - Runtime Impact: The MCM platform persistently connects to AWS/Azure APIs, Microsoft Graph/Entra ID, NTP time servers, currency feeds (FinOps), Git providers (GitHub, GitLab, Bitbucket) and Elastic.
- Wildcard Configuration: Where indicated, configure domain wildcard rules (e.g.,
*.amazonaws.com,*.azure.com,*.revdau.ai,*.ubuntu.com) in your egress firewall to avoid dropped connections to regional or dynamic endpoints.
| # | Domain / Destination | Ports | Protocol | Phase | Purpose |
|---|---|---|---|---|---|
| 1 | *.amazonaws.com | 443 | HTTPS | Runtime | AWS Cloud management, STS & cost telemetry APIs |
| 2 | *.api.aws | 443 | HTTPS | Runtime | Modern AWS service API endpoints |
| 3 | *.windows.net | 443 | HTTPS | Runtime | Azure Cloud management, blob storage & resource sync |
| 4 | *.azure.com | 443 | HTTPS | Runtime | Azure Resource Manager (ARM) APIs & cost reporting |
| 5 | login.microsoftonline.com | 443 | HTTPS | Runtime | Microsoft Entra ID (Azure AD) OAuth authentication |
| 6 | graph.microsoft.com | 443 | HTTPS | Runtime | Microsoft Graph API for tenant discovery & identity management |
| 7 | *.docker.io | 443 | HTTPS | Installation / Runtime | Docker Hub container registry & image layers |
| 8 | *.docker.com | 443 | HTTPS | Installation / Runtime | Docker Engine package repository & authentication |
| 9 | *.elastic.co | 443 | HTTPS | Installation / Runtime | Elastic packages, integration assets & telemetry |
| 10 | *.ubuntu.com | 80, 443 | HTTP/HTTPS | Installation / Runtime | Ubuntu system package updates (apt-get) |
| 11 | *.canonical.com | 80, 443 | HTTP/HTTPS | Installation / Runtime | Canonical security updates & kernel patches |
| 12 | *.github.com | 443 | HTTPS | Installation / Runtime | GitHub API integration & CLI binary downloads |
| 13 | *.githubusercontent.com | 443 | HTTPS | Installation | Raw GitHub assets, scripts & binary downloads |
| 14 | ghcr.io | 443 | HTTPS | Installation / Runtime | GitHub Container Registry for service images |
| 15 | registry.opentofu.org | 443 | HTTPS | Runtime | OpenTofu provider registry for IaC Orchestration |
| 16 | *.cloudflarestorage.com | 443 | HTTPS | Runtime | Cloudflare R2 storage for OpenTofu & container asset downloads |
| 17 | hub.steampipe.io | 443 | HTTPS | Runtime | Steampipe cloud discovery plugins & registry |
| 18 | *.digicert.com | 80, 443 | HTTP/HTTPS | Installation / Runtime | TLS certificate chain validation & CRL revocation checks |
| 19 | api.frankfurter.app | 443 | HTTPS | Runtime | Live currency exchange rates for FinOps multi-currency conversion |
| 20 | *.revdau.ai | 443 | HTTPS | Installation / Runtime | MCM Nexus portal (nexus.mcm.revdau.ai), license verification & artifact downloads |
| 21 | *.ntp.ubuntu.com | 123, 4460 | UDP/TCP | Runtime | Network Time Protocol (NTP) for server clock synchronization |
| 22 | gitlab.com | 443 | HTTPS | Runtime | GitLab repository discovery & scanning (only if you onboard GitLab) |
| 23 | bitbucket.org, api.bitbucket.org | 443 | HTTPS | Runtime | Bitbucket repository discovery & scanning (only if you onboard Bitbucket) |
Understanding Connection Phases: * Installation: Outbound access required during initial platform deployment to download system packages, container images, and binary dependencies. * Runtime: Outbound access required continuously while the platform is running for cloud API synchronization, inventory discovery, cost metrics, and security threat intelligence feeds.
4. Installation Procedure
Step 1: Account Registration & Portal Access
Follow these steps on the MCM Nexus Portal to set up your account:
-
Visit MCM Portal Landing Page: Navigate to https://nexus.mcm.revdau.ai and click the Continue button.
-
Complete the Sign-Up Form: Fill in your organizational and contact details in the registration form to create your account.
-
Receive Verification & Credentials Email: Check your inbox for the welcome email containing your initial credentials and verification details.
-
Sign In to MCM Portal: Go to the login screen and sign in using your registered email and temporary password.
-
Set Your Account Password: On your first login, configure a secure password for your account.
Step 2: License Request & Approval Workflow
-
Access Portal Workspace Dashboard: After logging in, access your workspace dashboard.
-
Navigate to the Request Tab: Click on the Request tab in the top navigation bar.
-
Submit License Request & Wait for Approval: Fill out and submit your license entitlement request.
Administrator Approval
The MCM Administrator team reviews and approves submitted license requests. Once approved, the software package download and license entitlements become accessible under the License tab.
Step 3: Generate Download Command & Server Deployment
-
Open Your License: In the MCM Nexus portal, open Licenses and select your license. Under Subscription key, click Create key if you have not already. Copy the key when it is shown — it is displayed only once, and you can Rotate key at any time. You will use it both to download the installer and to activate the platform.
-
Select Release Version & Copy Download Command: Under Download installation package, select version
2.0.0from the Version dropdown and click Copy next to thewgetcommand. If your server reaches the internet through a proxy, enter it in Proxy URL (optional) first and the command is adjusted for you. You can also click Download to save the package through your browser.
-
Connect to the server via SSH:
ssh [VM_SSH_USER]@<SERVER_IP> -
Execute the Copied Download Command:
wget -c --header="Authorization: ApiKey <YOUR_SUBSCRIPTION_KEY>" \ "https://nexus.mcm.revdau.ai/api/mcm-app/downloads/package?version=2.0.0" -O mcm-installer.tar.gzReplace
<YOUR_SUBSCRIPTION_KEY>with your subscription key. The-cflag resumes an interrupted download — re-run the same command to continue. -
Extract and Launch the Installer:
tar -xzf mcm-installer.tar.gz cd mcm_artifacts sudo ./mcm install --env=main --mode=singleMCM 2.0 is installed with a single
mcmcommand-line tool (it replaces theinstall.shandupgrade.shscripts used in v1.2). Run it from inside the extractedmcm_artifactsfolder.
Installation Details:
- Installation Time: Installation takes 15–30 minutes. Outbound internet access is required on the server during installation to install dependencies.
- Pre-flight checks: Before deploying, the installer checks the server's CPU, free memory and free disk space, and tests outbound connectivity to the domains listed above. If a check fails it reports the exact issue; fix it and re-run the command.
- Forward proxy: If the server reaches the internet through a corporate proxy, add
--http-proxy=http://<PROXY_HOST>:<PORT>and--https-proxy=http://<PROXY_HOST>:<PORT>(and optionally--no-proxy=<COMMA_SEPARATED_DESTINATIONS>) to the install command. You can change the proxy later under Settings > Proxy in the MCM console or withsudo mcm proxy configure(see the Helper Scripts and Commands Guide).- Docker: If Docker is not already installed, the installer installs it. All secrets, passwords and internal certificates are generated automatically — you do not need to create them.
- Management service: The installer also sets up the
mcmmanagement service (mcm.service) that powers themcm status,mcm upgradeand other commands described in the Helper Scripts and Commands Guide. Running the install command again on an already-installed server does nothing unless you pass--force.
Step 4: Platform Activation & Super Admin Setup
Once deployment completes, navigate to https://<DOMAIN_OR_IP>/subscription in your browser:
-
Activate Subscription: Enter your Subscription Key and click Continue. Review the license details (organization, license name, plan, status, validity and owner), then click Activate.
-
Owner Account Created: Activation creates the account for the license owner and emails their login details. When you see Owner account created, click Continue to login.
-
Log In to Platform: Log in with the credentials from the email and proceed to the User Guide: first-run activation.
5. Operations & Health Verification
You can verify the status and health of all deployed services with the mcm tool (optional):
mcm status # platform version, URL and per-service replica status
mcm healthcheck # point-in-time health snapshot of every serviceA service that is still starting, or running below its expected replica count, is reported as unhealthy. Allow about 5 minutes after installation for all services to initialize.
General Verification and Control
For verification steps, stack teardown commands, and utility control scripts (starting, stopping, restarting, or upgrading the platform components), please refer to the Helper Scripts and Commands Guide.
For custom domain configuration and SSL/TLS certificate management, please refer to the Domain and TLS Certificate Configuration Guide.
For troubleshooting configuration, certificate, or service initialization errors, refer to the Troubleshooting Guide.