Install Discourse on an isolated CentOS 7 server

Most plugins carry all the code they need and have a simple install. Those two you tried to use need to fetch gems (libraries) from the internet to able to function.

3개의 좋아요

코드에서 플러그인을 위한 Ruby gem fetch가 어디서 일어나는지 아세요? 찾아보긴 했는데 아직 정확한 위치를 찾지 못했어요.

캐시된 gem을 사용하는 대신 격리된 호스트에서 rubygems 미러를 실행하는 것이 더 우아한 방법일 것 같다는 생각이 드네요. 여기에 튜토리얼을 찾았는데, 시스템 전체의 추가 gem 소스를 구성할 수 있는 것 같습니다.

1개의 좋아요

내부 Discourse는 꽤 오랫동안 같은 구버전을 안정적으로 사용해 왔지만, 마침내 IE9를 제거하게 되어 업그레이드가 시급한 상태입니다.
Discourse 최신 버전에서도 이 가이드는 여전히 유효합니다. RHEL 7 대신 RHEL 8을 사용해도 마찬가지입니다. :slight_smile:

실험을 통해 discourse-prometheus와 discourse-calendar 플러그인이 추가 의존성이 있더라도 오프라인에서도 작동하도록 하는 방법을 알아냈습니다. 핵심은 빌드 서버의 플러그인 디렉터리와 /var/www/discourse/vendor/bundle/ruby에 있는 루비 제머(ruby gems)를 모두 가져오는 것이었습니다.

docker run -it -v ~/local/rubygems.org:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/vendor/bundle/ruby /local-rubygems"
docker run -it -v ~/local/rubygems.org/plugin-gems/discourse-calendar:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/plugins/discourse-calendar/gems /local-rubygems"
docker run -it -v ~/local/rubygems.org/plugin-gems/discourse-prometheus:/local-rubygems local_discourse/app /bin/bash -c "cp -rv /var/www/discourse/plugins/discourse-prometheus/gems /local-rubygems"

그리고 /templates/web.template.yml 파일에서 다음과 같이 설정합니다:

  - exec:
      cd: $home
      hook: bundle_exec
      cmd:
        # 로컬 루비 캐시 복사
        - cp -rv /local-rubygems.org/ruby/* $home/vendor/bundle/ruby/
        - cp -rv /local-rubygems.org/plugin-gems/* $home/plugins/
        - su discourse -c 'bundle install --local --deployment --retry 3 --jobs 4 --verbose --without test development'

참고로 Active Directory IIS SSO 관련 토론 주제가 언젠가 사라진 것 같지만, 코드는 여전히 https://github.com/laktak/discourse-sso에서 사용할 수 있으며, 현재 이름이 변경된 DiscourseConnect SSO와도 정상적으로 작동합니다.

다른 업그레이드를 시도해 보았는데, web.template.yml 파일에 새로운 “yarn install” 섹션이 추가된 것으로 보이며, 이로 인해 격리된 환경에서 문제가 발생하고 있습니다.

- exec:
      cd: $home
      cmd:
        - "[ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache list'"

기존 컨테이너와 새 컨테이너의 내용을 비교해 보면, 새 컨테이너에는 /usr/local/share/.cache/yarn/v6에 캐시된 yarn 패키지가 많이 있는 반면, 기존 컨테이너에는 아무것도 없는 것 같습니다. 아마도 필요한 node.js 패키지가 이전에는 베이스 이미지 내에 포함되어 있었지만, 이제는 재빌드 과정에서 업데이트되는 것으로 추측됩니다.

ruby 캐시와 동일한 방식으로 yarn 캐시를 복사해 내어, 빌드 박스의 캐시된 패키지를 yarn이 사용하도록 할 수 있는지 실험해 볼 것입니다.