Discourse 维护指南(for socoding.cn)

部署

使用 Docker 部署,不要跟开发环境部署弄混。

后续升级基本就是 ./launcher rebuild app

仓库镜像

由于某些原因,GitHub 需要非常规手段才能访问,考虑到服务器已经备案,考虑:

对于 GitHub → Gitee,考虑 GitHub Actions 完成,目前已经同步的包括:

  • git@github.com:discourse/discourse.git
  • git@github.com:discourse/docker_manager.git
  • git@github.com:discourse/discourse-math.git
  • git@github.com:discourse/discourse-solved.git
  • 其它插件若干

同步目标详见 gitee.com/bobby285271 ,配置参考(需要将 SSH 私钥添加到 secret):

jobs:
  git-mirror:
    runs-on: ubuntu-latest
    steps:
      - uses: wearerequired/git-mirror-action@v1
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE }}
        with:
          source-repo: 'git@github.com:discourse/discourse.git'
          destination-repo: 'git@gitee.com:bobby285271/discourse.git'

PostgreSQL

不需要自己装 PostgreSQL,甚至不需要碰这玩意,但是 app.yml 里面可以指定 PostgreSQL 版本。

使用 templates/postgres.template.yml 就是跟着官方的选择走,如果需要推迟更新可以修改为指定版本,例如 templates/postgres.13.template.yml。版本间升级基本不用自己干预。

可能遇到的情景是,./launcher rebuild app 过了几个小时还没跑完忍不住 Ctrl + C 之后论坛无法启动(通常是 502)或者服务器被熊孩子强制重启了(熊孩子又是谁)。通常就是 PostgreSQL 的锅,可以去查一下日志:

$ tail -f shared/standalone/log/var-log/postgres/current

如果是这样子的那就是 Ctrl + C 的锅:

PANIC: could not locate a valid checkpoint record

进容器排错,app 是论坛实例的名称,用 docker ps -a 可查:

# docker start app && docker exec -it app bash

./launcher start app && ./launcher enter app 可能会被强制登出,原因不明。

然后跟着这个答案走路径写对 https://stackoverflow.com/a/14716579 ,要先 su postgres 换过去。

没有用要找思路的话试试:

# service postgresql start # `app` 是用不了 systemd 的。

邮箱

邮箱推荐使用 QQ 邮箱,开通 SMTP 后配置如下,目前的邮箱是姚总的,这个邮箱只用来发邮件。

DISCOURSE_SMTP_ADDRESS: smtp.qq.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: secret@qq.com
DISCOURSE_SMTP_PASSWORD: "secret"
DISCOURSE_SMTP_ENABLE_START_TLS: true

首次部署需要加这一行,不然欢迎向导没法走完。后面 rebuild 必须移除。

run:
  - exec: rails r "SiteSetting.notification_email='ruanxie_scnu@163.com'"

插件

使用的插件如下,绝大部分插件实际上是用不上的后来就移除了:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - sudo -E -u discourse git clone https://gitee.com/bobby285271/docker_manager.git
          - sudo -E -u discourse git clone https://gitee.com/bobby285271/discourse-math.git
          - sudo -E -u discourse git clone https://gitee.com/bobby285271/discourse-solved.git

paviliondev/discourse-news 默认在移动端下适配极差,要加的话要自己加样式。

Gems 加速

不要试图在 rebuild 时直接进容器改 Gemfile,而且 rebuild 是在新容器部署 discourse,把旧容器数据搬过去,删掉旧容器的流程进行的。在 app.yml 引入 templates/web.china.template.yml

hooks:
  before_web:
    - exec:
       cmd:
         - gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
         - cd /var/www/discourse && sed -i 's/github.com/hub.fastgit.org/g' Gemfile
         - cd /var/www/discourse && bundle config unset deployment && bundle install

  before_bundle_exec:
    - exec:
       cmd:
         - su discourse -c 'bundle config mirror.https://rubygems.org https://gems.ruby-china.com/'

Git 上游修改

例如 templates/web.template.yml

- git remote set-url origin https://gitee.com/bobby285271/discourse.git
- git remote set-branches --add origin master

又例如 launcher

if [[ ! "false" =  $update_pups ]]; then
    run_command="$run_command git remote set-url origin https://hub.fastgit.org/discourse/pups.git && git pull && git checkout $pups_version &&"
fi

如果无法轻易通过上下文推断出原上游仓库地质,可先加上 git remote -v 重新构建套取。

Custom Header Links

部署完毕后,直接在定制页里面下载,目前的配置如下:

SCNUOJ, 华南师大软院在线判题系统, /t/topic/425, vdo, self, keep
OSS Mirror, 华南师大软院开源镜像站, /t/topic/427, vdo, self, keep
0xFFFF, 华南师大搬砖技术社区, https://0xffff.one/, vdo, blank, keep

  • 倒数第三个字段 vdm = desktop + mobile
  • vdo = desktop only
  • vmo = mobile only
  • 最后一个字段 remove = hides the link when the title is expanded on topic pages
  • keep = keeps the link visible even when the title is visible on topic pages

样式调整

注意到很多人对 Markdown 语法不熟悉,分段时仅使用一个换行符:

.cooked, .d-editor-preview {
    line-height: 1.7;
}

.cooked br, .d-editor-preview br {
  content: "";
  margin: 1em 0 0 0;
  display: block;
}
1赞
粤 ICP 备 2020080455 号