STRAPI를 사용해 보려고 기본 세팅으로 시작해보니 sqlite를 기본 디비로 사용하고 있더군요. 간단한 기능은 이 디비로 가능하지만 제대로 하려면 역시 최소한 MySQL (MariaDB) 를 사용해야 합니다.
Dockerfile 및 docker compose 설정은 공식홈페이지의 https://docs.strapi.io/dev-docs/installation/docker 문서를 확인하시기 바랍니다.
이제 위 공식 사이트 설정대로 개발 환경을 구축하고 docker compose 실행하면 strapi 용 컨테이너가 다음과 같은 오류가 발생하고 계속 재시작됩니다. (오류를 보기위해 데몬화하는 -d 옵션을 빼고 실행시켰습니다.) 역시 쉽게 가는 법이 없네요. ㅜㅜ;
# docker compose up
strapi | yarn run v1.22.19
strapi | $ strapi develop
strapi | Error: Could not load js config file /opt/app/node_modules/@strapi/plugin-upload/strapi-server.js:
strapi | Something went wrong installing the "sharp" module
strapi |
strapi | Cannot find module '../build/Release/sharp-linuxmusl-x64.node'
strapi | Require stack:
strapi | - /opt/app/node_modules/sharp/lib/sharp.js
strapi | - /opt/app/node_modules/sharp/lib/constructor.js
strapi | - /opt/app/node_modules/sharp/lib/index.js
strapi | - /opt/app/node_modules/@strapi/plugin-upload/server/services/image-manipulation.js
strapi | - /opt/app/node_modules/@strapi/plugin-upload/server/services/index.js
strapi | - /opt/app/node_modules/@strapi/plugin-upload/server/index.js
strapi | - /opt/app/node_modules/@strapi/plugin-upload/strapi-server.js
strapi | - /opt/app/node_modules/@strapi/utils/dist/import-default.js
strapi | - /opt/app/node_modules/@strapi/utils/dist/index.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/utils/components.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/strapi/queries/entity.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/strapi/queries/index.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/strapi/providers/local-destination/strategies/restore/index.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/strapi/providers/local-destination/strategies/index.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/strapi/providers/local-destination/index.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/strapi/providers/index.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/strapi/index.js
strapi | - /opt/app/node_modules/@strapi/data-transfer/dist/index.js
strapi | - /opt/app/node_modules/@strapi/strapi/dist/commands/index.js
strapi | - /opt/app/node_modules/@strapi/strapi/bin/strapi.js
strapi |
strapi | Possible solutions:
strapi | - Install with verbose logging and look for errors: "npm install --ignore-scripts=false --foreground-scripts --verbose sharp"
strapi | - Install for the current linuxmusl-x64 runtime: "npm install --platform=linuxmusl --arch=x64 sharp"
strapi | - Consult the installation documentation: https://sharp.pixelplumbing.com/install
strapi | at loadJsFile (/opt/app/node_modules/@strapi/strapi/dist/core/app-configuration/load-config-file.js:21:19)
strapi | at loadFile (/opt/app/node_modules/@strapi/strapi/dist/core/app-configuration/load-config-file.js:41:20)
strapi | at Object.loadPlugins (/opt/app/node_modules/@strapi/strapi/dist/core/loaders/plugins/index.js:93:62)
strapi | at async Strapi.loadPlugins (/opt/app/node_modules/@strapi/strapi/dist/Strapi.js:373:9)
strapi | at async Promise.all (index 3)
strapi | at async Strapi.register (/opt/app/node_modules/@strapi/strapi/dist/Strapi.js:407:9)
strapi | at async Strapi.load (/opt/app/node_modules/@strapi/strapi/dist/Strapi.js:493:9)
strapi | at async workerProcess (/opt/app/node_modules/@strapi/strapi/dist/commands/actions/develop/action.js:100:28)
strapi | at async exports.default (/opt/app/node_modules/@strapi/strapi/dist/commands/actions/develop/action.js:38:20)
strapi |
strapi | Done in 3.25s.
strapi exited with code 0
구글링으로 검색해 봐도 여러 해결책을 알려주지만 제대로 되는 건 거의 없었습니다. sharp 모듈 관련해서 계속 오류가 난다고는 하지만 정확히는 그게 문제가 아니어서 해결책을 찾는데 시간이 많이 소요되었네요.
유일하게 Dockerfile 에 RUN npm install sharp@0.28.3 –save 내용을 넣으면 오류가 사라지긴 합니다만 이것도 제대로 된 해결책은 아니었습니다.
결론은 .dockerignore 파일을 아래와 같이 설정하고 strapi 프로젝트 폴더에 위치시켜야 합니다.
node_modules
npm-debug.log
yarn-error.log
이렇게 하면 Dockerfile 에서 COPY . . 하면서 소스를 복사할 때 node_modules 부분을 제외할 수 있습니다. 이러면 원래 Dockerfile 내에 yarn install 이 해당 환경에 맞는 모듈을 정확하게 가져온 것을 사용하므로 제대로 작동하고 docker compose build 도 더 빨리 실행됩니다.
이제 docker compse up 을 실행하면 제대로 오류 없이 실행될 겁니다. ^o^
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.