저도 여러분과 같은 방식으로 하고 싶었습니다. 저희는 Amazon ECS에서 Discourse를 운영하므로, 웹 이미지만 빌드하여 레지스트리에 푸시할 수 있어야 했습니다. 지원되는 설치 방식에 최대한 가깝게 유지하고 싶었기 때문에 Discourse 빌드 프로세스를 직접 수정하는 것은 원치 않았습니다.
대신, 로컬 머신에서 표준 launcher 스크립트를 사용하여 두 컨테이너 구성을 빌드하되, 데이터 컨테이너는 무시하고 웹 컨테이너만 레지스트리에 푸시합니다. 런타임에는 환경 변수를 통해 Postgres와 Redis 연결 정보를 오버라이드합니다.
새로운 이미지를 배포하는 과정은 3단계입니다:
-
안전한 사전 마이그레이션 실행. ECS가 이 명령을 실행하도록 합니다(새로운 이미지 사용):
SKIP_POST_DEPLOYMENT_MIGRATIONS=1 rake db:migrate -
새로운 이미지 배포. ECS 서비스를 업데이트합니다.
-
사후 마이그레이션 실행. ECS가 이 명령을 실행하도록 합니다:
SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate
이미지를 빌드하는 동안 로컬 데이터 컨테이너를 실행하는 것은 낭비일 수 있지만, 이를 통해 데이터베이스나 Redis와 통신하려는 부분이 무엇인지 걱정하지 않고 표준 web.template.yml을 사용할 수 있습니다.