
언어 🇰🇷 한국어
배경
시작하기
배포
아키텍처
설치 및 통합
보안 팁
FastComments 온프레미스 호스팅
FastComments는 배포를 위한 여러 솔루션을 제공합니다. 가장 일반적인 경우는 우리가 호스팅하는 애플리케이션을 귀하를 위해.
하지만 일부 고객은 정보를 클라우드에 보관할 수 없으며, 모든 데이터를 온프레미스에 호스팅해야 합니다.
이 문서는 그 사용 사례를 다룹니다.
포함된 항목 
FastComments On Prem은 당사의 모든 모더레이션 및 관리자 도구를 포함한 라이브 댓글 솔루션을 배포할 수 있게 해주며, 귀하의 자체 하드웨어에서 운영할 수 있습니다.
이는 귀하가 데이터에 대한 제어권을 가지며, 댓글 시스템을 로컬 LAN 또는 기업 네트워크로 제한할 수 있음을 의미합니다.
인스턴스 
필수 구성 요소
온프레미스(온프렘) 환경의 경우, FastComments는 애플리케이션 서버와 데이터베이스로만 구성됩니다. 애플리케이션이 다른 구성 요소를 추가하지 않고 모든 트래픽을 직접 처리할 수 있도록 배포를 단순화했습니다.
애플리케이션 서버는 Docker 이미지로 제공되며 어떤 컨테이너 관리 솔루션으로도 배포할 수 있습니다.
데이터베이스인 MongoDB는 직접 운영할 수 있고 AWS DocumentDB나 MongoDB Atlas와 같은 다른 제공업체에서 호스팅할 수도 있습니다.
FastComments는 현재 MongoDB 7에서 테스트되고 있으며, 배포를 용이하게 하기 위해 DocumentDB 호환성을 목표로 하고 있습니다.
인스턴스 크기
FastComments는 상당히 최적화되어 있어 애플리케이션 자체는 낮은 P99를 유지하기 위해 큰 머신을 필요로 하지 않는다는 것을 알게 될 것입니다.
모든 배치 및 cron 작업은 총 메모리 사용량을 제한하기 위해 스트리밍을 사용합니다.
아래의 애플리케이션 서버 및 데이터베이스 표는 크기 결정을 도와줍니다.
애플리케이션 서버 인스턴스
| 동시 사용자 | 총 클러스터 CPU 수 | 총 클러스터 메모리 |
|---|---|---|
| 100 | 1 | 256mb |
| 1K | 2 | 512mb |
| 10K | 8 | 1gb |
| 100K | 32 | 8gb |
| 1M | 64 | 64gb |
예를 들어, 초당 약 100개의 댓글 스레드를 처리하는 단일 코어는 보통 250mb RSS를 넘지 않습니다.
데이터베이스 서버 인스턴스
데이터베이스 크기 산정은 작업 집합 크기(특정 시점에 액세스하는 데이터 양)와 동시 요청 수에 따라 달라집니다.
FastComments는 Mongo에 대해 비교적 친절한 편으로, 핫 쿼리에는 인덱스 힌트(index hints), 스트리밍 커서(streaming cursors)를 사용하고 다운스트림 시스템의 과부하를 방지하기 위해 여러 영역에서 동시성 제한을 적용합니다.
아래는 데이터베이스 인스턴스 크기에 대한 일반적인 가이드라인입니다. 참고: 이것은 인스턴스당 리소스이며, 클러스터의 총 리소스가 아닙니다.
| 동시 사용자 | 저장된 댓글 수 | 인스턴스당 CPU 수 | 인스턴스당 메모리 |
|---|---|---|---|
| 100 | 1k | 1 | 256mb |
| 1K | 5k | 2 | 512mb |
| 10K | 100k | 8 | 2gb |
| 100K | 500k | 16 | 8gb |
| 1M | 5M | 32 | 32gb |
위 표는 보수적인 추정치입니다. 실제 요구 사항은 페이지 크기, 댓글량 등 특정 구성에 따라 다를 수 있습니다.
설정 
FastComments는 구성에 환경 변수를 사용합니다. 다음 목록은 온프렘(On-Prem)에 관련된 모든 지원 변수를 설명합니다.
| Variable | Default | Info | Required | Examples or Valid Values |
|---|---|---|---|---|
| NODE_ENV | 환경 타입. | 예 | production, dev | |
| MONGO_URI | DB 연결 URI. | 예 | ||
| MONGO_ENABLE_SSL | false | 데이터베이스에 연결할 때 SSL 사용을 활성화합니다. | 아니오 | true, false |
| MONGO_ENABLE_SSL_VALIDATE | false | Mongo에 연결할 때 CA에 대해 인증서를 검증하도록 활성화합니다. | 아니오 | true, false |
| MONGO_SSL_CA | Mongo SSL CA pem 파일. | 아니오 | /path/to/some-cert.pem | |
| ADMIN_NOTIFICATIONS_EMAIL | 중요한 시스템 관련 알림을 받을 이메일 주소. | 아니오 | admin-group@bigcorp.com | |
| IP_HASH_SALT | IP 주소 해시를 위한 솔트. | 예 | ||
| SESSION_SECRET | 세션 서명에 사용되는 키. | 예 | ||
| SESSION_STORE_SECRET | 스토리지에 있는 세션을 서명/해시하는 데 사용되는 키. SESSION_SECRET와 달라야 합니다. | 예 | ||
| HOSTNAME | FastComments가 배포된 호스트명(관리 대시보드 등). 포트나 프로토콜을 포함하면 안 됩니다. | 예 | example.com | |
| HOST_ADDR | FastComments가 배포된 접근 가능한 URI(관리 대시보드 등). | 예 | https://example.com | |
| EMAIL_CONFIG_PATH | 이메일 구성(SMTP, 도메인/제공자 매핑 등)이 위치한 로컬 파일 시스템의 경로. | 예 | /my/config.json | |
| EMAIL_DEFAULT_FROM_NAME | FastComments Robot | 이메일 "From Name" 헤더. | 아니오 | My Company Name |
| EMAIL_DEFAULT_FOOTER_LOGO | /images/logo-32-2020-01.png | 이메일 바닥글 로고. | 아니오 | https://exmaple.com/footer.png |
| EMAIL_DEFAULT_TRANSPORT | EMAIL_CONFIG_PATH의 "defaultTransport"에 대한 오버라이드. 동일한 구성 파일을 다른 환경에 배포할 때 유용합니다. | 아니오 | myTransportName | |
| ON_PREM_TENANT_ID | fastcomments.com의 계정 ID. 라이선스 키를 등록하는 데 사용됩니다. | 아니오 | ||
| ON_PREM_LICENSE_KEY | 온프렘 라이선스 키. | 아니오 | ||
| GIPHY_API_KEY | Giphy API 키. 지정하지 않으면 gif 선택기를 비활성화하는 구성 규칙을 만들어야 합니다. | 아니오 | ||
| GIPHY_DEFAULT_RATING | pg | giphy 통합에 사용됩니다. 위젯 커스터마이제이션 규칙으로도 재정의할 수 있습니다. | 아니오 | g, pg, pg-13, r |
| OPENAI_SECRET_KEY | 선택적 GPT 기반 스팸 감지 같은 OpenAI 기반 기능에 사용됩니다. | 아니오 | ||
| CDN_HOST_ADDR | 에셋을 가져올 호스트명. 기본값은 HOSTNAME의 값입니다. | 아니오 | example.com | |
| LARGE_FILE_HOST_ADDR | 대용량 파일(내보내기 등)을 가져올 호스트명. 기본값은 CDN_HOST_ADDR의 값입니다. | 아니오 | example.com | |
| LARGE_FILE_LOCATION_TYPE | local_disk | 내보내기와 같은 대용량 파일을 저장할 위치. | 아니오 | local_disk, s3 |
| FROM_EMAIL_HOST | 이메일이 발송되는 호스트명. | 아니오 | example.com | |
| COOKIE_ID | fastcomments.sid | fastcomments 쿠키의 이름. | 아니오 | |
| COOKIE_HOSTNAME | .fastcomments.com | 쿠키의 "hostname" 필드 값. 접두사로 점을 권장합니다. | 아니오 | .example.com |
| S3_ACCESS_KEY | 사용자 파일 업로드, 아바타 등에 사용됩니다. 정의되지 않으면 로컬 파일 시스템이 기본입니다. | 아니오 | ||
| S3_SECRET_KEY | 사용자 파일 업로드, 아바타 등에 사용됩니다. | 아니오 | ||
| S3_REGION | 사용자 파일 업로드, 아바타 등에 사용됩니다. | 아니오 | ||
| S3_BUCKET | 사용자 파일 업로드, 아바타 등에 사용됩니다. | 아니오 | ||
| S3_HOST | 사용자 파일 업로드, 아바타 등에 사용됩니다. | 아니오 | ||
| CACHE_DIR | DB를 사용할 수 없을 때의 선택적 오프라인 캐시를 저장할 위치. 상위 100개 댓글 스레드로 주기적으로 갱신됩니다. | 아니오 | ||
| BACKUP_DIR | DB를 사용할 수 없을 때 데이터를 저장할 위치. DB가 사용 불가능할 때 댓글이 제출되면 여기에 저장되며 나중에 처리됩니다. | 아니오 |
모든 도메인 관련 변수는 _HOST 또는 _ADDR 접미사를 사용한다는 점에 유의하세요. 차이점은:
_HOST:example.com_ADDR:https://example.com
The EMAIL_CONFIG_PATH should contain a path to a JSON file with the following example format:

위 예제에서는 mailgun이라는 기본 SMTP 이메일 트랜스포트를 정의합니다. 또한 @yahoo.com 이메일에 대해 특별히 사용하는 전용 트랜스포트도 정의합니다. 특정 도메인에 대해 전송 제공자나 발신 IP를 조정하여 전달률을 튜닝해야 하는 시나리오가 있을 수 있습니다. 이는 선택 사항입니다.
DocumentDB
DocumentDB에 연결할 때 기본 설정과 호환되도록 MONGO_ENABLE_SSL=true MONGO_SSL_CA=/some/path.pem을 지정하는 것이 좋습니다.
데이터베이스 다운타임 및 유지보수 모드 
FastComments는 자동 유지관리 모드를 지원합니다. 데이터베이스가 다운되더라도 인기 있는 댓글 스레드는 계속 제공할 수 있습니다.
또한 유지관리 모드에서는 모든 댓글이 BACKUP_DIR에 저장됩니다. 시스템이 다시 온라인이 되면(스팸 검사 등) 처리되어 저장됩니다.
이는 매시간 상위 100개의 인기 댓글 스레드를 결정하고 해당 콘텐츠를 디스크에 캐시함으로써 이루어집니다. 상위 100개 스레드의 결정은 미리 계산된 상태에서 이미 수행되므로, 무거운 주기 작업이 아닙니다.
이것은 완전히 선택 사항이며 CACHE_DIR와 BACKUP_DIR가 설정된 경우에만 활성화됩니다. 물론 이것은 애플리케이션 노드를 상태적으로 만들지만, 이는
언제든지 손실되어도 애플리케이션이 오작동하지 않도록 하는 상태입니다.
유지관리 모드에서는 댓글 스레드의 적절한 인증을 수행할 수 없으므로, 안전하게 공개로 간주되는 스레드만 주기적으로 백업된다는 점에 유의하세요.
유지관리 모드에서는 많은 기능을 사용할 수 없습니다.
잠금 
어떤 분산 시스템과 마찬가지로 FastComments도 자원과 절차를 잠그는 방법이 필요합니다. 이러한 잠금은 /locks-in-progress 엔드포인트를 통해 모니터링할 수 있습니다.
예를 들어, 이것은 저희 미국 샤드의 엔드포인트입니다.
이것은 시스템이 멈췄거나 과부하 상태인 이유를 파악하는 데 유용할 수 있습니다. 만약 SRE가 시스템이 높은 CPU 부하를 겪는 이유를 알고 싶다면, 그들은 이 엔드포인트를 확인하여 잘못 작동하는 cron의 이름을 얻을 수 있습니다.
위젯 코드 
온프레미스용 프런트엔드 코드 스니펫과 라이브러리는 SaaS 제품과 동일합니다. 그러나 apiHost와 올바른 스크립트 경로를 지정해야 합니다:

위 예시는 매우 단순한 예입니다. 또한 1st-party React, Angular, Vue, Svelte 등 라이브러리를 사용할 수도 있습니다.
API 
API는 일반 SaaS 제품과 마찬가지로 액세스할 수 있습니다. On-Prem 대시보드에 로그인하여 API 키를 생성하고 해당 키로 API에 액세스하면 됩니다. 해당 API 엔드포인트는 on-prem과 SaaS 제품에서 동일합니다.
결론
On Prem 문서의 끝에 도달했습니다. 아래에 추가 의견이나 질문이 있으시면 알려주세요 - 또는 지원 페이지를 통해 저희에게 문의하실 수도 있습니다.