Ruby: Umgang mit Geheimnissen (Umgebungsvariablen)

Diese Dokumentation ist Teil des Erweiterte Anwendungen-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Weiterführende Schritte mit Ihren Ruby-Bereitstellungen.

👋 Willkommen bei der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Ruby Cloud Lösung, die zahlreiche Vorteile bietet, darunter:

  • Deployen Sie Ihre Anwendung in Sekundenschnelle mit einem einfachen git push.
  • Verwenden Sie Ihren eigenen Domainnamen und profitieren Sie von der automatischen Konfiguration von HTTPS-Zertifikaten für erhöhte Sicherheit.
  • Genießen Sie beruhigende automatische Backups, Ein-Klick-Updates und eine einfache, transparente und vorhersehbare Preisgestaltung.
  • Erhalten Sie optimale Performance und robuste Sicherheit dank einer privaten und dedizierten VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Ruby Cloud Hosting Lösung von Stackhero auszuprobieren!

Irgendwann müssen Sie Geheimnisse wie Tokens oder Passwörter für Datenbanken und Drittanbieterdienste verwalten. Es ist wichtig, diese Geheimnisse sicher zu speichern. Vermeiden Sie es, Geheimnisse direkt in Ihrem Repository oder Code einzubetten, da dies ein ernstes Sicherheitsrisiko darstellt.

Umgebungsvariablen bieten zwei wesentliche Vorteile:

  1. Ihre Geheimnisse werden nicht in Ihrem Git-Repository gespeichert, was das Risiko verringert, wenn jemand Zugriff auf Ihren Quellcode erhält.
  2. Sie können unterschiedliche Anmeldeinformationen für verschiedene Umgebungen verwenden. Zum Beispiel können Sie sich in der Produktion mit Ihrer Produktionsdatenbank verbinden, während Sie während der Entwicklung eine Entwicklungsdatenbank verwenden.

Erstellen Sie für die Entwicklung eine .env-Datei im Stammverzeichnis Ihres Projekts. Diese Datei wird von Git ausgeschlossen, sodass sie niemals übergeben wird. Verwenden Sie das dotenv-Gem, um die .env-Datei automatisch zu laden.

Fügen Sie zuerst das dotenv-rails-Gem zu Ihrem Gemfile hinzu:

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

Installieren Sie dann das Gem:

bundle install

Erstellen Sie als Nächstes eine .env-Datei im Stammverzeichnis Ihres Projekts und fügen Sie Ihre Variablen hinzu:

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

Stellen Sie schließlich sicher, dass die .env-Datei von Git ignoriert wird:

echo '.env*' >> .gitignore

Für Staging und Produktion ist die .env-Datei nicht sicher oder praktisch, da sie nicht in einem Git-Repository gespeichert werden kann. Stattdessen bietet Stackhero eine sichere Lösung zur Verwaltung von Umgebungsvariablen direkt in Ihrer Ruby-Dienstkonfiguration.

Sie können diese Variablen über das Stackhero-Dashboard festlegen, indem Sie Ihren Ruby-Dienst auswählen und auf die Schaltfläche "Konfigurieren" klicken.

In Ruby können Sie einfach auf Umgebungsvariablen mit ENV zugreifen. Zum Beispiel, um DATABASE_PASSWORD abzurufen, verwenden Sie:

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

Hier ist ein Beispiel, wie man sich mit Umgebungsvariablen mit einem RabbitMQ-Server verbindet:

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

Auf der Entwicklungsplattform könnte Ihre .env-Datei Folgendes enthalten:

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

Für Produktion und Staging definieren Sie Ihre Umgebungsvariablen im Stackhero-Dashboard unter der Ruby-Dienstkonfiguration wie unten gezeigt:

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