All postsself-hosted supabasemigrationdatabases

Move from Supabase Cloud to your own server: a guided path

Leaving Supabase Cloud? See what moves with pg_dump, what doesn't (Storage, Auth secrets, Edge Functions), and how Aria guides the move to your own server.

Aria team5 min read

Moving from Supabase Cloud to a server you own is one of the highest-leverage upgrades a growing product can make. Instead of paying per project, per database branch or for compute add-ons as your tables grow, you run the official self-hosted Supabase stack on a dedicated server at one flat monthly price.

Here is the plain truth about leaving Supabase Cloud: copying the Postgres database is easy, and moving the pieces around it is where people get stuck. This guide covers what moves cleanly, what needs care, and how Aria’s guided move handles the transition onto your own server.

Why teams move from Supabase Cloud to their own server

Supabase Cloud is a fast way to start. Free and Pro tiers let you ship an MVP in an afternoon. Teams usually start planning a move when one of three things happens:

  1. You need more than one environment or project. On cloud tiers where each project or compute upgrade carries its own monthly charge, running production, staging and two internal tools adds up quickly. On your own server, all of them share the hardware you already pay for.
  2. Database memory and I/O outgrow the base instance. Postgres loves RAM. Moving from a small cloud instance to 8 GB, 16 GB or 32 GB of dedicated RAM on a single-tenant server often costs a fraction of equivalent managed database compute add-ons.
  3. You want your API, workers and database on the same machine. When your Node or Python backend runs next to Postgres on the same server, database queries don’t cross the public internet.

Check Supabase’s pricing page for current Cloud rates and compute add-on costs before comparing.

What actually moves when you leave Supabase Cloud

Supabase is not just Postgres. It is a bundle of open-source services sitting in front of Postgres. When you migrate, each piece behaves differently:

Component How it moves Watch out for
Postgres schema, tables & RLS pg_dump / pg_restore over your connection string Match the major Postgres version (for example Postgres 15 to 15) and extensions (pgvector, pg_cron)
Auth users & password hashes Stored in the auth.users schema inside Postgres Password hashes move with the database dump, but your JWT_SECRET changes unless you carry it over, which logs out active sessions
OAuth providers & SMTP Configured in environment variables / GoTrue settings Update redirect URLs in Google, GitHub or Apple developer consoles to your new domain
Storage buckets & files Metadata is in storage.objects; actual files are in S3-backed storage pg_dump copies bucket definitions and file rows, not the files themselves. Objects must be copied via the Storage API or S3 sync
Edge Functions TypeScript files in your repository (supabase/functions) Deployed from your Git repo onto the new Deno runtime, along with your function secrets
Realtime & PostgREST Stateless services reading your Postgres schemas No data to migrate; they work as soon as the schema and roles are restored

Step-by-step: how a clean migration works

Whether you move by hand or use Aria’s guided move, a safe transition follows the same order so you never lose data.

1. Stand up the target server first

Your new self-hosted Supabase stack should be running, healthy and reachable over HTTPS before you touch production traffic. Because self-hosted Supabase runs Postgres, GoTrue (Auth), PostgREST, Realtime, Storage, Kong and Studio together, pick a server with at least 8 GB of RAM (Aria’s Developer plan at £15/month ex VAT or Pro at £22/month ex VAT) so Postgres has breathing room alongside your app services.

2. Dump and restore Postgres (public, auth, storage)

Using the direct database connection string from your Supabase Cloud dashboard, dump roles, schemas and data, then restore them into the Postgres instance on your server. Because auth.users and your Row Level Security (RLS) policies live inside Postgres, your user accounts, bcrypt password hashes and permissions come across intact.

3. Copy Storage objects

If your app uses Supabase Storage for avatars, PDFs or uploads, copy the objects from your Supabase Cloud buckets to your self-hosted Storage service after restoring the database metadata. Verify that a few sample signed URLs and public bucket links resolve cleanly.

4. Configure Auth redirect URLs and SMTP

Point GoTrue on your server to your SMTP provider (or Aria’s built-in app email) so password resets and magic links deliver reliably. Add your new Supabase domain to your OAuth providers’ allowed callback lists before switching traffic.

5. Cut over your app environment variables

Update SUPABASE_URL, SUPABASE_ANON_KEY and SUPABASE_SERVICE_ROLE_KEY in your web app and API. If your web app and API also run on Aria, Aria wires the local Supabase URLs and keys into your services automatically.

How Aria’s guided move makes this simpler

Setting up self-hosted Supabase by hand means managing a dozen containers, generating matching JWT keys, configuring Kong and Caddy for HTTPS, and writing backup scripts before you even start pg_dump.

On Aria:

  • One line in aria.yaml turns on the official self-hosted Supabase stack (Auth, REST, Realtime, Storage and Studio) on your dedicated server.
  • Aria estimates memory across your web app, API, workers and Supabase together, and recommends the smallest server plan that fits comfortably.
  • Guided move from Supabase Cloud walks you through bringing an existing Supabase Cloud project onto your Aria server without hand-editing compose files or reverse proxies.
  • Your old project stays untouched while you test the new server; you switch your app over when you are happy.

FAQ

Will my users have to reset their passwords when I move from Supabase Cloud?

No. User accounts and encrypted password hashes live in the auth.users table inside Postgres. When auth.users is restored to your self-hosted Supabase instance, existing email-and-password logins continue to work. Active browser sessions may need to sign in again if the JWT signing secret changes.

Does pg_dump move my Supabase Storage files?

No. pg_dump copies the storage.buckets and storage.objects tables (the metadata), but the actual uploaded files live in object storage and must be transferred separately alongside the database dump.

How much RAM do I need to move from Supabase Cloud to my own server?

Plan for at least 8 GB of RAM when running the full self-hosted Supabase stack (Postgres, Auth, REST, Realtime, Storage and Studio) alongside a web app or API. Aria’s Developer plan (8 GB RAM, £15/month ex VAT, draft) is the smallest tier we recommend for full Supabase.

Can I keep using the @supabase/supabase-js client in my app?

Yes. Self-hosted Supabase runs the same official open-source services (PostgREST, GoTrue, Realtime and Storage). Your application code keeps using @supabase/supabase-js; only the project URL and API keys change.

What does Aria charge for self-hosted Supabase?

Nothing extra. Aria charges one flat monthly price for your server (draft prices from £8/month ex VAT; £15/month ex VAT for the 8 GB Developer server suited to Supabase). There are no per-project, per-seat or per-database fees.

Ready to own your Supabase server?

Read our self-hosted Supabase guide, compare Aria vs Supabase Cloud, or get started.

Keep reading

Your own cloud. Without the DevOps.

One server that’s yours alone, set up and run by Aria, at one flat monthly price.

We’ve updated our terms

Please read the new terms of service and privacy policy. Accept them to keep using Aria.