What you need first
- KYB-approved provider account in the partner portal
- API keys (
pk_*,sk_*,enc_*) and your partner reference (liquidramp-client-id) — see Authentication - Provision node source (the Docker-ready
liquidramp-nodeproject) - At least one fulfilment rail:
- Fiat: PalmPay, BellBank, Korapay, or Nomba credentials
- Crypto: an EVM wallet private key plus the currencies/networks you will serve
- A domain (for example
node.yourcompany.com) pointed at the VM
Recommended host
Keep it small. The node is an HTTP process plus outbound API calls.
Open only 22 (SSH), 80, and 443. Do not publish the node’s app port (3100) to the internet — terminate TLS on the host and proxy locally.
1. Create a cheap VM
Pick one of the following. Both are single-server setups — no load balancer, Kubernetes, or managed container service required.DigitalOcean Droplet
- Create a Droplet: Ubuntu 24.04, Regular SSD, 1 vCPU / 2 GB RAM (Basic, ~US$12/mo). The 1 GB plan works for sandbox only.
- Add your SSH key. Enable a Reserved IP if you want a stable address across rebuilds.
- In your DNS provider, create an A record:
node.yourcompany.com→ the Droplet (or reserved) IPv4. - SSH in as
root(or the user you created).
AWS Lightsail (lightweight AWS)
Lightsail is the low-cost AWS option. A t-family EC2 instance plus ALB is unnecessary for a single node.- In Lightsail, create an instance: OS Only → Ubuntu 24.04, plan 5/mo (1 GB, sandbox).
- Create a static IP and attach it to the instance.
- Networking firewall: allow SSH (22), HTTP (80), HTTPS (443).
- Point
node.yourcompany.comat the static IP. - SSH in with the Lightsail key pair.
2. Harden and install Docker
Run on the VM:3. Place the node and environment file
Copy the provision node project onto the host (git clone of the repo you were given, orscp -r). Example layout:
/opt/liquidramp-node/docker-compose.yml:
127.0.0.1:3100 keeps the app off the public interface. Caddy (next step) is the only public entrypoint.
Create /opt/liquidramp-node/.env from the project’s .env.example. Required for every node:
https://vibe-api.liquidramp.com with *_test_* keys on test, and https://api.liquidramp.com with *_live_* keys in production. LIQUIDRAMP_API_BASE_URL is the root host (no /v1). The node calls /v1/node-info and /v1/lp/orders/... itself.
Fiat provision (optional)
SetFIAT_CURRENCIES and only the BaaS you actually hold. Providers that are missing credentials are skipped at startup.
/v1/webhooks/baas/...), not against your VM. You do not need extra inbound webhook ports on the node.
Crypto provision (optional)
ALCHEMY_API_KEY, INFURA_PROJECT_ID, ANKR_API_KEY, DRPC_API_KEY.
If you use an IP whitelist on the partner profile, add this VM’s egress IPv4 so heartbeat and fulfilment callbacks to the Liquidramp API are not blocked.
4. HTTPS with Caddy
Caddy obtains Let’s Encrypt certificates automatically./etc/caddy/Caddyfile:
"message": "Healthy" (no HMAC required on /health).
5. Register the URL in the portal
Liquidramp does not discover your node. You must save the public URL.- Open Settings → Node Server in the partner portal.
- Enter the URL, for example
https://node.yourcompany.com.- Include
https:// - No trailing slash
- Do not append
/healthor/v1
- Include
- Save. The platform immediately calls
GET {endpoint_url}/health. If that fails, the URL is rejected. - After a successful save, the Node Server page shows status, version, environment, and client ID. Use Refresh to re-fetch
GET /node-info.
endpoint_url is set and the node is reachable.
6. Confirm it is live
Heartbeat payload includes node info, wallet address (if configured), BaaS accounts, and balances. The platform uses that to route orders to you.
Operations
docker compose logs -ffor live logs;docker compose restartafter.envchanges (--force-recreateif env did not pick up).restart: unless-stoppedbrings the node back after a reboot.- Keep Ubuntu patched. Prefer SSH keys only.
- Rotate Liquidramp and BaaS credentials on a schedule; rotate
enc_*together withsk_*. - Alert if
/healthfails or heartbeat errors persist — an offline node stops receiving assignments.