Ruby: Geheimen beheren (omgeving variabelen)

Deze documentatie maakt deel uit van de Geavanceerde toepassingen-gids. Bekijk de volledige gids hier: Verder gaan met uw Ruby-deployments.

👋 Welkom bij de Stackhero-documentatie!

Stackhero biedt een kant-en-klare Ruby cloud oplossing die tal van voordelen biedt, waaronder:

  • Implementeer uw applicatie in seconden met een eenvoudige git push.
  • Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
  • Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
  • Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Ruby cloud hosting oplossing van Stackhero te proberen!

Op een gegeven moment moet u geheimen beheren zoals tokens of wachtwoorden voor databases en externe services. Het is essentieel om deze geheimen veilig op te slaan. Vermijd het direct in uw repository of code opnemen van geheimen, omdat dit een ernstig beveiligingsrisico vormt.

Omgevingsvariabelen bieden twee belangrijke voordelen:

  1. Uw geheimen worden niet in uw Git-repository opgeslagen, waardoor het risico wordt verminderd als iemand toegang krijgt tot uw broncode.
  2. U kunt verschillende referenties gebruiken voor verschillende omgevingen. Bijvoorbeeld, verbinding maken met uw productiedatabase in productie terwijl u een ontwikkelingsdatabase gebruikt tijdens ontwikkeling.

Voor ontwikkeling maakt u een .env bestand in de root van uw project. Dit bestand wordt uitgesloten van Git zodat het nooit wordt gecommit. Gebruik de dotenv gem om het .env bestand automatisch te laden.

Voeg eerst de dotenv-rails gem toe aan uw Gemfile:

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

Installeer vervolgens de gem:

bundle install

Maak vervolgens een .env bestand in de root van uw project en voeg uw variabelen toe:

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

Zorg er ten slotte voor dat het .env bestand door Git wordt genegeerd:

echo '.env*' >> .gitignore

Voor staging en productie is het .env bestand niet veilig of praktisch omdat het niet in een Git-repository kan worden opgeslagen. In plaats daarvan biedt Stackhero een veilige oplossing voor het beheren van omgevingsvariabelen direct in uw Ruby-serviceconfiguratie.

U kunt deze variabelen instellen via het Stackhero-dashboard door uw Ruby-service te selecteren en op de knop "Configure" te klikken.

In Ruby kunt u eenvoudig toegang krijgen tot omgevingsvariabelen met ENV. Bijvoorbeeld, om DATABASE_PASSWORD op te halen, gebruikt u:

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

Hier is een voorbeeld van hoe u verbinding maakt met een RabbitMQ-server met behulp van omgevingsvariabelen:

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

Op het ontwikkelingsplatform kan uw .env bestand bevatten:

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

Voor productie en staging definieert u uw omgevingsvariabelen in het Stackhero-dashboard onder de Ruby-serviceconfiguratie zoals hieronder weergegeven:

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