INSTALL GUIDE · FLY.IO
Blue Folder Mail on Fly.io
Managed hosting, no server to run. The repo ships a fly.toml that mounts a volume at /data and health-checks /_health.
Good fit
Fly gives you a persistent volume, so the default local-disk storage works as-is. Inbound mail is a webhook — Fly won't run an MTA for you.
Prerequisites
- The flyctl CLI, installed and logged in (fly auth login).
- Your fork/clone of the repo as the working directory.
- A Resend API key; an inbound provider for receiving.
Deploy
- Launch without deploying yet
fly launch --no-deploy
- Create the data volume
fly volume create bfm_data -r iad -n 1 -s 1
One 1 GB volume in your chosen region. fly.toml mounts it at /data. - Set your secrets
fly secrets set RESEND_API_KEY=... \ INBOUND_SECRET=$(openssl rand -hex 24)
Add BASIC_AUTH_USER / BASIC_AUTH_PASS here too for a login.
- Deploy
fly deploy
Open the app URL, create your mailbox and save the backup password.
Storage & sending
- Storage — the SQLite index and sealed blobs live on the /data volume. Keep it single-instance, or move blobs to S3 with STORAGE_BACKEND=s3 and keep the index on the volume. Back the volume up with Fly snapshots.
- Sending — verify your domains at resend.com; the key is already set via fly secrets.
Receiving mail — the honest part
Recommended — webhook
Point a provider (Mailgun, SendGrid, Postal, Resend inbound) at https://your-app.fly.dev/_inbound with your INBOUND_SECRET as the x-inbound-secret header or ?secret=…, forwarding full raw MIME.
Fly is a container platform, not a mail host — don't try to run the built-in SMTP MTA here. The webhook is the path.
HTTPS & the front door
TLS on your *.fly.dev URL (and custom domains via fly certs) is automatic. Add a login before putting real mail in it — set BASIC_AUTH_USER / BASIC_AUTH_PASS as secrets.
Blue Folder Mail on Fly.io — a volume, three secrets, one deploy. Full reference: DEPLOY.md. Other platforms →