Node.js: Gestire i segreti
Come gestire i segreti con Node.js
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione Node.js cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:
- Distribuisci la tua applicazione in pochi secondi con un semplice
git push.- Usa il tuo nome di dominio e beneficia della configurazione automatica dei certificati HTTPS per una sicurezza potenziata.
- Goditi la tranquillità con backup automatici, aggiornamenti con un clic, e una tariffazione semplice, trasparente e prevedibile.
- Ottieni prestazioni ottimali e una sicurezza robusta grazie a una VM privata e dedicata.
Risparmia tempo e semplificati la vita: bastano solo 5 minuti per provare la soluzione di hosting cloud Node.js di Stackhero!
Quando il tuo progetto Node.js interagisce con un database, uno storage di oggetti o un'API esterna, è fondamentale memorizzare in modo sicuro le credenziali come nomi utente, password o token, spesso chiamati "segreti". Mantenere questi segreti riservati è essenziale per garantire la sicurezza.
Cosa potresti essere tentato di fare
Potresti inizialmente considerare qualcosa del genere:
// Connessione a un database PostgreSQL
const pg = new Client({
host: 'xxxxx.stackhero-network.com',
user: 'admin',
password: 'myPassword',
database: 'admin'
});
Purtroppo, questo metodo non è sicuro. Perché? Perché i tuoi segreti potrebbero finire nel tuo repository Git, esponendoli a chiunque abbia accesso. Anche se pensi di essere l'unico ad avere accesso, è come lasciare un Post-it con le tue password sul monitor e supporre che nessun altro le vedrà. Questo può eventualmente portare a problemi di sicurezza.
Inoltre, questo approccio non supporta una gestione fluida dei diversi ambienti, come sviluppo e produzione.
Le variabili d'ambiente
Una pratica ampiamente adottata nel settore è memorizzare i segreti nelle variabili d'ambiente.
Le variabili d'ambiente sono definite al di fuori del tuo codice e impostate prima che Node.js inizi. Il concetto è di definire tutti i tuoi segreti usando variabili d'ambiente, evitando di codificarli direttamente nella tua applicazione.
Definire le tue prime variabili d'ambiente
Per definire una variabile d'ambiente, puoi impostarla all'avvio della tua applicazione Node.js in questo modo: MY_PASSWORD=myDevelopmentPassword node app.js
Questo comando imposta una variabile chiamata "MY_PASSWORD" con il valore "myDevelopmentPassword". Il formato è semplicemente <KEY>=<value>.
Per convenzione, le variabili d'ambiente sono scritte in lettere maiuscole. Nota che possono essere utilizzate solo stringhe, non array o oggetti.
Leggere le variabili d'ambiente
Nel tuo file app.js, puoi leggere la tua nuova variabile d'ambiente con process.env in questo modo: console.log(process.env.MY_PASSWORD);. Questo visualizzerà myDevelopmentPassword.
Ora, la password è definita al di fuori del codice, impedendo che venga pubblicata nel repository Git.
Su Stackhero, in un ambiente di produzione, hai la possibilità di definire una nuova variabile d'ambiente chiamata "MY_PASSWORD" contenente "myProductionPassword" direttamente nel dashboard del tuo servizio Node.js, garantendo un funzionamento fluido.
Esempio di configurazione Node.js sul dashboard Stackhero
In conclusione, la tua password non è più memorizzata nel tuo codice e hai password separate per gli ambienti di sviluppo e produzione.
Utilizzare la libreria dotenv
In scenari reali, spesso è necessario gestire più segreti. Ad esempio, connettersi a un database richiede di memorizzare un hostname, un utente e una password.
Gestire un solo segreto è semplice, ma gestirne diversi può diventare complicato. Immagina di avviare la tua applicazione con questa riga di comando:
POSTGRESQL_HOST=xxxxx.stackhero-network.com POSTGRESQL_USER=admin POSTGRESQL_PASSWORD=myPassword node app.js
Questa riga è poco pratica e difficile da mantenere. Un'applicazione in produzione potrebbe richiedere molte variabili, rendendo questo approccio impraticabile.
È qui che la libreria dotenv diventa preziosa.
Con dotenv, i segreti possono essere memorizzati in un file separato chiamato .env.
Per prima cosa, puoi installare la libreria dotenv con:
npm install dotenv
Quindi, crea un file .env contenente le variabili:
POSTGRESQL_HOST=xxxxx.stackhero-network.com
POSTGRESQL_USER=admin
POSTGRESQL_PASSWORD=myPassword
Assicurati che questo file .env non venga inviato al repository Git aggiungendolo alla lista dei file ignorati:
echo ".env" >> .gitignore
Infine, carica la libreria dotenv all'inizio del tuo file app.js in questo modo:
require("dotenv").config();
Con questa configurazione, quando avvii la tua applicazione con node app.js, dotenv leggerà automaticamente il contenuto del file .env sulla tua piattaforma di sviluppo. In produzione, questo file non esiste e le variabili d'ambiente sono direttamente derivate dalla configurazione del tuo servizio Node.js (disponibile sul dashboard Stackhero).
Esempio pratico
Tutto questo era teoria. Passiamo a un esempio pratico.
Puoi trovare un esempio completo disponibile qui: https://github.com/stackhero-io/dotenvWithNodejs
Ora sai come gestire i tuoi segreti in modo flessibile e sicuro, tutto molto facilmente.