저는 https://forum.embeetle.com에서 자체 호스팅된 Discourse 인스턴스를 운영하고 있습니다.
어제 원클릭 브라우저 업그레이드가 실패하여 서버에 로그인한 후 ./launcher rebuild app을 시도했습니다.
이것도 실패했으며, 다음과 같은 오류가 발생했습니다:
I, [2024-08-01T20:46:09.837292 #1] INFO -- :
I, [2024-08-01T20:46:09.837631 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'yarn install --frozen-lockfile && yarn cache clean'
warning Resolution field "unset-value@2.0.1" is incompatible with requested version "unset-value@^1.0.0"
error Error: https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz: ESOCKETTIMEDOUT
at ClientRequest.<anonymous> (/usr/share/yarn/lib/cli.js:142037:19)
at Object.onceWrapper (node:events:631:28)
at ClientRequest.emit (node:events:517:28)
at TLSSocket.emitRequestTimeout (node:_http_client:847:9)
at Object.onceWrapper (node:events:631:28)
at TLSSocket.emit (node:events:529:35)
at Socket._onTimeout (node:net:598:8)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7)
이후 명령어가 멈추는 것 같습니다(최소 10분 이상 아무 반응이 없음) 그래서 프로세스를 종료하고 다시 시도했습니다. 결과는 동일했습니다.
네트워크 문제는 없습니다: 도커 컨테이너 내부(./launcher enter app)에서 wget https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz를 실행하면 0.1초 이내에 성공적으로 반환됩니다.
유사한 문제를 확인해 보았습니다: Error during the update ESOCKETTIMEDOUT registry.yarnpkg.com - #4 by jericson 거기에 제시된 해결책은 /var/discourse/templates/web.template.yml을 편집하여 타임아웃을 늘리는 것입니다.
불행히도 제 설치 환경에는 해당 경로가 없습니다(도커 컨테이너 내부에서 /var/discourse가 없습니다. 앱에 진입했을 때 기본 작업 디렉터리인 var/www/discourse 폴더는 있지만, 여기에는 templates 하위 폴더가 없습니다. web.template.yml을 검색해 보았지만 어디에서도 찾을 수 없었습니다.)
또한 https://registry.yarnpkg.com/date-fns/-/date-fns-3.6.0.tgz의 다운로드 속도가 매우 빠른 점을 고려할 때, 타임아웃을 늘리는 것이 문제를 해결할 수 있을지 확신이 서지 않습니다.
결국 며칠 전의 백업(구버전의 discourse)을 복원하고, 최신 버전의 discourse/shared를 해당 백업으로 복사하여 진행했습니다. 이 방법은 작동하므로 포럼이 다시 정상적으로 운영되고 있습니다.
메인 브랜치의 최신 버전에 문제가 있는 건가요? 실제로 ./launcher rebuild app을 다시 실행해 보았는데, 동일한 방식으로 다시 실패하여 포럼을 백업에서 다시 복원해야 했습니다.