INSTALL GUIDE · HETZNER / LINODE / VULTR
Blue Folder Mail on a cloud VM
Hetzner, Linode (Akamai) and Vultr are all plain Linux VMs. The flow is identical — spin one up, install Docker, run one command.
Prerequisites
- A small VM (1 vCPU / 1–2 GB RAM is enough) on Ubuntu 22.04+ / Debian 12+.
- A domain name with an A record pointing at the VM's IP.
- The provider's firewall / cloud firewall open on 80, 443, 22.
- A Resend account; an inbound provider for receiving.
Install
- Create the VM and open the firewall Hetzner Cloud, Linode or Vultr — any region. Allow 80/443/22 in the cloud firewall; keep 8080 internal.
- Install Docker, then the app
curl -fsSL https://get.docker.com | sh curl -fsSL https://raw.githubusercontent.com/gordonvividtone/bluefolder-mail/main/install.sh | bash
Set INBOUND_SECRET and RESEND_API_KEY. Data persists in the bfm-data volume.
- Create your mailbox
Finish HTTPS below, then open your domain, generate your key and save the backup password.
This is the Docker guide on a cloud VM — see it for S3 storage and update commands.
Storage & sending
- Storage — local disk by default; attach the provider's block storage / volume for room, or set STORAGE_BACKEND=s3 for blobs (Hetzner Object Storage, Linode / Vultr object storage, or any S3 bucket). Ciphertext only.
- Sending — verify your domains at resend.com and set RESEND_API_KEY.
Receiving mail — the honest part
Recommended — webhook
Point a provider (Mailgun, SendGrid, Postal, Resend inbound) at https://your-host/_inbound with the secret as the x-inbound-secret header or ?secret=…, forwarding full raw MIME.
Built-in SMTP — only if your IP is clean
HTTPS & the front door
Terminate TLS with Caddy (automatic Let's Encrypt) and keep the app on localhost:
mail.example.com {
reverse_proxy localhost:8080
}
Add a login with BASIC_AUTH_USER / BASIC_AUTH_PASS, or keep the port on a Tailscale / VPN network.