데이터베이스에 접근하지 않고 이미지 빌드하기

저도 여러분과 같은 방식으로 하고 싶었습니다. 저희는 Amazon ECS에서 Discourse를 운영하므로, 웹 이미지만 빌드하여 레지스트리에 푸시할 수 있어야 했습니다. 지원되는 설치 방식에 최대한 가깝게 유지하고 싶었기 때문에 Discourse 빌드 프로세스를 직접 수정하는 것은 원치 않았습니다.

대신, 로컬 머신에서 표준 launcher 스크립트를 사용하여 두 컨테이너 구성을 빌드하되, 데이터 컨테이너는 무시하고 웹 컨테이너만 레지스트리에 푸시합니다. 런타임에는 환경 변수를 통해 Postgres와 Redis 연결 정보를 오버라이드합니다.

새로운 이미지를 배포하는 과정은 3단계입니다:

  1. 안전한 사전 마이그레이션 실행. ECS가 이 명령을 실행하도록 합니다(새로운 이미지 사용):

     SKIP_POST_DEPLOYMENT_MIGRATIONS=1 rake db:migrate
    
  2. 새로운 이미지 배포. ECS 서비스를 업데이트합니다.

  3. 사후 마이그레이션 실행. ECS가 이 명령을 실행하도록 합니다:

     SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate
    

이미지를 빌드하는 동안 로컬 데이터 컨테이너를 실행하는 것은 낭비일 수 있지만, 이를 통해 데이터베이스나 Redis와 통신하려는 부분이 무엇인지 걱정하지 않고 표준 web.template.yml을 사용할 수 있습니다.