Deploy Elixir / Phoenix LiveView to AWS in 5 minutes.
Push a Phoenix repo to Lander. Phoenix releases compile to a self-contained tarball, deploy to per-customer Fargate, LiveView WebSockets work out-of-the-box on Pro+.[walkthrough · 5 minutes]
01
`mix phx.gen.release --docker` creates a working Dockerfile + release config. The release runs without Erlang installed — just the compiled BEAM artifacts.Generate a Phoenix release
# in your Phoenix project root mix phx.gen.release --docker git add Dockerfile bin/server git commit -m "Add release Dockerfile"
02
Phoenix releases need: SECRET_KEY_BASE, DATABASE_URL, PHX_HOST, PHX_SERVER=true, PORT=80. Generate SECRET_KEY_BASE with `mix phx.gen.secret`.Set release env vars
03
Set LANDER_NEEDS_DB=1; Lander provisions RDS and exposes DATABASE_URL. Update your release migration command to run on each deploy via Lander's `release_command` env var.Provision Postgres
04
First deploy ~6 minutes (Erlang/OTP compile is slow). Subsequent deploys ~2 minutes thanks to CodeBuild layer caching.Push and deploy
[why · lander vs vercel · railway · render]
- →BEAM's per-process isolation + Lander's per-customer VPC = nested isolation. Compelling for compliance.
- →ARM64 Graviton2 — Erlang/OTP runs natively, perf is excellent.
- →WAF blocks WebSocket-targeted attacks at the ALB before Phoenix sees them.
[gotchas]
- ·Phoenix LiveView needs sticky sessions on the ALB. Lander auto-enables this for Phoenix apps detected by /lib/_web/endpoint.ex.
- ·If you use Oban for background jobs, the worker runs in the same Fargate task by default. For high-throughput, request a sidecar worker (Pro+).
- ·DNS clusters across multiple Fargate tasks need libcluster — single-task deploys (Hobby) skip this.
[other stacks · same flow]