Skip to content

VPS Deployment

Deploy MoaV on any VPS in minutes. The flow is the same everywhere: create an Ubuntu server, SSH in, and run the one-line installer.

How It Works

  1. Create a VPS with the recommended specs (1 vCPU, 2 GB RAM recommended) and an Ubuntu 22.04 image
  2. SSH into your server once it boots (usually 1-2 minutes): ssh root@YOUR_IP
  3. Run the installer:
    curl -fsSL moav.sh/install.sh | bash
    
    It installs Docker + prerequisites, clones MoaV to /opt/moav, installs the global moav command, and launches the interactive setup wizard.

The installer is safe to re-run and prompts for everything it needs. On low-RAM hosts it offers to add a swapfile so image builds don't get OOM-killed.


Hetzner

Hetzner offers excellent value with servers starting at €3.79/month in European data centers.

Steps

  1. Go to Hetzner Cloud Console
  2. Click "Add Server"
  3. Choose:
  4. Location: Choose closest to your users
  5. Image: Ubuntu 22.04
  6. Type: CX22 (2 vCPU, 4 GB RAM) recommended, or CX11 (1 vCPU, 2 GB) minimum
  7. Networking: Enable IPv4 and IPv6
  8. Add your SSH key
  9. Click "Create & Buy now"
  10. Wait 1-2 minutes, then SSH in: ssh root@YOUR_IP
  11. Run curl -fsSL moav.sh/install.sh | bash and follow the setup wizard
  • Minimum: CX11 (1 vCPU, 2 GB RAM) - €3.79/month
  • Recommended: CX22 (2 vCPU, 4 GB RAM) - €5.39/month

Linode

Linode (now Akamai) offers reliable servers with good global coverage.

Steps

  1. Go to Linode Cloud Manager
  2. Click "Create Linode"
  3. Choose:
  4. Image: Ubuntu 22.04 LTS
  5. Region: Choose closest to your users
  6. Linode Plan: Shared CPU - Nanode 1 GB ($5/mo) or Linode 2 GB ($12/mo)
  7. Set your root password and add your SSH key
  8. Click "Create Linode"
  9. Wait 1-2 minutes, then SSH in: ssh root@YOUR_IP
  10. Run curl -fsSL moav.sh/install.sh | bash and follow the setup wizard
  • Minimum: Nanode 1 GB (1 vCPU, 1 GB RAM) - $5/month
  • Recommended: Linode 2 GB (1 vCPU, 2 GB RAM) - $12/month

Vultr

Vultr offers competitive pricing with many global locations.

Steps

  1. Go to Vultr Dashboard
  2. Click "Deploy +""Deploy New Server"
  3. Choose:
  4. Choose Server: Cloud Compute - Shared CPU
  5. Server Location: Choose closest to your users
  6. Server Image: Ubuntu 22.04 LTS x64
  7. Server Size: 25 GB SSD ($5/mo) minimum
  8. Add your SSH key
  9. Click "Deploy Now"
  10. Wait 1-2 minutes, then SSH in: ssh root@YOUR_IP
  11. Run curl -fsSL moav.sh/install.sh | bash and follow the setup wizard
  • Minimum: 25 GB SSD (1 vCPU, 1 GB RAM) - $5/month
  • Recommended: 55 GB SSD (1 vCPU, 2 GB RAM) - $10/month

DigitalOcean

DigitalOcean is popular and beginner-friendly with excellent documentation.

Steps

  1. Go to DigitalOcean Dashboard
  2. Click "Create""Droplets"
  3. Choose:
  4. Region: Choose closest to your users
  5. Image: Ubuntu 22.04 (LTS) x64
  6. Size: Basic → Regular → $6/mo (1 GB RAM) or $12/mo (2 GB RAM)
  7. Authentication: SSH Key (recommended)
  8. Click "Create Droplet"
  9. Wait 1-2 minutes, then SSH in: ssh root@YOUR_IP
  10. Run curl -fsSL moav.sh/install.sh | bash and follow the setup wizard
  • Minimum: Basic (1 vCPU, 1 GB RAM) - $6/month
  • Recommended: Basic (1 vCPU, 2 GB RAM) - $12/month

After Installation

The setup wizard will guide you through:

  1. Entering your domain name
  2. Providing email for TLS certificates
  3. Setting the admin dashboard password
  4. Selecting which protocols to enable
  5. Creating initial users

Once it finishes, moav status shows the running services and moav help lists everything else.

Prerequisites Before Setup

Before running the setup, make sure:

  1. Domain configured: Your domain's DNS A record points to your server's IP
  2. Ports open: Most VPS providers have all ports open by default, but verify:
  3. 443/tcp (Reality)
  4. 443/udp (Hysteria2)
  5. 8443/tcp (Trojan)
  6. 4443/tcp+udp (TrustTunnel)
  7. 2082/tcp (CDN WebSocket, if using Cloudflare)
  8. 51820/udp (WireGuard)
  9. 80/tcp (Let's Encrypt verification)

Troubleshooting

Installer failed partway

The installer is idempotent — just re-run it:

curl -fsSL moav.sh/install.sh | bash

Docker not running

sudo systemctl start docker
sudo systemctl enable docker

DNS not propagated yet

Wait a few minutes and verify:

dig +short yourdomain.com

Should return your server's IP address.


See SETUP.md for detailed manual installation and configuration instructions.