// cloud · digitalocean

DigitalOcean: the developer's cloud, grown up.

Predictable pricing, a UI you can actually navigate, and two great paths to prod: App Platform (PaaS) or Droplets + Managed Postgres (build-your-own).

DigitalOcean has quietly become one of the best Ruby homes: App Platform for the git-push, don't-think-about-it path, or Droplets + Managed Postgres + Spaces when you want Hatchbox, Kamal or Dokku on top. Pricing is a flat monthly number — no data-transfer bill roulette.
15 globally
datacenters
Basic · $12/mo
smallest sane App Platform plan
1 primary + 2 standby
Managed Postgres HA
01 / 04

Path A — App Platform (PaaS)

Point App Platform at your GitHub repo. It detects Rails (or reads your Dockerfile), provisions the app, wires a Managed Postgres, terminates TLS, and gives you rolling deploys. `.do/app.yaml` captures the whole thing as code.
yml
# .do/app.yaml name: rails-app region: nyc services: - name: web dockerfile_path: Dockerfile http_port: 3000 instance_size_slug: basic-xs instance_count: 2 health_check: { http_path: /up } envs: - { key: RAILS_LOG_TO_STDOUT, value: "true" } - { key: RAILS_MASTER_KEY, type: SECRET } workers: - name: sidekiq dockerfile_path: Dockerfile run_command: bundle exec sidekiq databases: - { name: db, engine: PG, version: "16", production: true }
02 / 04

Path B — Droplets + Kamal / Hatchbox

For full control, provision a couple of Droplets (Premium AMD, 2 GB is a sane starting point) and drive them with Kamal, Dokku, or Hatchbox. Add Managed Postgres so backups and failover aren't your problem, and Spaces (S3-compatible) for uploads.
03 / 04

Managed Postgres, VPC-only

Managed Postgres 16 with automatic daily backups, point-in-time recovery, and read replicas. Put it in a VPC and expose it only to your App Platform / Droplets — no public IP, no firewall spelunking.
04 / 04

Spaces for uploads and assets

Spaces is S3-compatible with a built-in CDN — Active Storage drops in with the `aws-sdk-s3` gem, endpoint pointed at Spaces. Flat pricing per GB stored and served, so you won't get surprised by a viral asset.

Gotchas we learned the hard way

  • !App Platform Basic tier restarts the container roughly daily and doesn't autoscale — use Professional for anything with real traffic or long-running background work.
  • !Managed Postgres connection limits are strict at the smaller tiers (22 on the $15 plan). Use PgBouncer (either the built-in App Platform add-on or a sidecar) before scaling web replicas.
  • !Droplet snapshots are convenient but they are not a backup strategy — pair with an off-Droplet backup for the DB (Managed Postgres handles this for you; on-Droplet PG does not).
  • !Spaces egress is included up to the plan's limit, but a runaway hotlinked video will still cost you — front Spaces with the built-in CDN and set sensible cache headers.

Related guides

Ready?
Deploy Rails on DigitalOcean

The pragmatic middle ground: App Platform when you want to ship, Droplets + Managed Postgres when you want to own the stack. Same bill either way.