Deploy a Go app to real AWS in 5 minutes.
Push a Go repo to Lander. We compile a static binary, ship it in a distroless container behind HTTPS on per-customer Fargate. Cold start: <100ms.[walkthrough · 5 minutes]
01
Compile in a builder image, copy the static binary into a distroless final image. Result is ~10 MB and starts in under 100ms.Multi-stage Dockerfile
# Dockerfile FROM golang:1.23-alpine AS builder WORKDIR /app COPY go.* ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o server . FROM gcr.io/distroless/static-debian12 COPY --from=builder /app/server /server EXPOSE 80 ENV PORT=80 CMD ["/server"]
02
Lander's ALB health check hits / on $PORT. Read PORT from env, default 80.Listen on $PORT
port := os.Getenv("PORT")
if port == "" { port = "80" }
http.ListenAndServe(":"+port, nil)03
lander.host/onboard → Google → Hobby plan. Install GitHub App, pick repo, push to default branch. CodeBuild handles `docker build`.Sign up + push
04
Within ~3 minutes you have a live URL at <slug>.app.lander.host. Tail logs from Lander's dashboard or `aws logs tail` your CloudWatch group directly.Verify it's running
[why · lander vs vercel · railway · render]
- →Each Go app gets a Fargate task at 0.25 vCPU + 0.5 GB RAM — plenty for a small Go service. Easy to scale up.
- →Distroless containers + ALB target group health checks = sub-100ms cold start.
- →VPC isolation means a misbehaving Go service in another customer can never affect yours.
[gotchas]
- ·CGO_ENABLED=0 is required for the distroless final image — distroless has no libc.
- ·If your binary needs TLS root certs (e.g. outbound HTTPS), use `gcr.io/distroless/static:nonroot` and copy /etc/ssl/certs in.
- ·Goroutine leaks on graceful shutdown: trap SIGTERM and call your http server's Shutdown(ctx) before exit.
[other stacks · same flow]