기타 서비스와 함께 Discourse를 호스팅하려면 RAM이 얼마나 필요할까요?

디스커스 포럼에서 1GB에서 최대 2GB의 메모리가 적당하다는 글을 읽었으나, 이 두 옵션으로는 웹사이트가 매끄럽게 실행되지 않습니다. 4GB 메모리로 docker-compose 파일을 실행하면 90~95%의 사용률을 기록하며, 이는 상당히 높은 수치입니다. docker-compose 파일에는 제가 만든 정적 HTML 웹사이트와 nginx 프록시가 포함되어 있습니다. 디스커스의 설정이나 트릭을 통해 낮은 RAM 환경에서도 더 원활하게 실행되도록 하는 방법이 있는지 알려주시면 감사하겠습니다.

워커 수와 DB 버퍼를 조정해야 합니다. 따라서 조정해야 할 옵션은 다음과 같습니다:

  • db_shared_buffers
  • UNICORN_WORKERS

여기서 각 Unicorn의 사용량 추정치를 확인할 수 있습니다.

Discourse는 512MB의 RAM으로도 실행할 수 있습니다. 경험은 좋지 않을 수 있지만, 불가능한 것은 아닙니다. 문제의 원인은 Discourse가 서버(즉, 전체 노드)의 리소스를 검토하여 가능한 한 많은 리소스를 활용하도록 리소스 사용 계획을 세우기 때문입니다. 이는 Discourse가 단독으로 실행된다고 가정하기 때문입니다.

적절한 제안을 드릴 수 있도록 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

원시 코드(raw code)를 ```로만 이루어진 줄로 감싸면 훨씬 가독성이 높아집니다.

첫 단계로, ./launcher를 사용하여 Discourse 인스턴스를 빌드하고 시작하는 것을 권장합니다. 원하신다면 ./launcher로 빌드한 후 docker-compose로 시작할 수도 있습니다(적어도 저는 kubernetes로 Discourse 이미지를 빌드하고 시작할 때 비슷한 방식을 사용했습니다).

bitnami 이미지를 사용 중이며, 이는 Discourse 유지보수팀에서 완전히 지원하지 않습니다. 또한 Discourse 공식 표준 설치를 사용하는 것보다 더 많은 RAM을 사용하게 될 가능성이 높습니다.

왜 비트나미 이미지가 여전히 그렇게 인기 있는 걸까?

답을 스스로 찾아보니, 비트나미가 결정론적인 빌드와 ENV 변수를 중심으로 한 가장 관용적인 Docker 옵션인 것 같다. Discourse는 기본적으로 Docker를 사용하지만, 터미널에 SSH로 접속해서 설정하고 유지보수해야 하는 전통적인 빌드 시스템을 위한 부트스트랩처럼 취급한다.

맞습니다. 여기서 도움을 받으려면 표준 설치를 따르세요. Bitnami의 도움이 필요하시면 그들의 이미지를 사용할 수 있습니다.

아마도 이 글을 읽어보시는 것이 좋을 것 같습니다: