Deployment guide

WSO2 Micro Integrator

Overview

WSO2 Micro Integrator is a lightweight, cloud-native integration runtime in the enterprise service bus and enterprise application integration tradition. It runs integration artifacts such as REST APIs, proxy services, message mediation sequences and scheduled tasks. These connect applications, APIs, databases and messaging systems, routing and transforming messages through a fast Synapse passthrough engine.

This SecureAnyCloud image runs a single node from the official Apache 2.0 licensed WSO2 Micro Integrator 4.6.0 distribution in /opt/wso2mi, on OpenJDK 21, as a dedicated wso2 system user. On first boot, it rotates a unique Management API administrator password into the runtime.

What you get:

  • WSO2 Micro Integrator 4.6.0 from the official OSS distribution, on OpenJDK 21
  • The Synapse data plane: HTTP passthrough on 8290 and HTTPS passthrough on 8253
  • A sample REST API (context /health) deployed on the data plane, so the runtime answers on first boot
  • The Management API on HTTPS 9164, restricted to the loopback interface by a host firewall and fronted by nginx on port 80
  • A unique per-VM Management API admin password generated on first boot, with no shared default credential
  • 24/7 SecureAnyCloud support

Only the Apache 2.0 open-source runtime is shipped. There is no commercial WSO2 subscription component, and the separate WSO2 Micro Integrator Dashboard is not bundled. The Management API and the internal API (9164 and 9201) are reachable only from the loopback interface. Administrators reach the Management API through the nginx front on port 80 or over an SSH tunnel.

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet plus subnet in the target region.

Standard_B2ms (2 vCPU / 8 GiB RAM) is a good starting point for a Java integration runtime.

For inbound NSG rules, allow 22/tcp from your management network and 80/tcp for the Management API front. Also allow 8290/tcp (and 8253/tcp) if you want clients to reach your deployed integration endpoints. Restrict every port to trusted networks.

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, and search the Marketplace for WSO2 Micro Integrator by SecureAnyCloud. Select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80). Then choose Review + create, followed by Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:wso2-micro-integrator-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name wso2mi \
  --image sac1647283583153:wso2-micro-integrator-ubuntu-24-04:default:latest \
  --size Standard_B2ms \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the runtime is installed and running

Check the release on disk, the Java runtime, and that the services are active:

echo "WSO2 Micro Integrator $(basename $(readlink -f /opt/wso2mi) | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')" java -version 2>&1 | head -1 systemctl is-active wso2mi nginx wso2mi-loopback-guard

The output shows the 4.6.0 release, OpenJDK 21 and three active services:

WSO2 Micro Integrator 4.6.0 openjdk version "21.0.11" 2026-04-21 active active active

Step 5 - Confirm the data plane and the listening ports

The Synapse data plane listens on 8290 (HTTP) and 8253 (HTTPS). The Management API listens on 9164, the internal API on 9201, and nginx on 80. Confirm the ports and call the deployed sample API on the data plane:

ss -tln | grep -E ':8290 |:8253 |:9164 |:9201 |:80 ' curl -s http://127.0.0.1:8290/health

The sample API answers with a JSON payload, which proves that a request flows end to end through the passthrough transport:

{"status":"healthy","runtime":"wso2-micro-integrator","sac":true}

Step 6 - Retrieve your per-VM admin password

Each VM generates its own unique Management API administrator password on first boot. It writes the password, along with the resolved URLs, to a root-only credentials file:

sudo cat /root/wso2mi-credentials.txt

The file contains WSO2MI_ADMIN_USERNAME (admin), WSO2MI_ADMIN_PASSWORD, the Management API front URL and the data plane URL. Store the password in your secrets manager. In the steps below, <WSO2MI_ADMIN_PASSWORD> stands for the value of WSO2MI_ADMIN_PASSWORD.

Step 7 - Log in to the Management API for a token

The WSO2 command line tool and dashboard drive the Management API, which authenticates against the per-VM administrator password. Request a token with HTTP Basic authentication. This block reads the password straight from the credentials file, so it runs as is:

PW=$(sudo grep '^WSO2MI_ADMIN_PASSWORD=' /root/wso2mi-credentials.txt | cut -d= -f2-)
curl -sk -u "admin:$PW" https://127.0.0.1:9164/management/login

A successful login returns a JSON AccessToken. Present it as a bearer token to the other Management API resources:

{"AccessToken":"eyJraWQiOiJlOWVmMGU4Mi0wY2Y1..."}

You can also reach the Management API through the nginx front on port 80, which reverse-proxies to the loopback-bound listener. Substitute the real password for <WSO2MI_ADMIN_PASSWORD>:

curl -s -u admin:<WSO2MI_ADMIN_PASSWORD> http://<vm-public-ip>/management/login

Step 8 - The authentication wall

First boot replaces the default admin/admin credential with a unique per-VM password before the runtime ever starts. Neither the default password nor any wrong password authenticates. Confirm the rejection: both return HTTP 401, while your per-VM password returns 200 with a token.

echo "admin/admin -> $(curl -sk -o /dev/null -w '%{http_code}' -u admin:admin https://127.0.0.1:9164/management/login)"
echo "wrong pw -> $(curl -sk -o /dev/null -w '%{http_code}' -u admin:wrong-pw https://127.0.0.1:9164/management/login)"
admin/admin -> 401 wrong pw -> 401

Step 9 - Deploy your own integration artifacts

The runtime hot-deploys integration artifacts (REST APIs, proxy services, sequences, scheduled tasks) from the Synapse configuration directory. Drop a Carbon Application (.car) into the carbonapps directory, or a raw Synapse configuration into the synapse-configs tree, and the runtime picks it up. For example, list the deployed APIs directory that holds the shipped sample:

sudo ls /opt/wso2mi/repository/deployment/server/synapse-configs/default/api/

Build Carbon Applications with WSO2 Integration Studio or the MI for VS Code extension. Copy them to /opt/wso2mi/repository/deployment/server/carbonapps/, then confirm deployment through the Management API or the runtime logs at /opt/wso2mi/repository/logs/.

Step 10 - Reach the Management API remotely over an SSH tunnel

A host firewall (nftables) drops off-box traffic to the Management API (9164) and internal API (9201), so they are reachable only from the loopback interface. Use the nginx front on port 80, or open an SSH tunnel and point a local client at the loopback listener:

# On your workstation:
ssh -L 9164:127.0.0.1:9164 azureuser@<vm-public-ip>
# Then log in through the tunnel (self signed certificate, so -k):
# curl -sk -u admin:<WSO2MI_ADMIN_PASSWORD> https://127.0.0.1:9164/management/login

For production remote administration, front the Management API with a trusted TLS certificate on nginx and restrict access with your NSG. Never expose 9164 directly to the internet.

Maintenance

  • Configuration: edit /opt/wso2mi/conf/deployment.toml (transports, users, mediation settings), then run sudo systemctl restart wso2mi.
  • Password: first boot writes the per-VM password into deployment.toml. To rotate it later, update the [[internal_apis.users]] password in deployment.toml, restart the runtime, and update your credentials store.
  • Logs: runtime and access logs are under /opt/wso2mi/repository/logs/.
  • Loopback guard: the nftables table sac_wso2_guard (service wso2mi-loopback-guard) restricts 9164 and 9201 to loopback. Adjust it only if you deliberately want the Management API reachable off box behind TLS.
  • Security patches: unattended-upgrades stays enabled, so the OS continues to receive security updates automatically.

Support

SecureAnyCloud provides 24/7 expert support for this image. Contact sales@secureanycloud.com.

WSO2 and WSO2 Micro Integrator are trademarks of WSO2 LLC. This image is provided by SecureAnyCloud and is not affiliated with or endorsed by WSO2 LLC. Only the Apache 2.0 licensed open-source Micro Integrator runtime is included.

Deploy on Azure

Launch WSO2 Micro Integrator on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure