Ruby: Gestión de secretos (variables de entorno)

Esta documentación forma parte de la guía Usos avanzados. Consulte la guía completa aquí: Avanzando con sus despliegues de Ruby.

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución Ruby cloud lista para usar que proporciona una serie de beneficios, incluyendo:

  • Despliegue su aplicación en segundos con un simple git push.
  • Use su propio nombre de dominio y benefíciese de la configuración automática de certificados HTTPS para una mayor seguridad.
  • Disfrute de la tranquilidad con copias de seguridad automáticas, actualizaciones con un clic, y precios sencillos, transparentes y predecibles.
  • Obtenga un rendimiento óptimo y una seguridad robusta gracias a una VM privada y dedicada.

Ahorre tiempo y simplifique su vida: solo toma 5 minutos probar la solución de Ruby cloud hosting de Stackhero!

En algún momento, necesitará gestionar secretos como tokens o contraseñas para bases de datos y servicios de terceros. Es esencial almacenar estos secretos de manera segura. Evite incrustar secretos directamente en su repositorio o código porque esto representa un riesgo de seguridad serio.

Las variables de entorno ofrecen dos beneficios significativos:

  1. Sus secretos no se almacenarán en su repositorio Git, reduciendo el riesgo si alguien accede a su código fuente.
  2. Puede usar credenciales diferentes para diferentes entornos. Por ejemplo, conectarse a su base de datos de producción en producción mientras usa una base de datos de desarrollo durante el desarrollo.

Para el desarrollo, cree un archivo .env en la raíz de su proyecto. Este archivo será excluido de Git para que nunca se confirme. Use la gema dotenv para cargar automáticamente el archivo .env.

Primero, agregue la gema dotenv-rails a su Gemfile:

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

Luego instale la gema:

bundle install

A continuación, cree un archivo .env en la raíz de su proyecto y agregue sus variables:

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

Finalmente, asegúrese de que el archivo .env sea ignorado por Git:

echo '.env*' >> .gitignore

Para staging y producción, el archivo .env no es seguro ni práctico porque no puede almacenarse en un repositorio Git. En su lugar, Stackhero proporciona una solución segura para gestionar variables de entorno directamente en la configuración de su servicio Ruby.

Puede establecer estas variables a través del panel de Stackhero seleccionando su servicio Ruby y haciendo clic en el botón "Configurar".

En Ruby, puede acceder fácilmente a las variables de entorno usando ENV. Por ejemplo, para recuperar DATABASE_PASSWORD, use:

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

Aquí hay un ejemplo de cómo conectarse a un servidor RabbitMQ usando variables de entorno:

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

En la plataforma de desarrollo, su archivo .env podría incluir:

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

Para producción y staging, defina sus variables de entorno en el panel de Stackhero bajo la configuración del servicio Ruby como se muestra a continuación:

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