托管 discourse 及其他服务需要多少 RAM?

在 Discourse 论坛上,我读到 1GB 内存和最大 2GB 内存应该足够,但这两个选项都无法让我的网站流畅运行。当我在 4GB 内存上运行 docker-compose 文件时,其运行效率约为 90-95%,这已经很高了。docker-compose 文件中的其他内容包括我构建的一个静态 HTML 网站和一个 nginx 代理。请问您是否知道 Discourse 有什么技巧或设置,可以使其在更低内存下运行得更流畅?

您需要调整 worker 数量和数据库缓冲区。因此,您需要调整的配置选项如下:

  • db_shared_buffers
  • UNICORN_WORKERS

以下是每个 Unicorn 进程的资源使用估算:

Discourse 可以在 512MB 内存下运行,虽然体验不佳,但确实可行。您的问题是,Discourse 会检测服务器(即整个节点)的资源情况,并据此规划资源使用,以尽可能充分利用所有可用资源,因为它假设自己将独立运行。

1 个赞

您能在这里分享 docker-compose 文件吗?这样我们才能提供合适的建议。

这是 docker-compose 文件。由于无法发布超过 2 个链接,我不得不删除部分镜像链接,但内容应该完整了。DB 缓冲环境变量应该放在哪里?

version: '2'
services:
  nginx:
    image: ''
    #image: 'itshady/nginx'
    ports:
      - '80:80'
    depends_on:
      - discourse
  intellectus:
    image: '
#    image: 'itshady/intellectus'
    ports:
      - '90:80'
  postgresql:
    image: ''
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    volumes:
      #- './data/postgresql:/bitnami/postgresql'
      - 'postgresql_data:/bitnami/postgresql'
  redis:
    image: ''
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - 'redis_data:/bitnami'
  discourse:
    image: 'docker.io/bitnami/discourse:2-debian-10'        #2-debian-10
    ports:
      - '100:3000'
    depends_on:
      - postgresql
      - redis
    volumes:
      - './data/discourse:/bitnami'
    environment:
      - POSTGRESQL_HOST=postgresql
      - POSTGRESQL_ROOT_USER=postgres
      - POSTGRESQL_CLIENT_CREATE_DATABASE_NAME=bitnami_application
      - POSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME=bn_discourse
      - POSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD=bitnami1
      - DISCOURSE_POSTGRESQL_NAME=bitnami_application
      - DISCOURSE_POSTGRESQL_USERNAME=bn_discourse
      - DISCOURSE_POSTGRESQL_PASSWORD=bitnami1
      #- DISCOURSE_HOSTNAME=forums.intellectus.ca
      - DISCOURSE_HOSTNAME=${FORUM_URL}
      - DISCOURSE_EMAIL=
      - SMTP_HOST=
      - SMTP_PORT=
      - SMTP_USER=
      - SMTP_PASSWORD=
  sidekiq:
    image: 'docker.io/bitnami/discourse:2-debian-10'
    depends_on:
      - discourse
    volumes:
      - './data/discourse:/bitnami'
    command: 'nami start --foreground discourse-sidekiq'
    environment:
      - DISCOURSE_POSTGRESQL_NAME=bitnami_application
      - DISCOURSE_POSTGRESQL_USERNAME=bn_discourse
      - DISCOURSE_POSTGRESQL_PASSWORD=bitnami1
      - DISCOURSE_HOST=discourse
      - DISCOURSE_PORT=3000
      #- DISCOURSE_HOSTNAME=forums.intellectus.ca
      - DISCOURSE_HOSTNAME=${FORUM_URL}
      - SMTP_HOST=
      - SMTP_PORT=
      - SMTP_USER=
      - SMTP_PASSWORD=
volumes:
  postgresql_data:
    driver: local
#    external: true
  redis_data:
    driver: local
#    external: true
  discourse_data:
    driver: local
#    external: true

如果您用仅包含 ``` 的行将原始代码包裹起来,代码将更易阅读。

作为第一步,我建议您使用 ./launcher 来构建并启动您的 Discourse 实例。如果您愿意,也可以使用 ./launcher 进行构建,然后通过 docker-compose 启动(至少我曾做过类似操作,使用 Kubernetes 构建并启动 Discourse 镜像)。

1 个赞

您正在使用 Bitnami 镜像,这些镜像完全不受 Discourse 维护者支持,并且相比使用 Discourse 官方标准安装,可能会占用更多内存。

3 个赞

为什么 Bitnami 镜像仍然如此受欢迎?

自问自答,似乎 Bitnami 是唯一符合习惯的 Docker 选项,其构建是确定性的,并且以环境变量为中心。Discourse 默认使用 Docker,但更像是传统构建系统的引导程序,需要您通过 SSH 登录并从终端进行设置/维护。

1 个赞

没错。如果你想在这里获得帮助,请遵循标准安装。如果你想从 Bitnami 获得帮助,可以使用他们的镜像。

2 个赞

我猜你可能想读一下这个:

3 个赞