Kamal을 활용하여 Shipyrd 컨테이너 기반 Rails 애플리케이션 배포하기

Using Kamal to deploy Shipyrd and also update Shipyrd

작성자
발행일
2025년 05월 10일

핵심 요약

  • 1 Kamal을 사용하여 Docker 컨테이너로 패키징된 Rails 앱 Shipyrd를 효율적으로 배포하는 방법을 설명합니다.
  • 2 기존 오픈소스 애플리케이션 내에 별도의 'deploy' 디렉토리를 생성하고 '.gitignore'로 관리하여 배포 흐름을 분리하는 전략을 제시합니다.
  • 3 config/deploy.yml 파일에서 서비스 이름, 이미지, 빌더 설정, 서버 호스트 및 환경 변수를 구성하는 구체적인 Kamal 설정 방법을 안내합니다.

도입

Shipyrd는 Docker 컨테이너로 패키징되어 Docker Hub와 GitHub 컨테이너 레지스트리에 게시된 Rails 애플리케이션입니다. 이는 배포 추적 및 조정을 위한 간단한 제품으로, 팀 작업 시 애플리케이션의 배포 정보를 보여주고 환경 클레임 기능을 제공합니다. 작성자는 Shipyrd를 작은 사이드 프로젝트로 유지하면서 설정 및 배포를 최대한 간단하게 유지하고자 했으며, 이를 위해 Shipyrd가 모니터링하도록 구축된 배포 도구인 Kamal을 활용하는 방법을 소개합니다. 이 글은 컨테이너 기반 애플리케이션의 배포 흐름을 주 소스 코드와 분리하여 관리하는 방법을 다룹니다.

배포 환경 구성

  • ‘deploy’ 디렉토리 생성 및 관리: 기존 오픈소스 애플리케이션 내에 ‘deploy’ 디렉토리를 생성하고 ‘.gitignore’에 추가하여 Git 추적에서 제외합니다. 이는 배포 관련 파일들을 주 소스 코드와 분리하여 관리하여 배포 흐름을 독립적으로 유지하는 데 중요합니다.

  • Kamal 설치 및 초기화: ‘deploy’ 디렉토리로 이동하여 Bundler와 함께 Kamal을 설치하고 초기화합니다. ‘Gemfile’에 gem "kamal"을 추가한 후 bundle install을 실행하고, kamal init 명령어를 통해 기본 배포 레시피(‘config/deploy.yml’), 샘플 훅스(‘.kamal/hooks’), 시크릿 파일(‘.kamal/secrets’)을 생성합니다.

Kamal 설정 파일(‘config/deploy.yml’) 구성

  • 서비스 이름 설정: service: shipyrd와 같이 애플리케이션 이름을 명확히 지정합니다.

  • 컨테이너 이미지 설정: image: shipyrd/hosted와 같이 레지스트리 조직/사용자 및 컨테이너 이름을 정의합니다.

  • 빌더 설정: 컨테이너 빌드 방식을 세부적으로 정의합니다. arch: amd64로 아키텍처를 지정하고, dockerfile: "../Dockerfile"로 Dockerfile의 상대 경로를 설정하며, context: "../"로 빌드 컨텍스트를 상위 디렉토리(애플리케이션 루트)로 지정하여 전체 애플리케이션을 빌드에 포함시킵니다.

  • 서버 및 환경 변수 설정: servers 섹션에서는 애플리케이션을 배포할 호스트 정보와 필요한 환경 변수를 구성합니다. host: 123.456.78.9와 같이 서버 IP를 지정하고, env: secret: 아래에 SHIPYRD_HOST, SHIPYRD_SECRET_KEY_BASE 등 애플리케이션 운영에 필수적인 시크릿 환경 변수 목록을 추가합니다. 이 시크릿 값들은 ‘.kamal/secrets’ 파일에 안전하게 정의되어 Kamal에 의해 배포 시 로드됩니다.

Kamal의 유연성

Kamal은 Discord 또는 Chatwoot과 같이 컨테이너에서 실행되도록 준비된 기존 애플리케이션을 커스터마이징하여 배포하는 데 매우 효과적입니다. 최근 Kamal에 병합된 PR #1501은 액세서리 전용 설정을 더욱 간편하게 만들어, 호스팅된 애플리케이션에 대한 커스터마이징이 필요 없는 경우 오픈소스 애플리케이션을 더욱 쉽게 배포할 수 있도록 지원합니다.

결론

이 글은 Kamal을 활용하여 Docker 컨테이너로 패키징된 Rails 애플리케이션을 효율적으로 배포하는 구체적인 방법을 제시했습니다. 배포 흐름을 주 소스 코드와 분리하고, 'deploy' 디렉토리와 'config/deploy.yml'을 통해 Kamal 설정을 체계적으로 관리하는 접근 방식은 컨테이너 기반 애플리케이션 배포의 복잡성을 줄이고 유지보수성을 높이는 데 크게 기여합니다. 특히, Kamal의 유연한 설정 옵션과 액세서리 전용 설정의 간소화는 기존 애플리케이션의 커스터마이징 배포를 간편하게 만들며, 이는 개발자가 핵심 개발에 집중할 수 있도록 지원하는 중요한 이점입니다.

댓글 0

로그인이 필요합니다

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

로그인 하러 가기

아직 댓글이 없습니다

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