Rails 애플리케이션은 일반적으로 개발(development), 테스트(test), 프로덕션(production) 환경에서 실행되며, 필요에 따라 QA 또는 스테이징(staging)과 같은 커스텀 환경을 생성할 수 있습니다. 각 환경은 고유한 설정 값을 가지며, RAILS_ENV 또는 RACK_ENV 환경 변수를 통해 현재 환경을 식별합니다. 특정 Rails 명령어 실행 시 -e 플래그를 사용하여 환경을 지정할 수도 있습니다.
스테이징 환경 생성 및 설정
스테이징 환경은 프로덕션 환경을 모방하므로, config/environments/staging.rb 파일을 생성하여 production.rb 설정을 require_relative로 가져온 후 스테이징 전용 설정을 오버라이드하는 것이 효율적입니다.
-
config/environments/staging.rb:ruby require_relative "production" Rails.application.configure do Rails.application.routes.default_url_options[:host] = "staging.writesoftwarewell.com" config.action_mailer.default_url_options = { host: "staging.writesoftwarewell.com" } end -
환경별 설정 파일 업데이트: config/cable.yml, config/cache.yml, config/queue.yml 등에서 production 설정을 복사하여 staging 환경에 맞게 조정합니다. 특히 config/database.yml에서는 write_software_well_staging과 같은 스테이징 전용 데이터베이스를 지정하고, 데이터베이스 URL은 Rails.application.credentials.staging_database_url을 통해 관리합니다.
Rails 자격 증명(Credentials) 관리
스테이징 환경의 민감한 정보(예: 데이터베이스 URL)는 rails credentials를 통해 안전하게 관리됩니다.
-
EDITOR="code --wait" rails credentials:edit -e staging명령어를 사용하여 스테이징 자격 증명을 편집할 수 있습니다. -
staging_database_url: "postgresql://..."형식으로 데이터베이스 연결 문자열을 추가합니다. -
자격 증명은 config/credentials/staging.yml.enc에 암호화되어 저장되며, staging.key 파일은 복호화 키로 사용됩니다. staging.key는 버전 관리에서 제외되어야 합니다.
Kamal을 이용한 스테이징 배포
Kamal은 config/deploy.yml에서 설정을 읽으며, 스테이징 환경을 위해서는 config/deploy.staging.yml 파일을 생성하여 기본 설정을 재정의합니다.
-
config/deploy.staging.yml: 서비스 이름, 이미지, 서버 IP, 프록시 호스트, SSH 키, RAILS_ENV: staging 등을 지정합니다. -
레지스트리 설정: config/deploy.yml에 Docker 컨테이너 레지스트리(예: DigitalOcean) 정보를 추가합니다.
-
시크릿 구성: .kamal/secrets.staging 파일을 생성하여 KAMAL_REGISTRY_PASSWORD, RAILS_MASTER_KEY, DOCKER_REGISTRY_DO_USERNAME, DOCKER_REGISTRY_DO_TOKEN과 같은 배포 관련 시크릿을 정의합니다.
-
배포 실행:
kamal config -d staging으로 설정을 확인한 후,kamal setup -d staging명령어로 초기 배포를 수행하고, 이후에는kamal deploy -d staging으로 업데이트합니다.
DNS 레코드 업데이트
애플리케이션이 서버에서 실행되면, DNS 제공업체에서 staging.writesoftwarewell.com 도메인이 Rails 애플리케이션 서버의 IP 주소를 가리키도록 A 레코드를 추가해야 합니다.