Skip to content

vvolfster/firepouch

Repository files navigation

firepouch

Import and export firestore to/from a pouchdb

Why use this tool and why use pouchdb?

There are other tools that let you backup firestore but they seem to download your entire firestore into memory. This is problematic because it is very easy to run out of heap memory during the backup.

Disclaimer

This tool currently does not support:

  • subcollections
  • document references
  • geopoint, firestore date data

These might be added later if there's enough people wanting these features. I didn't use them for my firestore instance so I decided to skip them for now.

Usage

Create backup

const admin = require("firebase-admin")
const { Firepouch } = require("firepouch")

function getAdminApp() {
    const { CLIENT_EMAIL, PROJECT_ID, PRIVATE_KEY, DATABASE_URL, STORAGE_BUCKET } = process.env
    const serviceAccount = {
        clientEmail: CLIENT_EMAIL,
        projectId: PROJECT_ID,
        privateKey: (PRIVATE_KEY || "").replace(/\\n/g, "\n")
    }

    const adminApp = admin.initializeApp({
        credential: admin.credential.cert(serviceAccount),
        databaseURL: DATABASE_URL,
        storageBucket: STORAGE_BUCKET
    })
    return adminApp
}

async function start() {
    const name = "my-backup"
    const firepouch = new Firepouch({ app: getAdminApp() })
    await firepouch.createBackup({ name })
}

start()

Restore backup

const admin = require("firebase-admin")
const { Firepouch } = require("firepouch")
const { getAdminApp } = require("./getAdminApp")

async function start() {
    const name = "my-backup"
    const firepouch = new Firepouch({ app: getAdminApp() })
    await firepouch.restoreBackup({ name })
}

start()

You can create/restore directly to your firebase cloud storage

const admin = require("firebase-admin")
const { Firepouch } = require("firepouch")
const { getAdminApp } = require("./getAdminApp")

async function start() {
    const name = "my-backup"
    const firepouch = new Firepouch({ app: getAdminApp() })

    // create a backupArchive & upload it to cloud storage
    await firepouch.createBackupToCloudStorage({ path: "backups/my-backup.zip" })
    
    // restore from cloud storage
    await firepouch.restoreBackupFromCloudStorage({ path: "backups/my-backup.zip" })
}

start()

You can also create/restore to a zip file

const admin = require("firebase-admin")
const { Firepouch } = require("firepouch")
const { getAdminApp } = require("./getAdminApp")

async function start() {
    const name = "my-backup"
    const firepouch = new Firepouch({ app: getAdminApp() })

    // create a backupArchive
    await firepouch.createBackupToArchive({ dest: "my-backup.zip" })
    
    // restore from archive
    await firepouch.restoreFromArchive({ name: "my-backup.zip" })
}

start()

About

import and export firestore to/from a pouchdb

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published