从多站点恢复到单个站点

你好,我参考了 Multisite configuration with Docker 来配置多站点,现在我想恢复为单站点,除了恢复 app.yml 文件外,还需要做什么?

我实在不太明白你在这里想达到什么目的,但如果你想将一个站点从多站点设置中独立出来,可以通过从多站点下载备份,然后将其恢复到独立站点来实现。根据该独立站点的设置情况,你可能需要进行一些重映射操作。

1 个赞

我只想保留第一个站点,删除第二个站点。

是的,最简单的做法是:先备份第一个站点,然后关闭你在搭建多站点时可能用到的两个容器(web_only 和 data),接着通过 ./discourse-setup 设置一个新站点,最后恢复你的备份。更高级的解决方案可能包括:从 yml 文件中移除第二个站点的配置、进入数据容器删除第二个数据库、从共享文件夹中移除第二个站点的资源等。

1 个赞

谢谢!我会尝试第一种方法。

1 个赞

你好,我按照您的第二种方法操作。我删除了第二个站点的数据库,并恢复了 app.yml 配置文件。但我不清楚如何从共享文件夹中移除第二个站点的资源文件,您能帮忙吗?

当我升级 Discourse 时,插件页面显示为空白,控制台报错如下:

Uncaught TypeError: Cannot read property 'extend' of undefined
    at _discourse-rss-poster-422da9e50d576ad45cb7287315e7a35550af3708eb68422bee05813edc01521d.js:188
    at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74640)
    at t.module.exports.u.<computed> (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74470)
    at require (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:74637)
    at t.customResolve (_application-572c27eef10b724b244ce26553c6fe92b75f44172387b25ef144f338da4faa1e.js:1015)
    at t.resolveRoute (_application-572c27eef10b724b244ce26553c6fe92b75f44172387b25ef144f338da4faa1e.js:1051)
    at t.e [as resolveRoute] (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:43433)
    at t.n.resolve (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:46378)
    at _ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:12420
    at e.t.resolve (_ember_jquery-1ed3f3559e6f967733b4088aa729ff7039dff2c09c5a5f787a214b016f58aabc.js:11959)

我认为问题出在第二个站点上,但不知道该如何修复。谢谢!

你能帮我一下吗?@sam

您必须分享您的 app.yml 文件,但需隐去密码。我认为问题出在您的 app.yml 文件中存在某些遗漏或错误。

## 这是一个全功能的独立 Discourse Docker 容器模板
##
## 修改此文件后,您必须重新构建
## /var/discourse/launcher rebuild app
##
## 编辑时请*非常*小心!
## YAML 文件对空格或对齐的错误极其敏感!
## 必要时请访问 http://www.yamllint.com/ 验证此文件

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## 如果您想添加 Lets Encrypt (https),请取消注释以下两行
#  - "templates/web.ssl.template.yml"
#  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/web.socketed.template.yml"

## 此容器应暴露哪些 TCP/IP 端口?
## 如果您希望 Discourse 与另一个 Web 服务器(如 Apache 或 nginx)共享端口,
## 请参阅 https://meta.discourse.org/t/17247 了解详情
expose:
        #  - "80:80"   # http
        #  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## 将 db_shared_buffers 设置为总内存的最大 25%。
  ## 将根据检测到的 RAM 由 bootstrap 自动设置,您也可以覆盖
  db_shared_buffers: "128MB"

  ## 可以提高排序性能,但会增加每个连接的内存使用量
  #db_work_mem: "40MB"

  ## 此容器应使用哪个 Git 版本?(默认:tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## 支持多少并发 Web 请求?取决于内存和 CPU 核心数。
  ## 将根据检测到的 CPU 由 bootstrap 自动设置,您也可以覆盖
  UNICORN_WORKERS: 2

  ## TODO: 此 Discourse 实例将响应的域名
  ## 必填。Discourse 无法在纯 IP 地址上运行。
  DISCOURSE_HOSTNAME: at4am.io

  ## 如果您希望容器以与上述相同的
  ## 主机名(-h 选项)启动,请取消注释(默认值为 "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 初始注册时将设为管理员和开发人员的逗号分隔邮箱列表
  ## 示例 'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'a@gmail.com'

  ## TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器
  # SMTP 地址、用户名和密码是必填项
  # 警告:SMTP 密码中的字符 '#' 可能导致问题!
  DISCOURSE_SMTP_ADDRESS: smtp.office365.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: a@outlook.com
  DISCOURSE_SMTP_PASSWORD: "a"
  DISCOURSE_SMTP_AUTHENTICATION: login
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

  ## 如果您添加了 Lets Encrypt 模板,请取消注释以下行以获取免费 SSL 证书
  LETSENCRYPT_ACCOUNT_EMAIL: a@gmail.com

  ## 此 Discourse 实例的 CDN 地址(配置为拉取)
  ## 请参阅 https://meta.discourse.org/t/14857 了解详情
  #DISCOURSE_CDN_URL: //discourse-cdn.example.com

## Docker 容器是无状态的;所有数据都存储在 /shared 中
volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /var/discourse/shared/standalone/log/var-log
      guest: /var/log

## 插件放在这里
## 请参阅 https://meta.discourse.org/t/19157 了解详情
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/livc/discourse-rss-poster
            #- git clone https://github.com/paviliondev/discourse-ratings
          - git clone https://github.com/discourse/discourse-data-explorer
          - git clone https://github.com/discourse/discourse-solved

## 构建后运行的任何自定义命令
run:
  - exec: echo "开始自定义命令"
  ## 如果您想设置首次注册的“发件人”邮箱地址,请取消注释并修改:
  ## 收到首次注册邮件后,请重新注释该行。它只需运行一次。
  #- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
  - exec: echo "结束自定义命令"

这是我的 app.yml,感谢您的帮助。

根据您之前的错误信息和 app.yml 来看,问题很可能出在您使用的 RSS 插件分支上。该插件中可能存在某些故障,从而导致了该问题。能否请您在禁用该插件后尝试重新构建?

2 个赞

@itsbhanusharma

如果我注释掉这个插件,插件页面就能正常工作。但在我将 Discourse 升级到最新版本之前,该插件一直运行正常,没有任何问题。

因此,我不确定这是由 Discourse 升级引起的,还是与多站点设置有关。

特别是,我发现
https://meta.discourse.org/t/discourse-subscriptions/140818/77?u=livc
在多站点环境下也遇到了相同的错误。

这个插件对我的网站非常重要,但我现在毫无头绪。:pensive:

如果您制作了这个插件,请尝试修复它。如果是别人为您构建的,请尝试联系他们以进行修复。

1 个赞