BumpVPN Operators

Run a community VPN server with Docker

A Bump VPN server is an OpenVPN server plus a small credential service, shipped as one Docker image. It registers itself with the Bump directory using your organization key, and once Bump activates it the app can route users through it. Plan on about 30 minutes the first time.

What you need

1. Get the server files

Two files, served by this console for the vpn-directory.bumpapp.xyz directory. The image is public and has the OpenVPN config and helper scripts baked in, so this is all a server needs:

mkdir bump-vpn && cd bump-vpn
curl -fsSO https://operators.bumpapp.xyz/docs/docker-compose.yml
curl -fsS -o .env https://operators.bumpapp.xyz/docs/env

2. Configure

Edit .env and set these; leave everything else at its default:

VIRTUAL_HOST=vpn1.example.org
LETSENCRYPT_HOST=vpn1.example.org

BUMP_DIRECTORY_ORGANIZATION=c-your-organization-id
BUMP_DIRECTORY_API_KEY=bvk_your-key
The key is per organization, not per server. Every server you run shares it, and rotating it in the dashboard invalidates the old one immediately, so update each server's .env and restart it right after a rotation.

3. Start

Nothing to build: the compose file pulls the published image and runs Watchtower, which keeps the server on the latest release:

docker compose up -d

The first start takes a minute or two: OpenVPN generates its keys and Let's Encrypt issues the certificate. Follow along with:

docker compose logs -f openvpn-server

4. Check it

Keeping it running

Troubleshooting

SymptomCheck
Never shows up on the dashboarddocker compose logs openvpn-server | grep -i directory. UNAUTHENTICATED means the organization id or key is wrong; a connection error means the host cannot reach vpn-directory.bumpapp.xyz on 443.
Certificate never issuesThe hostname must resolve to this host from the internet and TCP 80 must be reachable. docker compose logs letsencrypt shows the challenge result.
Shows online but the app cannot connectUDP 1194 is blocked somewhere. Test from outside: nc -vzu vpn1.example.org 1194.
Marked DNS on the dashboardThe hostname resolves to a different address than the one the server reports. Fix the A/AAAA record; the check repeats every few minutes.

Uplink capacity and Datadog log shipping are optional settings documented inline in .env. IPv6 works when the host has a public IPv6 address (the server listens dual-stack); add an AAAA record for the hostname.