Ruby: Gestione dei segreti (variabili d'ambiente)

Questa documentazione fa parte della guida Utilizzi avanzati. Consulta la guida completa qui: Approfondire i tuoi deployment Ruby.

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Ruby 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 Ruby cloud hosting di Stackhero!

A un certo punto, dovrai gestire segreti come token o password per database e servizi di terze parti. È essenziale memorizzare questi segreti in modo sicuro. Evita di incorporare direttamente i segreti nel tuo repository o codice perché questo rappresenta un serio rischio per la sicurezza.

Le variabili d'ambiente offrono due vantaggi significativi:

  1. I tuoi segreti non saranno memorizzati nel tuo repository Git, riducendo il rischio se qualcuno accede al tuo codice sorgente.
  2. Puoi usare credenziali diverse per ambienti diversi. Ad esempio, connettersi al tuo database di produzione in produzione mentre usi un database di sviluppo durante lo sviluppo.

Per lo sviluppo, crea un file .env nella radice del tuo progetto. Questo file sarà escluso da Git in modo che non venga mai commesso. Usa la gem dotenv per caricare automaticamente il file .env.

Per prima cosa, aggiungi la gem dotenv-rails al tuo Gemfile:

# Gemfile
gem 'dotenv-rails', groups: [:development, :test]

Poi installa la gem:

bundle install

Successivamente, crea un file .env alla radice del tuo progetto e aggiungi le tue variabili:

RAILS_ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
# ...

Infine, assicurati che il file .env sia ignorato da Git:

echo '.env*' >> .gitignore

Per staging e produzione, il file .env non è sicuro né pratico perché non può essere memorizzato in un repository Git. Invece, Stackhero fornisce una soluzione sicura per gestire le variabili d'ambiente direttamente nella configurazione del tuo servizio Ruby.

Puoi impostare queste variabili tramite il dashboard di Stackhero selezionando il tuo servizio Ruby e cliccando sul pulsante "Configura".

In Ruby, puoi facilmente accedere alle variabili d'ambiente usando ENV. Ad esempio, per recuperare DATABASE_PASSWORD, usa:

ENV['DATABASE_PASSWORD'] # => 'secretPassword'

Ecco un esempio di come connettersi a un server RabbitMQ usando variabili d'ambiente:

require 'bunny'

class RabbitMQClient
  def initialize
    @connection = Bunny.new(hostname: ENV['RABBITMQ_HOST'],
                            username: ENV['RABBITMQ_USERNAME'],
                            password: ENV['RABBITMQ_PASSWORD'])
    @connection.start
  end

  def publish(queue_name, message)
    channel = @connection.create_channel
    queue = channel.queue(queue_name)
    channel.default_exchange.publish(message, routing_key: queue.name)
  end

  def close
    @connection.close
  end
end

Sulla piattaforma di sviluppo, il tuo file .env potrebbe includere:

RABBITMQ_HOST='127.0.0.1'
RABBITMQ_USERNAME='developmentUser'
RABBITMQ_PASSWORD='developmentPassword'

Per produzione e staging, definisci le tue variabili d'ambiente nel dashboard di Stackhero sotto la configurazione del servizio Ruby come mostrato di seguito:

RABBITMQ_HOST='<XXXXXX>.stackhero-network.com'
RABBITMQ_USERNAME='production'
RABBITMQ_PASSWORD='secretProductionPassword'