web-dev-qa-db-fra.com

Déploiement de l'application Firebase avec un compte de service sur Heroku (variables d'environnement avec dotenv)

J'ai une application de nœud qui utilise un compte de service Firebase. Je voudrais déployer l'application sur Heroku, mais je ne veux pas rendre publiques mes clés secrètes. Je déploie directement à partir d'un référentiel github public, donc je ne veux pas inclure le fichier de compte de service dans le déploiement.

Je peux prendre le fichier json du compte de service, faire de chaque propriété une variable d'environnement, ajouter chacune de ces variables à Heroku et la déployer. Tout fonctionne très bien (après avoir autorisé le nouveau domaine Heroku sur mon application Firebase), mais existe-t-il une meilleure façon de le faire? Cela fonctionne, mais c'était un peu pénible (copier et coller chaque variable et la déplacer). Suis-je en train de manquer un moyen plus simple de le faire?

Voici le changement que j'apporte. De cette ligne où il extrait les informations d'identification d'un fichier:

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

Pour cet objet qui apporte toutes les mêmes choses des variables d'environnement:

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"
});

Est-ce la meilleure pratique pour déployer une application Firebase avec un compte de service sur Heroku? J'utilise le module de noeud dotenv pour accomplir cela.

30
Luke Schlangen

Il existe deux champs obligatoires pour l'objet d'options cert: clientEmail et privateKey. Votre exemple peut être réduit à:

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"
});

Soit dit en passant, certains environnements peuvent rencontrer des problèmes avec les sauts de ligne dans la variable d'environnement private_key; J'ai trouvé que key.replace(/\\n/g, '\n') était une solution simple.

29
Robert K. Bell