표준 설치 중 명령 cd /var/www/discourse && su discourse -c 'bundle install --retry 3 --jobs 4' 실행 시 긴 지연 발생

안녕하세요 여러분! 저는 중국에서 온 디스커스 신규 사용자입니다. 표준 설치 과정에서 이상한 문제가 발생했습니다.

./discourse-setup 명령을 실행한 후 터미널이 해당 명령에서 20분 이상 멈춰 있었습니다.

I, [2023-06-04T07:47:29.161469 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle config --local deployment true'
I, [2023-06-04T07:47:29.544117 #1]  INFO -- : 
I, [2023-06-04T07:47:29.544260 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle config --local without "development test"'
I, [2023-06-04T07:47:29.725190 #1]  INFO -- : You are replacing the current local value of without, which is currently "test:development"
I, [2023-06-04T07:47:29.725290 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle install --retry 3 --jobs 4'

저희 포럼에서 비슷한 질문을 검색해 보았으며, Local installation of discourse on Centos 7 이 링크에서는 네트워크 문제일 수 있다고 언급하고 있습니다. 제 서버가 중국에 있어 네트워크 문제인 것 같지만, wget https://rubygems.org/ 명령으로 테스트해 보니 정상적으로 작동했습니다.

어떻게 해야 할지 모르겠습니다. 답변 주시면 감사하겠습니다.

음, 제 서버가 중국에 있기 때문에 네트워크 문제인 것이 맞습니다.
해결 방법을 찾아서 여기 중국어로 복사했습니다.


중국 내 환경에서 Discourse 설치 在国内环境下安装Discourse - 主页 - 第 页 - IzIy's Files - MyPress - MyPre.Cn

Discourse의 버전 업그레이드 및 유지보수는 모두 GitHub를 기반으로 수행되며, Discourse 자체는 Ruby로 작성되어 있습니다.

Tencent Cloud의 CVM, 경량 서버 및 Alibaba Cloud의 ECS를 사용하는 경우 모두 해외 웹사이트 접속이 느린 문제가 있습니다. 이는 주로 국내 Git 저장소를 지원하기 위해 시행된 트래픽 제한 조치 때문입니다.

GitHub에 호스팅된 discourse를 클론할 때, GitHub.com을 github.com.cnpmjs.org로 대체하여 GitHub 접속을 가속화할 수 있습니다. 예를 들어:

git clone https://github.com/discourse/discourse_docker.git를 git clone https://github.com.cnpmjs.org/discourse/discourse_docker.git로 대체합니다.

또한, ./discourse-setup을 실행할 때 설치 프로그램은 Docker 내에서 몇 가지 추가 항목을 설치합니다.

예를 들어, gem update도 Ruby 미러를 추가해야 합니다.

설정 파일을 수정하여 Ruby 미러 주소를 추가할 수 있으며, 주로 관련되는 파일은 docker.git입니다.

또한, ./discourse-setup을 실행할 때 설치 프로그램은 Docker 내에서 몇 가지 추가 항목을 설치합니다.

예를 들어, gem update도 Ruby 미러를 추가해야 합니다.

설정 파일을 수정하여 Ruby 미러 주소를 추가할 수 있으며, 주로 관련되는 파일은

discourse/templates/web.template.yml
discourse/containers/app.yml

위 파일에서 gem update를 호출하는 부분 앞에 다음 미러 사이트 구성 문장을 추가하십시오:

gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
gem update bundler

bundle의 경우 bundle config mirror.https://rubygems.org https://gems.ruby-china.com을 사용하여 미러 사이트를 추가할 수 있습니다.

주요 수정 사항은 다음과 같습니다:

diff --git a/templates/web.template.yml b/templates/web.template.yml
index 28fb22d..bb0010c 100644
--- a/templates/web.template.yml
+++ b/templates/web.template.yml
@@ -86,6 +86,9 @@ run:
       cd: $home
       hook: code
       cmd:
+        - git remote -v
+        - git remote set-url origin https://github.com.cnpmjs.org/discourse/discourse.git
+        - gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
         - git reset --hard
         - git clean -f
         - git remote set-branches --add origin master
@@ -145,6 +148,7 @@ run:
       hook: web
       cmd:
         # ensure we are on latest bundler
+        - gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
         - gem update bundler
         - find $home ! -user discourse -exec chown discourse {} \+

@@ -152,6 +156,9 @@ run:
       cd: $home
       hook: bundle_exec
       cmd:
+        - su discourse -c 'gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/'
+        - su discourse -c 'gem update bundler'
+        - su discourse -c 'bundle config mirror.https://rubygems.org https://gems.ruby-china.com'
         - su discourse -c 'bundle install --deployment --retry 3 --jobs 4 --verbose --without test developme

   - exec:
...skipping...

이메일 설정 관련 문제

포럼에는 일반적으로 인증 코드, 로그인 메시지 또는 비밀번호 찾기, 메시지 알림 등 다양한 기능을 위해 이메일 서버가 필요합니다.

NetEase의 무료 기업 이메일(ym.163.com)은 이 요구 사항을 충족할 수 있으며, QQ 이메일의 SMTP 서비스를 활성화하는 것도 가능합니다. 물론 유료 이메일을 구매하는 것도 가능합니다.

NetEase 무료 기업 이메일은 기본적으로 SMTP 서비스가 활성화되어 있습니다. 다음은 app.yml 설정 예시입니다. Discourse는 SSL 연결 방식을 지원하지 않는 것 같으므로, 여기서는 SMTP 서비스를 직접 사용했습니다. start_tls 기능을 명시적으로 비활성화해야 한다는 점에 유의하십시오.

  DISCOURSE_SMTP_ADDRESS: smtp.ym.163.com
  DISCOURSE_SMTP_PORT: 25
  DISCOURSE_SMTP_USER_NAME: mail@getblog.cn
  DISCOURSE_SMTP_PASSWORD: "password"
  DISCOURSE_SMTP_ENABLE_START_TLS: false           # (선택 사항, 기본값 true)
  DISCOURSE_SMTP_DOMAIN: getblog.cn    # (일부 제공업체에서 필요)

또한, 웹사이트 관리자의 이메일은 DISCOURSE_SMTP_USER_NAME과 같으면 안 됩니다. 그렇지 않으면 가입 이메일을 받지 못할 수 있습니다.

Docker로 Discourse 포럼/BBS 시스템 설치 (Nginx)

만약 본토에 거주하고 있다면 미러 가속이 필요합니다. 설정 파일의 templates 블록을 찾아 국내 미러 templates/web.china.template.yml를 추가하십시오:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/sshd.template.yml"
  - "templates/web.template.yml"
  - "templates/web.china.template.yml"

분명 bundle install 때문인 것 같습니다. 서버가 해외에 있더라도 이 작업은 시간이 오래 걸리는데, 게다가 방화벽(장벽)을 하나 더 넘어야 하니까요.
나중에 yarn install을 할 때도 이 문제에 주의해야 합니다.

가능하면 서버를 중국 대륙에 두지 않는 것이 좋습니다. GitHub에서 Discourse 본체를 클론하는 것조차 오류가 날 수 있기 때문입니다……


중국 개발자를 위한 참고: 이 문제는 분명 bundle install 때문인 것 같습니다. 서버가 해외에 배포되어 있더라도 이 작업은 시간이 오래 걸립니다. 게다가 잘 알려진 저항(방화벽)에 부딪히게 됩니다.
나중에 yarn install을 할 때도 동일한 문제에 주의하세요.

서버를 중국에 두지 않는 것이 좋습니다. GitHub에서 Discourse를 클론하는 것조차 오류가 발생할 수 있기 때문입니다……

답장 주셔서 감사합니다!

서버에 프록시가 있어서 GitHub에는 정상적으로 접근할 수 있고, gem/bundle의 경우 국내 미러로 소스를 변경하는 튜토리얼을 찾아서 이제 정상적으로 배포할 수 있게 되었습니다 (다만 이번에는 메모리 부족으로 막혀 있습니다 :face_holding_back_tears:

해외 서버도 설정해 보고 싶긴 하지만, 비용이 너무 비싸네요 :face_holding_back_tears:

https://www.bugcatt.com/archives/2529

중국 서버가 해외보다 더 비싼 경우도 있어요 (네, 바로 알리클라우드입니다). 업체마다 다르죠.
잠깐, 진짜로 알리클라우드를 고르셨군요…… 아, 이거.

학생용 서버(2코어 2GB)를 사용 중입니다 :sweat_smile:
더 높은 사양의 서버는 감당하기 어렵습니다