Rails 스테이징 환경 구성 및 Kamal을 이용한 배포

Create a Staging Environment in Rails and Deploy with Kamal

발행일
2025년 06월 04일

핵심 요약

  • 1 Ruby on Rails 애플리케이션의 스테이징 환경을 설정하고 Kamal을 활용하여 안전하게 배포하는 전반적인 과정을 다룹니다.
  • 2 config/environments/staging.rb 파일을 통해 프로덕션 환경 설정을 재사용하며 스테이징 전용 설정을 추가하고, 데이터베이스 및 시크릿을 구성하는 방법을 설명합니다.
  • 3 Kamal 배포를 위해 deploy.staging.yml을 설정하고, rails credentials로 민감 정보를 관리하며, 최종적으로 DNS 레코드를 업데이트하여 스테이징 환경을 활성화합니다.

도입

본 게시물은 Ruby on Rails 기반 블로그 구축 시리즈의 세 번째 글로, 이전에 설정한 애플리케이션 및 데이터베이스 서버 위에 스테이징 환경을 구축하는 방법을 다룹니다. 프로덕션 배포에 앞서 안전한 테스트 공간을 마련하기 위해, Rails 환경의 기본 개념부터 커스텀 스테이징 환경 구성, Kamal을 이용한 배포, 그리고 DNS 설정까지 포괄적으로 설명합니다. 이 글을 통해 Rails 애플리케이션이 스테이징 환경에서 성공적으로 운영되도록 하는 것이 목표입니다.

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 레코드를 추가해야 합니다.

결론

이 글을 통해 독자들은 Ruby on Rails 애플리케이션을 위한 스테이징 환경을 성공적으로 설정하고 Kamal을 활용하여 배포하는 방법을 습득했습니다. Rails 환경 구성부터 민감한 자격 증명 관리, Kamal 배포 설정, 그리고 최종적인 DNS 레코드 업데이트에 이르기까지, 실제 운영 환경과 유사한 테스트 환경을 구축하는 데 필요한 모든 단계를 상세히 다루었습니다. 이제 안정적인 스테이징 환경 위에서 본격적인 애플리케이션 개발에 집중할 수 있게 되었으며, 이는 향후 프로덕션 배포의 성공적인 기반이 될 것입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!