Ruby: Zarządzanie sekretami (zmienne środowiskowe)

Ta dokumentacja jest częścią przewodnika Zaawansowane zastosowania. Pełny przewodnik znajdziesz tutaj: Dalsze kroki w wdrażaniu Ruby.

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Ruby cloud, które zapewnia wiele korzyści, w tym:

  • Wdrażaj swoją aplikację w kilka sekund za pomocą prostego git push.
  • Używaj własnej nazwy domeny i korzystaj z automatycznej konfiguracji certyfikatów HTTPS dla zwiększonego bezpieczeństwa.
  • Ciesz się spokojem dzięki automatycznym kopiom zapasowym, aktualizacjom jednym kliknięciem oraz prostemu, przejrzystemu i przewidywalnemu cennikowi.
  • Uzyskaj optymalną wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj sobie życie: wypróbowanie rozwiązania Ruby cloud hosting Stackhero zajmuje tylko 5 minut!

W pewnym momencie będziesz musiał zarządzać sekretami, takimi jak tokeny lub hasła do baz danych i usług zewnętrznych. Ważne jest, aby przechowywać te sekrety w sposób bezpieczny. Unikaj osadzania sekretów bezpośrednio w repozytorium lub kodzie, ponieważ stanowi to poważne zagrożenie bezpieczeństwa.

Zmienne środowiskowe oferują dwa znaczące korzyści:

  1. Twoje sekrety nie będą przechowywane w repozytorium Git, co zmniejsza ryzyko, jeśli ktoś uzyska dostęp do twojego kodu źródłowego.
  2. Możesz używać różnych poświadczeń dla różnych środowisk. Na przykład, połącz się z bazą danych produkcyjną w produkcji, używając bazy danych deweloperskiej podczas rozwoju.

Dla rozwoju, utwórz plik .env w katalogu głównym projektu. Ten plik będzie wykluczony z Git, aby nigdy nie został zatwierdzony. Użyj gemu dotenv, aby automatycznie załadować plik .env.

Najpierw dodaj gem dotenv-rails do swojego Gemfile:

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

Następnie zainstaluj gem:

bundle install

Następnie utwórz plik .env w katalogu głównym projektu i dodaj swoje zmienne:

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

Na koniec upewnij się, że plik .env jest ignorowany przez Git:

echo '.env*' >> .gitignore

Dla staging i produkcji, plik .env nie jest bezpieczny ani praktyczny, ponieważ nie może być przechowywany w repozytorium Git. Zamiast tego, Stackhero zapewnia bezpieczne rozwiązanie do zarządzania zmiennymi środowiskowymi bezpośrednio w konfiguracji twojej usługi Ruby.

Możesz ustawić te zmienne za pośrednictwem pulpitu nawigacyjnego Stackhero, wybierając swoją usługę Ruby i klikając przycisk "Configure".

W Ruby, możesz łatwo uzyskać dostęp do zmiennych środowiskowych, używając ENV. Na przykład, aby pobrać DATABASE_PASSWORD, użyj:

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

Oto przykład, jak połączyć się z serwerem RabbitMQ, używając zmiennych środowiskowych:

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 platformie deweloperskiej, twój plik .env może zawierać:

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

Dla produkcji i staging, zdefiniuj swoje zmienne środowiskowe w pulpicie nawigacyjnym Stackhero w konfiguracji usługi Ruby, jak pokazano poniżej:

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