Remplacer Supabase dans une appli exportée de Lovable ou d’un autre générateur IA.
Si l’appli utilise surtout Supabase comme base de données, la quitter est un chantier circonscrit : copier les tables, placer les requêtes du navigateur derrière des routes serveur, choisir l’authentification. Si elle s’appuie sur Supabase Auth, la sécurité au niveau des lignes, le temps réel et les fonctions Edge, il faut réécrire ces parties; garder Supabase est alors plus simple.
Faits vérifiés le
D’abord, voyez quelles parties de Supabase l’appli utilise
Les applis de Lovable, Bolt et compagnie parlent à Supabase par supabase-js; quelques recherches suffisent pour mesurer la dépendance. Lancez-les à la racine du dépôt (remplacez src par le dossier qui contient le code) :
grep -rn "supabase.from(" src | wc -l # tables queried from the browser
grep -rn "supabase.rpc(" src # Postgres functions called directly
grep -rn "supabase.auth" src # sign-up, sign-in, sessions
grep -rn "supabase.storage" src # file uploads and public URLs
grep -rn "functions.invoke" src # edge functions
grep -rn "supabase.channel" src # realtime subscriptions
ls supabase/migrations supabase/functions # schema history and function codeCe que devient chaque élément
La base de données est la partie facile. Le travail est dans tout ce que Supabase fait autour.
| Élément Supabase | Usage dans l’appli | Sur Canner | Travail |
|---|---|---|---|
| Tables Postgres | Vos données, lues par supabase.from(…). | Une base Postgres Canner, chaîne de connexion injectée dans DATABASE_URL. | Petit : copier les données (plus bas). |
| Requêtes du navigateur et sécurité au niveau des lignes (RLS) † | Le navigateur interroge les tables directement; des politiques comme (select auth.uid()) = user_id décident des lignes que voit chaque utilisateur. | Aucune API HTTP devant la base, et par défaut elle n’est joignable que de l’intérieur de Canner. Chaque requête devient une route serveur qui vérifie qui la fait. | Souvent le plus gros chantier : une route par type de requête. |
| Authentification † | supabase.auth pour l’inscription, la connexion et les sessions. Les utilisateurs sont dans auth.users. | Canner Auth (clés d’accès), une bibliothèque d’authentification dans votre appli, ou garder Supabase Auth. | Moyen à gros, selon l’option. |
| Stockage | Téléversements supabase.storage depuis le navigateur et URL publiques des fichiers. | Un compartiment privé compatible S3 par projet, joignable seulement par le code serveur de votre appli. | Moyen : les téléversements passent par une route, les fichiers sont copiés une fois. |
| Fonctions Edge † | supabase.functions.invoke(…), sur l’environnement d’exécution de Supabase compatible Deno. | Canner n’a pas d’environnement Deno. Portez chaque fonction vers une route de votre appli. | Petit, par fonction. |
| Temps réel | Abonnements supabase.channel(…) aux changements des tables. | Aucun équivalent. LISTEN/NOTIFY de Postgres fonctionne sur les connexions Canner; pousser les changements au navigateur revient à votre serveur. | Moyen, ou gardez cette partie sur Supabase. |
† Les détails sur les concurrents proviennent des pages publiées par chaque fournisseur aux dates indiquées; les prix et forfaits changent, vérifiez auprès du fournisseur avant de décider. Requêtes du navigateur et sécurité au niveau des lignes (RLS) (2026-10-29) · Authentification (2026-10-29) · Fonctions Edge (2026-10-29)
Quand garder Supabase est plus simple
Soyez lucide sur le décompte de la première étape. Si vous avez trouvé des dizaines d’appels supabase.from, plusieurs politiques RLS, des canaux temps réel et des fonctions Edge, vous ne changez pas de base de données. Vous écrivez un service dorsal. Ça peut valoir la peine, mais ce n’est pas une migration.
Une voie mitoyenne : héberger l’interface sur Canner et garder Supabase comme service dorsal. Définissez VITE_SUPABASE_URL et la clé anonyme comme variables d’environnement avant la compilation, puisque Vite les intègre à ce moment. Supabase a une région à Montréal (AWS ca-central-1), donc les données peuvent rester au Québec. Supabase est toutefois une entreprise américaine : une région montréalaise ne la soustrait pas aux ordonnances américaines; voir souveraineté des données.
Déplacer les données Postgres
Créez la base sur votre projet, puis tirez toute la base Supabase avec migrate-in. La commande transfère depuis la source sans fichier local et exige une base cible vide :
- Quelle chaîne de connexion. Supabase recommande sa connexion directe pour le travail de type
pg_dump. Sur les forfaits Free et Pro, elle est en IPv6 seulement; si votre côté ne la joint pas, prenez le gestionnaire de connexions en mode session, port 5432. Jamais le mode transaction sur le port 6543 (documentation Supabase). - Pourquoi elle peut s’arrêter. Canner restaure tout ou rien. Une base Supabase contient aussi ses propres schémas
authetstorage, des extensions que Canner n’installe pas, des clés étrangères versauth.userset des politiques qui nomment le rôleauthenticatedou appellentauth.uid(). Hors de Supabase, rien de cela n’existe. Une extension l’arrête avec :The dump creates an extension that Canner databases do not allow you to install. - Avant de partir, exportez la liste des utilisateurs (
select id, email from auth.users). Vos tables renvoient à ces identifiants, et il vous les faudra pour retrouver les gens dans le nouveau système d’authentification.
canner db init
export SUPABASE_DB_URL='postgresql://…' # direct connection, or session pooler (port 5432)
canner db migrate-in --from-env SUPABASE_DB_URLSi migrate-in s’arrête : ne copiez que vos tables
Videz seulement le schéma public, laissez un Postgres local jetable écarter ce qui dépend de Supabase et importez la copie propre. Lisez attentivement les erreurs que pg_restore affiche à l’étape 2 : chaque politique ou clé étrangère écartée est une règle que votre code serveur doit désormais appliquer.
# 1. Your tables only, without owners or grants
pg_dump "$SUPABASE_DB_URL" --schema=public --format=custom \
--no-owner --no-privileges -f supabase.dump
# 2. Restore into a throwaway local Postgres. pg_restore skips what it can't
# create and prints an error for each one: that list is your to-do list.
docker run -d --name scratch -e POSTGRES_PASSWORD=x -p 5433:5432 postgres:17
pg_restore --no-owner --no-privileges \
-d postgresql://postgres:x@localhost:5433/postgres supabase.dump
# 3. Dump the clean copy and import it into Canner
pg_dump postgresql://postgres:x@localhost:5433/postgres \
--format=custom --no-owner -f clean.dump
canner db import clean.dumpAuthentification : trois options
- Canner Auth (clés d’accès). Canner conserve l’utilisateur et la clé publique; votre serveur vérifie un jeton ES256 de courte durée avec un JWKS public et ne garde aucune table d’utilisateurs. Gratuit jusqu’à 1 000 utilisateurs actifs par mois, 125 000 sur Live. Ce sont des clés d’accès seulement : aucun mot de passe à importer, donc chaque utilisateur existant enregistre une clé d’accès à partir d’un lien reçu par courriel. Ces courriels sont plafonnés par organisation et par jour (50 sur Démarrage, 5 000 sur Live) : déplacer 2 000 utilisateurs sur Démarrage prend des semaines. Sur un forfait payant, votre serveur peut plutôt émettre des billets d’enregistrement avec la clé secrète, sans aucun courriel. Le jeton contient le courriel; associez-le à l’identifiant
auth.usersexporté à la première connexion. La mise en place est décrite dans la documentation des clés d’accès. - Une bibliothèque d’authentification dans votre appli, avec votre base Postgres Canner. Supabase conserve les mots de passe sous forme de hachages bcrypt, et le guide de migration de Better Auth lit
auth.usersetauth.identitiespour que les utilisateurs gardent leur mot de passe. Les connexions sociales exigent de changer les URL de rappel OAuth pour votre nouveau domaine. - Garder Supabase Auth et déplacer le reste. Le moins de code à modifier, mais la connexion dépend encore de Supabase.
Fichiers
Chaque projet Canner a un compartiment privé compatible S3 (fonctionnement). Créez un identifiant sous Fichiers → Accès API et ajoutez les valeurs affichées à vos variables d’environnement; elles ne sont pas injectées automatiquement. Les clés d’objet doivent commencer par le slug du projet, et le client a besoin de forcePathStyle: true.
Le point de terminaison n’est joignable que par les applis qui tournent sur Canner, pas depuis votre portable ni votre IC. Deux conséquences. Un téléversement qui allait directement du navigateur à Supabase passe maintenant par une route de votre appli, qui écrit dans le compartiment. Et la copie ponctuelle s’exécute dans l’appli déployée (une route d’administration protégée qui récupère chaque fichier chez Supabase et l’écrit dans le compartiment) ou, pour quelques fichiers, par le bouton de téléversement de l’onglet Fichiers. Si vos tables conservent des URL Supabase complètes pour les avatars et les pièces jointes, remplacez-les par des clés que votre appli sert.
Questions
Puis-je garder Supabase et n’héberger que l’interface sur Canner?
Oui. Déployez l’appli normalement et définissez VITE_SUPABASE_URL et la clé anonyme (ou les équivalents NEXT_PUBLIC_) comme variables d’environnement avant la compilation. Rien d’autre ne change.
Mes utilisateurs devront-ils réinitialiser leur mot de passe?
Avec une bibliothèque d’authentification qui vérifie les hachages bcrypt, non : Supabase conserve des hachages bcrypt, qui peuvent être repris. Avec Canner Auth, il n’y a pas de mot de passe; chaque utilisateur enregistre une clé d’accès une fois, à partir d’un lien reçu par courriel.
Le Postgres de Canner prend-il en charge la sécurité au niveau des lignes?
Oui, c’est du Postgres ordinaire. Ce qui manque, c’est la fonction auth.uid() de Supabase et les rôles anon et authenticated : les politiques écrites pour Supabase doivent être réécrites, ou remplacées par des vérifications dans vos routes serveur.
Puis-je exporter mes données de Lovable Cloud?
Lovable indique d’exporter la base et de télécharger vos fichiers stockés; la plateforme ne déplace pas un projet hors de son service dorsal intégré en une étape. Une fois l’exportation en main, les étapes de cette page s’appliquent.
migrate-in fonctionne-t-il directement depuis Supabase?
La commande se connecte à tout Postgres qu’elle peut joindre et copie la base entière dans une base vide. Une base Supabase contient souvent des objets qui n’existent que chez Supabase; si la copie s’arrête sur l’un d’eux, videz seulement le schéma public comme ci-dessus.
À lire aussi
- GuideHébergez un artefact Claude sur votre domaine
- GuideOù héberger votre appli Bolt.new
- GuideDéployez votre appli v0 sans Vercel
- GuideSortez votre appli de Replit Deployments
- BlogueL'API REST, la CLI et le serveur MCP de Canner pour agents IA
- BlogueComment héberger une appli Gradio ou Streamlit au Canada
Déplacez ce qui vaut la peine.
Chaque projet vient avec Postgres et un compartiment privé. Commencez gratuitement, déplacez les données, et gardez Supabase pour ce qui ne vaut pas une réécriture.