본문 바로가기

전공 공부/Rails

Rails 6 / Rails 5.2 Credentials 환경별로 분리하기

728x90

 

Rails 6의 경우

Rails 6부터는 위와 같이 Credentials을 환경별로 생성할 수 있습니다.

EDITOR=vi rails credentials:edit --environment development

--environment옵션에 내가 원하는 환경 이름을 넣어줄 경우 /config/credentilas에 yml.enc 파일과 key 파일이 생기게 됩니다.

 

 

이럴 경우 자동으로. key 파일은. gitignore에 등록되어집니다.

 

Rails 6에서의 명령어

각 환경의 Credentials 파일에 접근방법은 아래와 같이 할 수 있습니다.

production 환경은 master.key를 사용하여 접근하게 설정하였으나, 원한다면 production 파일 환경 옵션을 주고, master.key를 production.key로 대체하는 방법도 있습니다.

 

주의해야 할 점으로 production 환경으로 접근할 때에는 --environment의 인자로 prodcution값을 전달하면 안 된다는 것입니다. 만약 production 값을 전달할 경우 새롭게 환경이 생기게 됩니다.

 

EDITOR=vi rails credentials:edit #production 환경
  • 키 위치: /config/master.key
  • 암호화된 파일 위치: /config/credentials.yml.enc
EDITOR=vi rails credentials:edit --environment development #development 환경
    • 키 위치: /config/credentials/development.key
    • 암호화된 파일 위치: /config/credentials/development.yml.enc
EDITOR=vi rails credentials:edit --environment test #test 환경
    • 키 위치: /config/credentials/staging.key
    • 암호화된 파일 위치: /config/credentials/staging.yml.enc
  • EDITOR=vi rails credentials:edit --environment staging#staging 환경
    • 키 위치: /config/credentials/test.key
    • 암호화된 파일 위치: /config/credentials/test.yml.enc

 

Rails 5.2의 경우

rails 5.2에서는 각 환경별로 존재하지 않고, 하나의 credentilas 파일만을 사용할 수 있습니다.

이를 각 환경에서 사용하기 위해서는 Credentials 파일을 로드할 때, 환경마다 직접 경로를 지정해주도록 config/application.rb 에 코드를 추가시켜주어야 합니다.

 

https://github.com/rails/rails/pull/33521#issuecomment-449403068 (이 글을 참고하여 작성하였습니다.)

 

config/application.rb

config/application.rb에 다음과 같이 코드를 추가시켜주면 됩니다.

해당 코드에서 Rails.env.production? 부분은 RAILS_ENV의 값이 production 인지 확인하는 부분입니다.

if. production 인 경우 기존 레일즈 5.2에 사용하던 config/master.key를 토대로 config/credentilas.yml.enc를 해독하여 가져옵니다.

 

 

그렇지 않을 경우, RAILS_ENV의 값을 참고하여 Rails 6와 같은 경로에 key를 참고하여 yml.enc파일을 생성해줍니다.

 

 

 

이를 하기 위해서는 먼저, /config/credentials/development.key 에 직접 수동으로 32자리 키를 만들어 위치시켜야 합니다.

 

 

 

EDITOR=vi RAILS_ENV=development rails credentials:edit

그리고 커맨드에 RAILS_ENV의 값을 직접 전달함으로써, 원하는 환경에 맞는 credentials파일이 생성되고 편집할 수 있게 됩니다.

 

 

 

Rails 5.2에서의 명령어

각 환경의 Credentials 파일에 접근방법은 아래와 같이 할 수 있습니다.

production 환경은 master.key를 사용하여 접근하게 설정하였으나, 원한다면 config/application.rb의 production인지 체크하는 부분을 수정함으로써 경로를 바꿔 각 config/credentials/production.key 와 yml.enc 에 접근하도록 설정할 수 있습니다.

 

주의해야 할 점으로 production 환경의 파일을 편집할 때에는 RAILS_ENV=production을 직접 지정해야 한다는 것입니다. 이를 하지 않을 경우 development 환경으로 접근하게 됩니다.

EDITOR=vi RAILS_ENV=production rails credentials:edit #production 환경
  • 키 위치: /config/master.key
  • 암호화된 파일 위치: /config/credentials.yml.enc
EDITOR=vi RAILS_ENV=development rails credentials:edit #development 환경
  • 키 위치: /config/credentials/development.key
  • 암호화된 파일 위치: /config/credentials/development.yml.enc
EDITOR=vi RAILS_ENV=test rails credentials:edit #test 환경
  • 키 위치: /config/credentials/staging.key
  • 암호화된 파일 위치: /config/credentials/staging.yml.enc
EDITOR=vi RAILS_ENV=staging rails credentials:edit #staging 환경
  • 키 위치: /config/credentials/test.key
  • 암호화된 파일 위치: /config/credentials/test.yml.enc

 

 

 

 

728x90