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 :
- 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.
- 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.
Définir les variables d'environnement pour le 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
Définir les variables d'environnement pour la staging et la production
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".
Accéder aux variables d'environnement
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'