배포 환경 구성
-
‘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은 액세서리 전용 설정을 더욱 간편하게 만들어, 호스팅된 애플리케이션에 대한 커스터마이징이 필요 없는 경우 오픈소스 애플리케이션을 더욱 쉽게 배포할 수 있도록 지원합니다.