Kodokon kodokon.com

Konfiguration und Geheimnisse

Hole die Konfiguration mit dotenv aus dem Code heraus, trenne Entwicklung von Produktion und halte deine Geheimnisse aus Git heraus.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Der Port, auf dem gelauscht wird, die Datenbank-URL, die API-Schlüssel: Nichts davon gehört in den Quellcode. Diese Werte ändern sich zwischen deinem Rechner und der Produktion, und manche davon sind Geheimnisse. Die Standardlösung: Umgebungsvariablen, die in der Entwicklung aus einer .env-Datei geladen werden. Installiere dotenv mit npm install dotenv und erstelle die Datei dann im Wurzelverzeichnis des Projekts.

BASH
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-value
.env - eine Variable pro Zeile

Importiere dotenv/config ganz am Anfang deines Einstiegspunkts: Die Variablen der Datei werden nach process.env kopiert. Eine gute professionelle Gewohnheit: das Lesen in einem einzigen Konfigurationsmodul bündeln, die Variablen beim Start validieren und sofort abbrechen, wenn eine fehlt. Ein Server, der sich weigert zu starten, ist besser als ein Server, der bei der ersten Anfrage abstürzt.

JAVASCRIPT
import "dotenv/config";

const required = ["PORT", "SESSION_SECRET"];

for (const name of required) {
  if (!process.env[name]) {
    throw new Error("Missing variable: " + name);
  }
}

export const config = {
  port: Number(process.env.PORT),
  secret: process.env.SESSION_SECRET,
  isProd: process.env.NODE_ENV === "production"
};
config.js - das einzige Modul, das process.env liest

In der Produktion gibt es keine .env-Datei: Der Hoster liefert die echten Werte und NODE_ENV steht auf production. Nutze config.isProd, um das Verhalten anzupassen: ausführliche Logs in der Entwicklung, zurückhaltende Fehlermeldungen in der Produktion. Committe außerdem eine Datei .env.example, die die erwarteten Variablen mit Platzhalterwerten auflistet: Sie dokumentiert die Konfiguration, ohne die Geheimnisse preiszugeben.

JAVASCRIPT
import express from "express";
import { config } from "./config.js";

const app = express();

if (!config.isProd) {
  console.log("Development mode");
}

app.listen(config.port, () => {
  console.log("Port: " + config.port);
});
server.js - der Rest des Codes ignoriert process.env

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Wohin gehört das Passwort der Datenbank?
    • In eine Konstante im Quellcode
    • In eine .env-Datei, die von Git ignoriert wird
    • In die README des Projekts
    • In einen Kommentar in der Konfigurationsdatei
  2. Wozu dient die Datei .env.example?
    • Sie enthält die echten Werte als Sicherung
    • Sie dokumentiert die erwarteten Variablen, ohne sensible Werte
    • Sie konfiguriert die Testumgebung
  3. Ein Geheimnis wurde versehentlich committet. Was machst du zuerst?
    • Den Commit löschen und weitermachen
    • Das Geheimnis widerrufen und ein neues erzeugen
    • Die Datei zur .gitignore hinzufügen