在隔离的 CentOS 7 服务器上安装 Discourse

我们内部的 Discourse 系统一直愉快地运行着同一个旧版本,但既然我们终于要淘汰 IE9 了,升级已是刻不容缓。
我可以确认,本指南对于最新版本的 Discourse 依然适用。即使使用的是 RHEL 8 而非 RHEL 7 也没问题: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:
        # 复制本地 Ruby 缓存
        - 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 的主题似乎在某处丢失了,但代码仍然可在 GitHub - laktak/discourse-sso: Single Sign On for Discourse with Active Directory · GitHub 获取,并且仍然适用于现已更名为 DiscourseConnect SSO 的系统。