Firebase Storage Migration
Supabase provides several tools to convert storage files from Firebase Storage to Supabase Storage. Conversion is a two-step process:
- Files are downloaded from a Firebase storage bucket to a local filesystem.
- Files are uploaded from the local filesystem to a Supabase storage bucket.
Set up the migration tool #
- Clone the firebase-to-supabase repository:
1git clone https://github.com/supabase-community/firebase-to-supabase.git
- In the
/storage
directory, rename supabase-keys-sample.js tosupabase-keys.js
. - Go to your Supabase project's API settings in the Dashboard.
- Copy the Project URL and update the
SUPABASE_URL
value insupabase-keys.js
. - Under Project API keys, copy the service_role key and update the
SUPABASE_KEY
value insupabase-keys.js
.
Generate a Firebase private key #
- Log in to your Firebase Console and open your project.
- Click the gear icon next to Project Overview in the sidebar and select Project Settings.
- Click Service Accounts and select Firebase Admin SDK.
- Click Generate new private key.
- Rename the downloaded file to
firebase-service.json
.
Command line options#
Download Firestore Storage bucket to a local filesystem folder #
node download.js <prefix> [<folder>] [<batchSize>] [<limit>] [<token>]
<prefix>
: The prefix of the files to download. To process the root bucket, use an empty prefix: "".<folder>
: (optional) Name of subfolder for downloaded files. The selected folder is created as a subfolder of the current folder (e.g.,./downloads/
). The default isdownloads
.<batchSize>
: (optional) The default is 100.<limit>
: (optional) Stop after processing this many files. For no limit, use0
.<token>
: (optional) Begin processing at this pageToken.
To process in batches using multiple command-line executions, you must use the same parameters with a new <token>
on subsequent calls. Use the token displayed on the last call to continue the process at a given point.
Upload files to Supabase Storage bucket #
node upload.js <prefix> <folder> <bucket>
<prefix>
: The prefix of the files to download. To process all files, use an empty prefix: "".<folder>
: Name of subfolder of files to upload. The selected folder is read as a subfolder of the current folder (e.g.,./downloads/
). The default isdownloads
.<bucket>
: Name of the bucket to upload to.
note
If the bucket doesn't exist, it's created as a non-public
bucket. You must set permissions on this new bucket in the Supabase Dashboard before users can download any files.