Getting started

Migrating from Supabase

Move a Supabase project to HostBase with pg_dump, pg_restore and two env vars.

This page is available in Polish only for now. The commands, code and API calls below are the same in every language — an English translation is on its way. Open the Polish page

HostBase korzysta z tych samych komponentów co Supabase, więc migracja to przede wszystkim przeniesienie danych i podmiana zmiennych środowiskowych. Typowy projekt przenosi się w 15–30 minut.

0. Przygotowanie

  • Utwórz projekt w HostBase w wybranym regionie i zapisz hasło do bazy.
  • W Supabase skopiuj connection string (Project Settings → Database, tryb Session lub bezpośredni).
  • Zainstaluj klienta Postgres w wersji ≥ wersji źródłowej (np. postgresql-client-17).
  • Zaplanuj krótkie okno serwisowe lub wstrzymaj zapisy na czas migracji.

1. Zrzut bazy z Supabase

export SRC="postgresql://postgres.[SUPABASE_REF]:[HASLO]@aws-0-eu-central-1.pooler.supabase.com:5432/postgres"

# role (bez haseł systemowych)
pg_dumpall --roles-only --no-role-passwords -d "$SRC" -f roles.sql

# schemat i dane schematów aplikacji + auth + storage
pg_dump "$SRC" \
  --format=custom --no-owner --no-privileges \
  --schema=public --schema=auth --schema=storage \
  -f supabase.dump

2. Odtworzenie w HostBase

export DST="postgresql://postgres:[HASLO]@db-[HOSTBASE_REF].host.ulewicz.space:5432/postgres?sslmode=require"

psql "$DST" -f roles.sql   # błędy "role already exists" można zignorować

pg_restore --no-owner --no-privileges --clean --if-exists \
  -d "$DST" supabase.dump

Tabele systemowe auth.* i storage.* mają w HostBase ten sam układ, więc użytkownicy (wraz z hashami haseł bcrypt) przenoszą się bez konieczności resetu haseł.

3. Użytkownicy i JWT

Tokeny sesji wystawione przez Supabase są podpisane innym sekretem JWT — po migracji użytkownicy muszą zalogować się ponownie. Hasła, tożsamości OAuth i metadane pozostają bez zmian. Pamiętaj, aby w HostBase ponownie skonfigurować dostawców OAuth (zmieni się callback URL na https://<ref>.host.ulewicz.space/auth/v1/callback).

4. Pliki w Storage

Metadane plików są w schemacie storage, ale same obiekty trzeba skopiować. Najprościej przez API zgodne z S3:

# rclone: skonfiguruj dwa zdalne S3 — "supabase" i "hostbase"
rclone sync supabase:avatars hostbase:avatars --progress
rclone sync supabase:faktury hostbase:faktury --progress

Alternatywnie skrypt Node.js: pobierz listę obiektów przez storage.from(bucket).list() w źródle i prześlij je upload() do HostBase.

5. Edge Functions i sekrety

Skopiuj katalog supabase/functions i wdroż funkcje ponownie. Ustaw sekrety w panelu HostBase.

6. Przełączenie aplikacji

# przed
NEXT_PUBLIC_SUPABASE_URL=https://xyzcompany.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...supabase

# po
NEXT_PUBLIC_SUPABASE_URL=https://abcdefghijklmnopqrst.host.ulewicz.space
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...hostbase

Kod aplikacji nie wymaga zmian — @supabase/supabase-js działa identycznie.

7. Weryfikacja

-- porównaj liczności w obu bazach
select schemaname, relname, n_live_tup
from pg_stat_user_tables order by n_live_tup desc limit 20;

Potrzebujesz pomocy? W planach Team i Enterprise migrację wykonamy za Ciebie — napisz do nas.