CI/CD 파이프라인이 모두 잘 완료되었으나, Sharp 패키지의 플랫폼 종속적 문제로 was가 죽어버리는 문제가 발생했다.
학습메모 1을 참고 (공식문서)
npm install --arch=x64 --platform=linux --libc=glibc sharp
하지만 우리는 npm이 아니라 yarn berry.. --platform 옵션이 없어 이에 대응하는 명령을 찾기가 좀 어려웠다.
결국 학습메모 2를 참고해 아래와 같은 명령으로 해결할 수 있다는 것을 확인했다.
SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm_config_arch=x64 npm_config_platform=linux yarn workspace server add sharp
FROM node:20-alpine
WORKDIR /app
ADD . /app
RUN SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm_config_arch=x64 npm_config_platform=linux yarn workspace server add sharp
RUN yarn workspace server build
EXPOSE 3000
ENTRYPOINT ["yarn", "workspace", "server", "start:prod"]
Dockerfile-was
도커파일에 RUN 명령으로 위와 같이 빌드 전 패키지를 플랫폼에 맞게 추가 설치해주는 것으로 해결
이제 잘 올라감.
다음 배포때 동일한 설정을 했음에도 같은 문제가 발생했다.
도대체 왜 안되나 이전에 왜 됐나 수많은 트러블 슈팅과정 끝에,
그 일주일 사이에 Sharp 최신 버전이 0.32.6
에서 0.33.0
으로 업그레이드되어 문제가 생긴 것이라는 것을 알게 되었다.
SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm_config_arch=x64 npm_config_platform=linux yarn workspace server add sharp@0.32.6
버전을 명확히 명시하여 해결.. 조금 허무하지만, 의존성 관리 시
잘 동작할 때를 기준으로 버전 명시를 명확히 하는 것이 중요하다는 것을 배울 수 있었다.
우리의 케이스와 같이 dockerfile에서 배포 시 새로 패키지 설치를 할 땐, pakcage.json에서 관리되지 않아
버전 명시가 안되니 어떤 문제가 발생할 지 모르는 거다.
유명한 오픈 소스라고 다 믿을 수 있는 게 아니다.. 흑흑