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 bénéficiez de la configuration automatique des certificats HTTPS pour une sécurité renforcée.
- Profitez de la tranquillité d'esprit avec des sauvegardes automatiques, des mises à jour en un clic, et une tarification simple, transparente et prévisible.
- Obtenez des performances optimales et une sécurité robuste grâce à une VM privée et dédiée.
Gagnez du temps et simplifiez-vous la vie : il ne faut que 5 minutes pour essayer la solution Ruby cloud hosting de Stackhero !
À un moment donné, vous devrez gérer des secrets tels que des tokens ou des mots de passe pour les bases de données et les services tiers. Il est essentiel de stocker ces secrets de manière sécurisée. Évitez d'intégrer directement les secrets dans votre dépôt ou votre code car cela représente un risque de sécurité sérieux.
Les variables d'environnement offrent deux avantages significatifs :
- Vos secrets ne seront pas stockés dans votre dépôt Git, réduisant le risque si quelqu'un accède à votre code source.
- Vous pouvez utiliser des identifiants différents pour différents environnements. Par exemple, se connecter à votre base de données de production en production tout en utilisant une base de données de développement pendant le développement.
Configurer 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 pour qu'il ne soit jamais validé. Utilisez la gem dotenv pour charger automatiquement le fichier .env.
Tout d'abord, ajoutez la gem dotenv-rails à votre Gemfile :
# Gemfile
gem 'dotenv-rails', groups: [:development, :test]
Ensuite, installez la gem :
bundle install
Ensuite, créez un fichier .env à la racine de votre 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
Configurer les variables d'environnement pour le staging et la production
Pour le staging et la production, le fichier .env n'est pas sécurisé ni pratique car il ne peut pas être stocké dans un dépôt Git. Au lieu de cela, Stackhero fournit 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 et en cliquant sur le bouton "Configurer".
Accéder aux variables d'environnement
En Ruby, vous pouvez facilement accéder aux variables d'environnement en utilisant ENV. Par exemple, pour récupérer DATABASE_PASSWORD, utilisez :
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 inclure :
RABBITMQ_HOST='127.0.0.1'
RABBITMQ_USERNAME='developmentUser'
RABBITMQ_PASSWORD='developmentPassword'
Pour la production et le staging, définissez vos variables d'environnement dans le tableau de bord Stackhero sous la configuration du service Ruby comme indiqué ci-dessous :
RABBITMQ_HOST='<XXXXXX>.stackhero-network.com'
RABBITMQ_USERNAME='production'
RABBITMQ_PASSWORD='secretProductionPassword'