ITSkillsCenter
Développement Web

Déployer Supabase sur VPS Hetzner et Coolify : tutoriel complet 2026

3 min de lecture

📍 Article principal : Supabase 2026 : guide pratique.

Une heure pour installer Supabase complet sur Hetzner CCX13. Méthode validée chez startups francophones d’Afrique de l’Ouest.

Prérequis

  • Hetzner CCX13 minimum (8 Go RAM, Postgres + 8 services).
  • Docker + Docker Compose plugin.
  • Domaine : api.votre-app.com et studio.votre-app.com.
  • Niveau : avancé.
  • Temps : 60-90 min.

Étape 1 — Cloner Supabase

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

Étape 2 — Variables critiques .env

POSTGRES_PASSWORD=générer-32-octets-fort
JWT_SECRET=générer-32-octets-aleatoire
ANON_KEY=signer-jwt-avec-secret
SERVICE_ROLE_KEY=signer-jwt-avec-secret
SITE_URL=https://votre-app.com
SUPABASE_PUBLIC_URL=https://api.votre-app.com
DASHBOARD_USERNAME=admin
DASHBOARD_PASSWORD=fort

# SMTP pour Auth emails
SMTP_HOST=smtp-relay.brevo.com
SMTP_PORT=587
SMTP_USER=login
SMTP_PASS=key
SMTP_ADMIN_EMAIL=admin@votre-app.com
SMTP_SENDER_NAME=Votre App

# Storage
GLOBAL_S3_BUCKET=supabase-storage
STORAGE_BACKEND=file

Étape 3 — Générer JWT keys

Outil officiel : supabase.com/docs/guides/self-hosting/docker. Utiliser JWT_SECRET pour signer ANON et SERVICE_ROLE.

Étape 4 — Caddy reverse proxy

api.votre-app.com {
  reverse_proxy localhost:8000
}
studio.votre-app.com {
  reverse_proxy localhost:3000
}

Étape 5 — Lancer stack

docker compose up -d
docker compose ps  # Tous services Up

Étape 6 — Accéder Studio

Ouvrir https://studio.votre-app.com. Login avec DASHBOARD_USERNAME/PASSWORD. Dashboard charge.

Étape 7 — Test API

curl https://api.votre-app.com/rest/v1/ -H "apikey: $ANON_KEY"
# Doit retourner liste tables (vide initial)

Étape 8 — Premier projet

Studio → SQL editor → CREATE TABLE products :

CREATE TABLE products (
  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
  name text NOT NULL,
  price integer NOT NULL,
  created_at timestamptz DEFAULT now()
);

ALTER TABLE products ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Public read" ON products FOR SELECT USING (true);

Étape 9 — Test depuis client

// JavaScript
import { createClient } from '@supabase/supabase-js';
const supabase = createClient('https://api.votre-app.com', 'ANON_KEY');
const { data } = await supabase.from('products').select('*');

Étape 10 — Sauvegardes

# Cron quotidien
docker exec supabase-db pg_dump -U postgres postgres | gzip > /tmp/sb.gz
restic backup /tmp/sb.gz /var/lib/docker/volumes/supabase_storage
rm /tmp/sb.gz

Erreurs fréquentes

Erreur Cause Solution
Studio 502 Postgres pas prêt Wait 60s + restart Studio
JWT invalid ANON_KEY mal signée Régénérer avec JWT_SECRET correct
Auth email non reçu SMTP pas testé GoTrue logs : docker logs supabase-auth
RLS bloque tout Pas de policy Créer policy pour role anon
Storage upload 403 Bucket policy manquante INSERT policy authenticated
OOM RAM insuffisante CCX13 minimum, CCX23 production sérieuse

Adaptation au contexte ouest-africain

Trois précisions. Hetzner Falkenstein : 95-130 ms vers Afrique Ouest acceptable. SDK mobile : Supabase iOS/Android natifs, optimisés cellular. Backup obligatoire : pg_dump 6h fréquence + restic vers B2.

Tutoriels frères

FAQ

CCX13 vs CCX23 ? CCX13 dev/staging. CCX23 production sérieuse.

Mises à jour ? docker compose pull && docker compose up -d. Migrations auto.

Multi-projets ? Une instance = un projet. Plusieurs Supabase pour multi-tenancy.

Coolify template ? Pas officiel. docker-compose.yml direct recommandé.

Storage S3 externe ? Oui. STORAGE_BACKEND=s3 + AWS_* vars.

Pour aller plus loin

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité