Ruby: Gestão de segredos (variáveis de ambiente)

Esta documentação faz parte do guia Usos avançados. Consulte o guia completo aqui: Avançar com as suas implementações Ruby.

👋 Bem-vindo à documentação da Stackhero!

A Stackhero disponibiliza uma solução Ruby cloud pronta a usar, que oferece várias vantagens, incluindo:

  • Implemente a sua aplicação em segundos com um simples git push.
  • Utilize o seu próprio nome de domínio e beneficie da configuração automática de certificados HTTPS para maior segurança.
  • Desfrute de backups automáticos, atualizações com um clique e uma estrutura de preços simples, transparente e previsível.
  • Obtenha performance otimizada e segurança reforçada graças a uma infraestrutura privada e dedicada.

Poupe tempo e simplifique a sua vida: bastam 5 minutos para experimentar a solução de Ruby cloud hosting da Stackhero!

Em algum momento, precisará gerir segredos como tokens ou palavras-passe para bases de dados e serviços de terceiros. É essencial armazenar esses segredos de forma segura. Evite incorporar segredos diretamente no seu repositório ou código, pois isso representa um sério risco de segurança.

As variáveis de ambiente oferecem dois benefícios significativos:

  1. Os seus segredos não serão armazenados no seu repositório Git, reduzindo o risco se alguém ganhar acesso ao seu código-fonte.
  2. Pode usar credenciais diferentes para diferentes ambientes. Por exemplo, conectar-se à sua base de dados de produção em produção enquanto usa uma base de dados de desenvolvimento durante o desenvolvimento.

Para desenvolvimento, crie um ficheiro .env na raiz do seu projeto. Este ficheiro será excluído do Git para que nunca seja comprometido. Use a gem dotenv para carregar automaticamente o ficheiro .env.

Primeiro, adicione a gem dotenv-rails ao seu Gemfile:

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

Depois instale a gem:

bundle install

Em seguida, crie um ficheiro .env na raiz do seu projeto e adicione as suas variáveis:

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

Finalmente, certifique-se de que o ficheiro .env é ignorado pelo Git:

echo '.env*' >> .gitignore

Para staging e produção, o ficheiro .env não é seguro nem prático porque não pode ser armazenado num repositório Git. Em vez disso, o Stackhero fornece uma solução segura para gerir variáveis de ambiente diretamente na configuração do seu serviço Ruby.

Pode definir estas variáveis através do painel do Stackhero ao selecionar o seu serviço Ruby e clicar no botão "Configurar".

Em Ruby, pode aceder facilmente a variáveis de ambiente usando ENV. Por exemplo, para recuperar DATABASE_PASSWORD, use:

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

Aqui está um exemplo de como conectar-se a um servidor RabbitMQ usando variáveis de ambiente:

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

Na plataforma de desenvolvimento, o seu ficheiro .env pode incluir:

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

Para produção e staging, defina as suas variáveis de ambiente no painel do Stackhero sob a configuração do serviço Ruby como mostrado abaixo:

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