Wie speichert man Node.js Deployment-Einstellungen/Konfigurationsdateien?
Ich habe an ein paar Node-Apps gearbeitet, und ich habe nach einem guten Muster für die Speicherung von einsatzbezogenen Einstellungen gesucht. In der Django-Welt (wo ich herkomme) ist es üblich, eine Datei "settings.py" zu haben, die die Standardeinstellungen (Zeitzone usw.) enthält, und dann eine "local_settings.py" für einsatzspezifische Einstellungen, z.B. welche Datenbank angesprochen werden soll, welcher Memcache-Socket, E-Mail-Adresse für die Administratoren und so weiter.
Ich habe nach ähnlichen Mustern für Node gesucht. Nur eine Konfigurationsdatei wäre schön, damit sie nicht mit allem anderen in app.js
eingeklemmt werden muss, aber ich finde es wichtig, eine Möglichkeit zu haben, serverspezifische Konfiguration in einer Datei zu haben, die nicht in der Quellcodekontrolle ist. Dieselbe Anwendung könnte durchaus auf verschiedenen Servern mit völlig unterschiedlichen Einstellungen eingesetzt werden, und sich mit Merge-Konflikten und all dem herumschlagen zu müssen, ist nicht meine Vorstellung von Spaß.
Gibt es also eine Art Framework/Tool dafür, oder bastelt sich jeder selbst etwas zusammen?
Ich verwende eine
package.json
für meine Pakete und eineconfig.js
für meine Konfiguration, die wie folgt aussieht:Ich lade die Konfiguration aus meinem Projekt:
und dann kann ich auf meine Sachen über
config.db_host
,config.db_port
, etc. zugreifen. So kann ich entweder hart kodierte Parameter verwenden oder Parameter, die in Umgebungsvariablen gespeichert sind, wenn ich keine Passwörter in der Versionsverwaltung speichern möchte.Ich generiere auch eine
package.json
und füge einen Abschnitt mit Abhängigkeiten ein:Wenn ich das Projekt auf meinen lokalen Rechner klone, lasse ich
npm install
laufen, um die Pakete zu installieren. Mehr Informationen dazu hier.Das Projekt ist in GitHub gespeichert, wobei Remotes für meinen Produktionsserver hinzugefügt wurden.
Viel später fand ich ein ziemlich gutes Node.js-Modul zur Verwaltung der Konfiguration: nconf.
Ein einfaches Beispiel:
Es unterstützt auch das Speichern von Einstellungen in Redis, das Schreiben von Konfigurationsdateien und hat eine ziemlich solide API. Außerdem wird es von einem der angeseheneren Node.js-Läden, Nodejitsu, als Teil der Flatiron-Framework-Initiative unterstützt, so dass es ziemlich zukunftssicher sein sollte.
Schauen Sie sich nconf auf Github an.
Sie können auch node-config verwenden, das die Konfigurationsdatei abhängig von den Variablen $HOST und __$NODE_ENV__ lädt (ein wenig wie RoR): documentation.
Dies kann sehr nützlich sein für verschiedene Bereitstellungseinstellungen (
Entwicklung
,Test
oderProduktion
).