Skip to main content

Quick Install

curl -fsSL https://meepagateway.bogpad.io/install.sh | sh
On first run, meepagateway launches an interactive setup wizard. Choose between the terminal wizard or the web-based Captain Dashboard at http://localhost:63372.

VPS Deployment

MeepaGateway ships pre-built cloud-init scripts for one-command server provisioning.

DigitalOcean

IP=$(doctl compute droplet create meepagateway \
  --image ubuntu-24-04-x64 \
  --size s-1vcpu-1gb \
  --region nyc3 \
  --user-data "$(curl -fsSL https://meepagateway.bogpad.io/cloud-init.sh)" \
  --wait \
  --format PublicIPv4 --no-header)

echo "Dashboard: http://$IP:63372"

Hetzner

hcloud ssh-key list
# If empty: hcloud ssh-key create --name my-key --public-key-from-file ~/.ssh/id_ed25519.pub

IP=$(hcloud server create --name meepagateway \
  --image "$(hcloud image list -t snapshot -o columns=id,description \
    | grep meepagateway- | sort -t- -k2 -V | tail -1 | awk '{print $1}')" \
  --type cx23 --ssh-key my-key \
  --user-data "$(curl -fsSL https://meepagateway.bogpad.io/cloud-init-image.sh)" \
  -o columns=public_net --no-header | awk '{print $1}')

echo "Dashboard: http://$IP:63372"

Any VPS (Linode, Vultr, AWS, GCP, etc.)

Pass the cloud-init script as user data during instance creation:
curl -fsSL https://meepagateway.bogpad.io/cloud-init.sh
Or SSH into the server and run the install script manually:
curl -fsSL https://meepagateway.bogpad.io/install.sh | sh

systemd Service

After installing, run as a systemd service for automatic restart and boot persistence.

Service File

Create /etc/systemd/system/meepagateway.service:
[Unit]
Description=MeepaGateway
After=network.target

[Service]
Type=simple
User=meepa
EnvironmentFile=/etc/meepagateway/env
ExecStart=/usr/local/bin/meepagateway start
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

Environment File

Create /etc/meepagateway/env:
ANTHROPIC_API_KEY=sk-ant-...
# OPENAI_API_KEY=sk-...
# BRAVE_API_KEY=BSA...

Setup and Enable

sudo systemctl daemon-reload
sudo systemctl enable meepagateway
sudo systemctl start meepagateway

Service Management

sudo systemctl status meepagateway
sudo systemctl restart meepagateway
sudo journalctl -u meepagateway -f

Docker

docker run -d \
  --name meepa-gateway \
  -p 63372:63372 \
  -v $(pwd)/config.yaml:/app/config.yaml:ro \
  -e ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY}" \
  ghcr.io/bogpad/meepagateway:latest

Docker Compose

services:
  meepagateway:
    image: ghcr.io/bogpad/meepagateway:latest
    restart: unless-stopped
    ports:
      - "63372:63372"
    volumes:
      - ./config.yaml:/app/config.yaml:ro
      - meepa-data:/root/.meepagateway
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}

volumes:
  meepa-data:

Reverse Proxy with Caddy

Expose the Captain Dashboard over HTTPS. MeepaGateway binds to 127.0.0.1:63372 by default.

Public HTTPS

meepa.example.com {
    reverse_proxy localhost:63372
}

Tailscale-Only Access

https://meepa.example.com {
    tls /etc/caddy/certs/fullchain.crt /etc/caddy/certs/privkey.key

    @tailscale remote_ip 100.64.0.0/10
    handle @tailscale {
        reverse_proxy localhost:63372
    }

    respond "Access denied" 403
}
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Health Check

curl http://localhost:63372/health
# {"status":"ok"}
The /health endpoint returns 200 OK when the gateway is running. Use it for load balancer health checks or uptime monitors.

Updating

MeepaGateway has a built-in self-update command:
meepagateway update
Or update from the Captain Dashboard: Settings → Update. Other methods:
# Homebrew
brew upgrade meepagateway

# Docker
docker pull ghcr.io/bogpad/meepagateway:latest
docker restart meepa-gateway

# Re-run install script
curl -fsSL https://meepagateway.bogpad.io/install.sh | sh

Backup

Back up these paths to preserve all agent state:
PathContents
config.yamlGateway configuration
~/.meepagateway/agents/Agent workspaces (SOUL.md, memory.db, skills, .mcp.json)
~/.meepagateway/private-keys/Age private keys for credential store
# Simple tar backup
tar -czf meepagateway-backup-$(date +%Y%m%d).tar.gz \
  config.yaml \
  ~/.meepagateway/

Firewall

Only the ports your connectors need must be reachable from the internet:
PortPurposeRequired
63372Captain Dashboard / APIOnly if exposed publicly
8443Telegram webhook listenerOnly for Telegram webhook mode
8444WhatsApp webhook listenerOnly for WhatsApp
MeepaGateway connectors that use outbound WebSocket (MeepaChat, Discord, Slack) require no inbound ports.

Build from Source

git clone https://github.com/bogpad/meepagateway
cd meepagateway
cargo build --release
# Binary: ./target/release/meepagateway
Requires Rust 1.80+ and a C linker.