Ruby: Gestion des secrets (variables d'environnement)

Cette documentation fait partie du guide Usages avancés. Consultez le guide complet ici : Aller plus loin avec vos déploiements Ruby.

👋 Bienvenue sur la documentation de Stackhero !

Stackhero propose une solution Ruby cloud prête à l'emploi qui offre de nombreux avantages, notamment :

  • Déployez votre application en quelques secondes avec un simple git push.
  • Utilisez votre propre nom de domaine et profitez de la configuration automatique des certificats HTTPS pour une sécurité renforcée.
  • Bénéficiez de la sauvegarde automatique, des mises à jour en un clic et d'une tarification simple, transparente et prévisible.
  • Profitez d'une performance optimale et d'une sécurité renforcée grâce à une VM privée et dédiée.

Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Ruby cloud hosting de Stackhero !

À un moment donné, vous aurez besoin de gérer des secrets comme des tokens ou des mots de passe pour des bases de données ou des services tiers. Il est essentiel de stocker ces secrets de façon sécurisée. Evitez d'intégrer des secrets directement dans votre dépôt ou dans le code, car cela représente un risque de sécurité important.

Les variables d'environnement présentent deux avantages majeurs :

  1. Vos secrets ne seront pas stockés dans votre dépôt Git, ce qui limite les risques en cas d'accès à votre code source.
  2. Vous pouvez utiliser des identifiants différents selon l'environnement. Par exemple, se connecter à la base de données de production en production, et à une base de développement en développement.

Pour le développement, créez un fichier .env à la racine de votre projet. Ce fichier sera exclu de Git afin de ne jamais être commité. Utilisez la gem dotenv pour charger automatiquement le fichier .env.

Commencez par ajouter la gem dotenv-rails à votre Gemfile :

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

Puis installez la gem :

bundle install

Ensuite, créez un fichier .env à la racine du projet et ajoutez vos variables :

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

Enfin, assurez-vous que le fichier .env est ignoré par Git :

echo '.env*' >> .gitignore

Pour la staging et la production, le fichier .env n'est ni sécurisé ni pratique car il ne peut pas être stocké dans un dépôt Git. Stackhero propose une solution sécurisée pour gérer les variables d'environnement directement dans la configuration de votre service Ruby.

Vous pouvez définir ces variables via le tableau de bord Stackhero en sélectionnant votre service Ruby puis en cliquant sur le bouton "Configurer".

En Ruby, vous pouvez accéder facilement aux variables d'environnement via ENV. Par exemple, pour récupérer DATABASE_PASSWORD :

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

Voici un exemple de connexion à un serveur RabbitMQ en utilisant des variables d'environnement :

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

Sur la plateforme de développement, votre fichier .env pourrait contenir :

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

Pour la production et la staging, définissez vos variables d'environnement dans le tableau de bord Stackhero, dans la configuration du service Ruby, comme ci-dessous :

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