16

Ich habe eine Knotenanwendung, die ein Firebase-Dienstkonto verwendet. Ich möchte die App auf Heroku bereitstellen, aber ich möchte meine geheimen Schlüssel nicht veröffentlichen. Ich verwende die Bereitstellung direkt aus einem öffentlichen Github-Repository, daher möchte ich die Dienstkontodatei nicht in die Bereitstellung aufnehmen.Firebase-App mit Dienstkonto für Heroku bereitstellen (Umgebungsvariablen mit dotenv)

Ich kann die JSON-Datei des Dienstkontos nehmen, jede Eigenschaft zu einer Umgebungsvariablen machen, jede dieser Variablen zu Heroku hinzufügen und sie bereitstellen. Alles funktioniert gut (nachdem ich die neue Heroku-Domain auf meiner Firebase-Anwendung autorisiert habe), aber gibt es einen besseren Weg, dies zu tun? Das funktioniert, aber es war ein bisschen mühsam (Kopieren und Einfügen jeder Variablen und Verschieben derselben). Fehle ich einen einfacheren Weg, dies zu tun?

Hier ist die Änderung, die ich mache. Von dieser Linie, wo sie die Anmeldeinformationen aus einer Datei ziehen:

admin.initializeApp({ 
    credential: admin.credential.cert('./path/firebase-service-account.json'), 
    databaseURL: "https://my-firebase-app.firebaseio.com" 
}); 

Zu diesem Objekt, das in alle die gleichen Dinge von Umgebungsvariablen bringt:

admin.initializeApp({ 
    credential: admin.credential.cert({ 
    "type": process.env.FIREBASE_TYPE, 
    "project_id": process.env.FIREBASE_PROJECT_ID, 
    "private_key_id": process.env.FIREBASE_PRIVATE_KEY_ID, 
    "private_key": process.env.FIREBASE_PRIVATE_KEY, 
    "client_email": process.env.FIREBASE_CLIENT_EMAIL, 
    "client_id": process.env.FIREBASE_CLIENT_ID, 
    "auth_uri": process.env.FIREBASE_AUTH_URI, 
    "token_uri": process.env.FIREBASE_TOKEN_URI, 
    "auth_provider_x509_cert_url": process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL, 
    "client_x509_cert_url": process.env.FIREBASE_CLIENT_X509_CERT_URL 
    }), 
    databaseURL: "https://my-firebase-app.firebaseio.com" 
}); 

Ist dies die beste Praxis für die Bereitstellung von eine Firebase-Anwendung mit einem Dienstkonto für Heroku? Ich verwende das dotenv-Knotenmodul, um dies zu erreichen.

+1

process.env.FIREBASE_CLIENT_x509_CERT_URL - Ich denke, das "X" sollte groß geschrieben werden – Casey

+0

Yep! Ich habe den Schnitt gemacht. Schätze, dass du diesen Fang gemacht hast. Ich suche immer noch eine Anleitung zu Best Practice. –

Antwort

20

Es gibt zwei Pflichtfelder für das Cert-Optionen-Objekt: clientEmail und privateKey.

admin.initializeApp({ 
    credential: admin.credential.cert({ 
    "private_key": process.env.FIREBASE_PRIVATE_KEY, 
    "client_email": process.env.FIREBASE_CLIENT_EMAIL, 
    }), 
    databaseURL: "https://my-firebase-app.firebaseio.com" 
}); 

Als beiseite, einige Umgebungen könnten Schwierigkeiten haben, mit Zeilenumbrüchen im private_key env var;: Ihr Beispiel kann bis auf getrimmt werden Ich fand key.replace(/\\n/g, '\n') als eine einfache Lösung.

+0

Danke! Gibt es einen Grund, warum ich es reduzieren und mein Leben einfacher machen sollte? –

+1

Nicht, dass ich weiß; nur die Anzahl der zu verwaltenden Variablen zu reduzieren ist genug für mich. –

+1

Sie könnten auch Base64 Ihr JSON-Objekt und dann 'JSON.parse (neuer Buffer (process.env.FIREBASE_SERVICE_ACCOUNT_BASE64, 'base64'))' 'verschlüsseln – PaulRBerg

Verwandte Themen