모든 것을 다시 복제하지 않고 부트스트랩/재빌드할 수 있나요?

Discourse 인스턴스가 GFW(만리방화벽) 뒤에 위치해 있어 Git에는 SOCKS5 프록시를 사용하고 있습니다. 몇 가지 플러그인이 설치되어 있어, 앱을 재빌드하거나 부트스트랩할 때마다 모든 리포지토리가 반복적으로 클론됩니다. 불행히도 클론 작업이 정기적으로 타임아웃되어, 가장 최근 코드베이스가 이미 클론된 상태여도 전체 프로세스가 처음부터 다시 시작됩니다. 40회 이상의 시도를 했고 약 5시간을 낭비했습니다. 마지막 장애물은 컨테이너 내부의 yarn 서브프로세스인데, 이것이 보통 타임아웃되어 업그레이드가 실패로 끝납니다.

app.yml을 어떻게 구성해야 플러그인 클론 프로세스 전체를 호출하지 않을 수 있을까요? docker-manager 코드와 discourse 코드베이스로의 클론은 50/50 확률로 성공하고, 그 후속 클론은 약 3분의 1의 성공률을 보입니다. yarn 서브프로세스가 실패하는 원인은 아직 알지 못하지만, 현재로서는 주어진 방법으로는 Discourse를 다시 구동하는 것이 불가능해 보입니다.

물론 수동으로 부트스트랩하려고 launcher destroy app을 실행하는 실수를 저질렀기 때문에, yarn 명령어를 수동으로 실행해 보기 위해 launcher enter app도 실행할 수 없습니다. 혹시 아이디어가 있는 분이 계신가요? 의견 주셔서 감사합니다.

이 분야에 전문가가 아니지만, 다운로드하는 자료에 대해 캐싱 프록시를 사용하는 것이 해결책이라고 생각합니다.

web.china.template.yml 파일이 있는데, 이 파일을 사용 중인가요?

물론이죠. 모든 Rails 애플리케이션에서 중국용 Ruby 소스를 사용하고 있습니다. 적어도 그건 다행입니다. 제게 궁금한 점은 이겁니다: 모든 저장소(플러그인 저장소 포함)는 이미 클론이 완료된 상태인데, 왜 하필 이 yarn 서브프로세스가 다음을 실행하죠:

INFO -- : > cd /var/www/discourse && [ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache clean'

어떤 이유에선지 GFW(중국 장거리 방화벽)는 연속된 git clone 프로세스를 너무 많이 허용하지 않고, 어느 시점에 연결을 종료해 버립니다. 만약 "야 형, 코드는 여기 있잖아, 클론할 필요 없어… 일단 부트스트랩만 해줘"라고 말하는 플래그로 런처를 실행할 수만 있다면 좋겠네요. :grinning:

수정: 믿을 수가 없습니다. 우리가 이 글을 쓰고 있는 바로 지금, 11시간 만에 78번째 시도가 마침내 성공했습니다. sshuttle을 사용했는데, 이 것도 약 12번의 시도가 걸렸지만 어째서인지 GFW가 저라는 가엾은 영혼에게 자비를 베풀어 주었네요.

그것은 여러분의 자체 캐싱 프록시가 하는 일일 거예요 (그렇게 생각합니다). squid를 확인해 보세요. 그러면 런처가 실제 소스가 아닌 여러분의 미러에서 가져오는 것을 볼 수 있을 거예요.

launcher에는 코드가 없기 때문에, 코드 없이 새로 생성된 컨테이너로 코드를 클론하고 있거든요. 그래서 매번. 매. 번. 모든 코드를 다운로드하는 것입니다.

네, 저희는 Squid에 대해 어느 정도 경험이 있습니다. 어쨌든 매번 수동으로 Discourse를 업그레이드하는 데 몇 시간을 쓸 수는 없으므로 일반적인 해결책이 필요합니다. 몇 달간 일반 socks5 프록시를 사용하며 잘 작동했지만, GFW(중국 방화벽)와의 싸움은 끊임없이 계속되고 있으며, 10월 초부터 GitHub에 접근하는 것이 매우 번거로워졌습니다. gitee.com 사이트에 클론이 수없이 많은 것도 당연한 일이죠.

런처에 대한 설명에 감사드립니다. 저는 Docker에 대해 다소 무지해서, 로컬에 git 저장소를 클론한 다음 컨테이너에 기록하는 줄 알고 있었습니다.

Squid 옵션을 definitely 살펴볼 예정입니다. 제 두 번째 골칫거리인 fonts.googleapis.com 문제에도 도움이 될 수 있을 것 같습니다.

이것은 git clones가 아니라 NPM 패키지 레지스트리에서 설치해야 합니다. NPM/Yarn에 bundle config mirror.https://rubygems.org https://gems.ruby-china.com/와 동등한 기능이 있을 것입니다.

아, 바로 그 다음에 무언가를 복제하는 서브프로세스가 실행되었고 실패했습니다. 불행히도 지금은 에러 로그를 재현할 수 없습니다. 분명히 GitHub에서 무언가를 가져온 것이었는데, 에러 메시지가 동일한 TLS 핸드셰이크 오류/타임아웃이었거든요. 지금은 중요하지 않지만요. 보통 npm은 무슨 이유에서인지 여기서는 타임아웃이 거의 발생하지 않습니다. GFW는 길고 미스터리로 가득하죠!

아마도

일 것입니다.

정말 대단하시네요! 정확히 그 부분이 제 업그레이드를 망쳤습니다.

꽤 안정적으로 보이는데, 지금 NPM 레지스트리에 올릴 수 있을까요? @pmusaraj

네, 물론이죠, 그렇게 합시다.