Databases & Backend

Self-hosting Supabase on VPS

By ColossusCloud's Team January 4, 2026

Supabase: the open-source Firebase alternative

Supabase provides a complete backend platform built on PostgreSQL:

  • PostgreSQL database with real-time subscriptions
  • Authentication - User sign-ups, logins, OAuth providers
  • Storage - File storage with Postgres-managed permissions
  • Edge Functions - Serverless functions using Deno runtime
  • Real-time - Listen to database changes
  • Studio - Web dashboard for project management

Self-hosting Supabase maintains full data control and avoids vendor lock-in.

System requirements

ResourceMinimumRecommended
RAM4 GB8 GB+
CPU2 cores4 cores+
Disk50 GB SSD80 GB+ SSD

Supabase runs about 12 Docker containers. Adequate resources matter. For production, start with at least 8 GB RAM.

Step-by-step installation

Step 1: Update system

sudo apt update && sudo apt upgrade -y

Step 2: Install Docker

sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Step 3: Clone Supabase

git clone --depth 1 https://github.com/supabase/supabase
mkdir supabase-project
cp -rf supabase/docker/* supabase-project
cp supabase/docker/.env.example supabase-project/.env
cd supabase-project

Step 4: Generate secure secrets

sh ./utils/generate-keys.sh

This generates and updates .env with secure values for JWT_SECRET, ANON_KEY, SERVICE_ROLE_KEY, POSTGRES_PASSWORD, and other keys.

Step 5: Configure URLs

Edit .env:

SUPABASE_PUBLIC_URL=http://your-domain.com:8000
API_EXTERNAL_URL=http://your-domain.com:8000
DASHBOARD_USERNAME=admin
DASHBOARD_PASSWORD=your-secure-password-here

Step 6: Pull and start

docker compose pull
docker compose up -d

Step 7: Access Studio

Open browser to:

http://your-server-ip:8000

Securing network access

Configure through ColossusCloud control panel:

  • Port 22 (SSH) - Restrict to your IP
  • Port 8000 (Supabase) - Open for web access
  • Port 5432, 6543 (PostgreSQL) - Only if external database access needed

High availability options

Basic redundancy

Two VPS instances with Cloudflare handling failover:

  • Primary VPS with full Supabase
  • Standby VPS with PostgreSQL streaming replication

PostgreSQL cluster

For automatic failover:

  • 3 PostgreSQL nodes minimum for quorum
  • Patroni managing automatic failover
  • Supabase services running separately

Multi-region deployment

For geographic redundancy:

  • Primary region with PostgreSQL primary
  • Secondary regions with read replicas
  • Cloudflare geo-steering routing users to nearest region

Further reading

  • Supabase website - Official site
  • Supabase self-hosting docs - Official guide
  • Supabase GitHub - Source code and Docker setup

Explore VPS plans across multiple data centers for geographic redundancy.