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
| Resource | Minimum | Recommended |
|---|---|---|
| RAM | 4 GB | 8 GB+ |
| CPU | 2 cores | 4 cores+ |
| Disk | 50 GB SSD | 80 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.