Toolkit open-source untuk memindahkan seluruh proyek Supabase Anda—pengguna, database, dan file—tanpa kehilangan data.
Halo! Jika Anda memutuskan untuk memindahkan proyek Anda dari Supabase ke Insforge, panduan ini cocok untuk Anda. Proses migrasi bisa jadi menakutkan. Anda mungkin bertanya-tanya, bagaimana cara memindahkan semua pengguna tanpa memaksa reset kata sandi? Bagaimana cara mentransfer setiap file dan memperbarui semua tautannya? Bagaimana dengan skema basis data dan semua data berharga lainnya?
Jangan khawatir. Kami siap membantu Anda.
Panduan ini memperkenalkan toolkit migrasi lengkap yang telah teruji di lingkungan produksi, dirancang untuk memindahkan seluruh proyek Supabase Anda ke instance Insforge yang di-hosting sendiri dengan lancar. Ini bukan sekadar dump data sebagian; ini adalah migrasi penuh yang menjaga:
Toolkit ini telah teruji dalam lingkungan produksi nyata, berhasil memigrasikan 39 pengguna, 985 baris basis data, dan lebih dari 1.500 file penyimpanan tanpa kehilangan data. Untuk informasi lebih lanjut tentang self-hosting, kunjungi repositori GitHub Insforge.
Mari kita mulai.
Sebelum kita mulai, mari siapkan lingkungan Anda untuk migrasi yang lancar.
Pertama, pastikan Anda memiliki alat dan akses yang diperlukan:
psql)Sekarang, mari konfigurasikan alat migrasi itu sendiri.
Pertama, clone repositori toolkit (atau unduh source code-nya) dan instal dependensinya.
# Clone repositori (jika ada)
# git clone <https://github.com/InsForge/supabase-to-insforge>
# Instal dependensi
npm install
Selanjutnya, buat file konfigurasi lingkungan Anda. Salin file contoh untuk membuat file .env Anda sendiri.
cp .env.example .env
Sekarang, buka file .env yang baru dibuat dan isi kredensial untuk proyek Supabase yang akan dimigrasikan dan proyek Insforge yang baru.
Untuk mengisi file .env, Anda memerlukan tiga informasi penting dari dasbor proyek Supabase Anda.
SUPABASE_URL & SUPABASE_SERVICE_ROLE_KEY:
service_role Anda.SUPABASE_DB_URL (Connection String Anda):
[YOUR-PASSWORD] di string dengan kata sandi basis data Anda yang sebenarnya. Jika Anda lupa, Anda dapat meresetnya di Project Settings > Database.
# ============================================
# Konfigurasi Supabase
# ============================================
# Temukan kredensial ini di pengaturan Supabase
SUPABASE_URL=https://PROYEK_ANDA.supabase.co
SUPABASE_SERVICE_ROLE_KEY=kunci_service_role_supabase_anda
SUPABASE_DB_URL=postgresql://postgres.xxx:[KATA-SANDI-ANDA]@...
# ============================================
# Konfigurasi Insforge
# ============================================
# Detail instance Insforge Anda
INSFORGE_API_URL=http://localhost:7130 # Atau URL remote Anda
INSFORGE_API_KEY=kunci_api_insforge_anda
Sebelum menjalankan migrasi, pastikan alat ini dapat terhubung ke kedua basis data. Jalankan perintah ini untuk menguji koneksi Anda:
# Uji koneksi Supabase
psql "$SUPABASE_DB_URL" -c "SELECT version();"
# Uji koneksi Insforge (sesuaikan dengan pengaturan lokal/remote Anda)
psql postgresql://postgres:postgres@localhost:5432/insforge -c "SELECT version();"
# Keluar
\\q
Jika kedua perintah berjalan tanpa kesalahan, Anda siap untuk tahap utama!
Migrasi dibagi menjadi tiga fase logis. Ikuti urutannya untuk hasil terbaik.
Ini seringkali menjadi bagian tersulit dari setiap migrasi, tetapi toolkit ini membuatnya sederhana. Kami akan memigrasikan semua akun pengguna sambil mempertahankan kata sandi asli mereka.
Perintah ini terhubung ke proyek Supabase Anda dan mengekspor semua pengguna dari tabel auth.users ke file JSON lokal.
npm run export:auth
Output yang Diharapkan:
✅ Terhubung ke Supabase PostgreSQL
✅ Mengekspor 39 pengguna ke auth-export.json
Ini membuat file bernama auth-export.json yang berisi detail pengguna, termasuk ID dan kata sandi terenkripsi mereka.
Sekarang, kita akan mengimpor pengguna dari file auth-export.json ke instance Insforge Anda. Skrip ini mempertahankan ID pengguna asli (penting untuk foreign key) dan kata sandi mereka yang di-hash dengan bcrypt.
npm run import:auth
Output yang Diharapkan:
✅ Terhubung ke API Insforge
URL: <https://instance-insforge-anda.insforge.app>
📦 Memuat data ekspor...
⬆️ Mengimpor pengguna...
✅ Mengimpor 41/41 akun
✅ Impor selesai!
Tips Pro: Skrip ini idempoten, artinya Anda dapat menjalankannya beberapa kali tanpa membuat pengguna duplikat. Skrip ini hanya akan memperbarui catatan yang ada jika ditemukan.
Selanjutnya, kita akan memindahkan seluruh basis data PostgreSQL Anda, termasuk skema, data, dan bahkan kebijakan Row Level Security (RLS) Anda.
Perintah ini menggunakan pg_dump untuk membuat cadangan SQL lengkap dari skema publik Anda dari Supabase.
npm run export:db
Output yang Diharapkan:
✅ Basis data berhasil diekspor
File: database-export.sql (245 KB)
Ini akan menghasilkan file database-export.sql.
Supabase menggunakan beberapa fungsi dan ekstensi khusus. Skrip ini membersihkan file SQL yang diekspor, menghapus kode khusus Supabase, memperbarui kebijakan RLS (misalnya, auth.uid() menjadi uid()), dan membuatnya kompatibel dengan Insforge.
npm run transform:db
Output yang Diharapkan:
✅ SQL ditransformasikan untuk Insforge
Output: database-export.insforge.sql
Ini membuat file baru yang siap untuk Insforge: database-export.insforge.sql.
Terakhir, mari impor file SQL yang telah ditransformasi ke proyek Insforge Anda.
npm run import:db
Output yang Diharapkan:
🗄️ Mengimpor basis data ke Insforge...
✅ Impor basis data selesai!
Tabel yang terpengaruh: 12
Baris yang diimpor: 985
Skema dan data basis data Anda sekarang berhasil dimigrasikan!
Fase terakhir adalah memindahkan semua file Anda dari Supabase Storage ke Insforge Storage. Proses ini mempertahankan path file yang sama persis, yang sangat penting untuk mencegah tautan rusak.
Pertama, skrip akan membaca daftar bucket dari proyek Supabase Anda dan membuat yang identik di Insforge, dengan mempertahankan pengaturan publik atau privatnya.
npm run create:buckets
Output yang Diharapkan:
✅ Terhubung ke Supabase PostgreSQL
📦 Menemukan 4 bucket di Supabase:
📋 Membuat bucket: generated-images (public)... ✅ Berhasil dibuat
📋 Membuat bucket: raw-product-images (public)... ✅ Berhasil dibuat
...
✅ Pembuatan bucket selesai!
Perintah ini mengunduh setiap file dari semua bucket Supabase Anda, dengan mempertahankan struktur direktori asli.
npm run export:storage
Output yang Diharapkan:
📦 Memulai ekspor penyimpanan dari Supabase...
⬇️ Mengunduh file...
[1/1572] generated-images/user123/image.jpg ✅
...
[1572/1572] reference-images/ref5.jpg ✅
✅ Ekspor selesai! Diunduh: 1.572 file
Semua file akan disimpan secara lokal di direktori storage-downloads/.
Sekarang, kita akan mengunggah semua file yang diunduh ke bucket yang sesuai di Insforge.
npm run import:storage
Output yang Diharapkan:
📦 Ditemukan 1572 file untuk diimpor
⬆️ [1/1572] generated-images/user123/scene/image.jpg... ✅ Terunggah
...
✅ Impor selesai! Berhasil: 1569/1572
Ini adalah tongkat ajaibnya. Basis data Anda kemungkinan berisi ribuan URL yang mengarah ke Supabase Storage. Skrip ini terhubung ke basis data Insforge Anda dan melakukan pencarian-dan-penggantian universal di semua tabel. Skrip ini secara cerdas memperbarui setiap URL penyimpanan Supabase ke URL Insforge yang baru, bahkan di dalam bidang JSONB yang kompleks.
npm run update:storage-urls
Output yang Diharapkan:
✅ Terhubung ke API Insforge
🔄 Penggantian URL Universal...
📊 Ditemukan:
- 997 generasi dengan URL Supabase di input
- 1023 generasi dengan URL Supabase di output
⏳ Memperbarui SEMUA URL secara universal...
✅ Semua URL penyimpanan Supabase telah diperbarui!
Dan selesai! Seluruh proyek Anda sekarang telah dimigrasikan.
Data Anda telah dimigrasikan, tetapi Anda belum selesai. Berikut adalah langkah-langkah terakhir untuk menjalankan aplikasi Anda di Insforge.
Perbarui Kode Aplikasi: Ubah konfigurasi klien aplikasi Anda untuk menunjuk ke instance Insforge Anda, bukan Supabase. Untuk panduan terperinci tentang mengonfigurasi ulang SDK menggunakan MCP, lihat postingan blog pendamping kami.
// Sebelum (Supabase)
const supabase = createClient('URL_SUPABASE', 'KUNCI_ANON_SUPABASE');
// Sesudah (Insforge)
const insforge = createClient('URL_API_INSFORGE_ANDA', 'KUNCI_API_INSFORGE_ANDA');
Pengujian End-to-End: Uji aplikasi Anda secara menyeluruh.
Pembersihan: Setelah Anda mengonfirmasi semuanya berfungsi, Anda dapat menghapus file migrasi sementara (storage-downloads/, .sql, .json).
File too large saat impor penyimpanan: File Anda melebihi batas unggah instance Insforge. Anda mungkin perlu meningkatkan batas atau memigrasikan file secara manual.import:auth berjalan dengan sukses. Hash kata sandi bcrypt seharusnya dipertahankan apa adanya..env Anda benar.Selamat bermigrasi! 🚀