FastComments.com

FastComments 온프레미스 호스팅

FastComments는 배포를 위한 여러 솔루션을 제공합니다. 가장 일반적인 경우는 우리가 호스팅하는 애플리케이션을 귀하를 위해.

하지만 일부 고객은 정보를 클라우드에 보관할 수 없으며, 모든 데이터를 온프레미스에 호스팅해야 합니다.

이 문서는 그 사용 사례를 다룹니다.

포함된 항목 Internal Link

FastComments On Prem은 당사의 모든 모더레이션 및 관리자 도구를 포함한 라이브 댓글 솔루션을 배포할 수 있게 해주며, 귀하의 자체 하드웨어에서 운영할 수 있습니다.

이는 귀하가 데이터에 대한 제어권을 가지며, 댓글 시스템을 로컬 LAN 또는 기업 네트워크로 제한할 수 있음을 의미합니다.

인스턴스 Internal Link

필수 구성 요소

온프레미스(온프렘) 환경의 경우, FastComments는 애플리케이션 서버와 데이터베이스로만 구성됩니다. 애플리케이션이 다른 구성 요소를 추가하지 않고 모든 트래픽을 직접 처리할 수 있도록 배포를 단순화했습니다.

애플리케이션 서버는 Docker 이미지로 제공되며 어떤 컨테이너 관리 솔루션으로도 배포할 수 있습니다.

데이터베이스인 MongoDB는 직접 운영할 수 있고 AWS DocumentDB나 MongoDB Atlas와 같은 다른 제공업체에서 호스팅할 수도 있습니다.

FastComments는 현재 MongoDB 7에서 테스트되고 있으며, 배포를 용이하게 하기 위해 DocumentDB 호환성을 목표로 하고 있습니다.

인스턴스 크기

FastComments는 상당히 최적화되어 있어 애플리케이션 자체는 낮은 P99를 유지하기 위해 큰 머신을 필요로 하지 않는다는 것을 알게 될 것입니다.

모든 배치 및 cron 작업은 총 메모리 사용량을 제한하기 위해 스트리밍을 사용합니다.

아래의 애플리케이션 서버 및 데이터베이스 표는 크기 결정을 도와줍니다.

애플리케이션 서버 인스턴스

동시 사용자총 클러스터 CPU 수총 클러스터 메모리
1001256mb
1K2512mb
10K81gb
100K328gb
1M6464gb

예를 들어, 초당 약 100개의 댓글 스레드를 처리하는 단일 코어는 보통 250mb RSS를 넘지 않습니다.

데이터베이스 서버 인스턴스

데이터베이스 크기 산정은 작업 집합 크기(특정 시점에 액세스하는 데이터 양)와 동시 요청 수에 따라 달라집니다.

FastComments는 Mongo에 대해 비교적 친절한 편으로, 핫 쿼리에는 인덱스 힌트(index hints), 스트리밍 커서(streaming cursors)를 사용하고 다운스트림 시스템의 과부하를 방지하기 위해 여러 영역에서 동시성 제한을 적용합니다.

아래는 데이터베이스 인스턴스 크기에 대한 일반적인 가이드라인입니다. 참고: 이것은 인스턴스당 리소스이며, 클러스터의 총 리소스가 아닙니다.

동시 사용자저장된 댓글 수인스턴스당 CPU 수인스턴스당 메모리
1001k1256mb
1K5k2512mb
10K100k82gb
100K500k168gb
1M5M3232gb

위 표는 보수적인 추정치입니다. 실제 요구 사항은 페이지 크기, 댓글량 등 특정 구성에 따라 다를 수 있습니다.

설정 Internal Link

FastComments는 구성에 환경 변수를 사용합니다. 다음 목록은 온프렘(On-Prem)에 관련된 모든 지원 변수를 설명합니다.

VariableDefaultInfoRequiredExamples or Valid Values
NODE_ENV환경 타입.production, dev
MONGO_URIDB 연결 URI.
MONGO_ENABLE_SSLfalse데이터베이스에 연결할 때 SSL 사용을 활성화합니다.아니오true, false
MONGO_ENABLE_SSL_VALIDATEfalseMongo에 연결할 때 CA에 대해 인증서를 검증하도록 활성화합니다.아니오true, false
MONGO_SSL_CAMongo SSL CA pem 파일.아니오/path/to/some-cert.pem
ADMIN_NOTIFICATIONS_EMAIL중요한 시스템 관련 알림을 받을 이메일 주소.아니오admin-group@bigcorp.com
IP_HASH_SALTIP 주소 해시를 위한 솔트.
SESSION_SECRET세션 서명에 사용되는 키.
SESSION_STORE_SECRET스토리지에 있는 세션을 서명/해시하는 데 사용되는 키. SESSION_SECRET와 달라야 합니다.
HOSTNAMEFastComments가 배포된 호스트명(관리 대시보드 등). 포트나 프로토콜을 포함하면 안 됩니다.example.com
HOST_ADDRFastComments가 배포된 접근 가능한 URI(관리 대시보드 등).https://example.com
EMAIL_CONFIG_PATH이메일 구성(SMTP, 도메인/제공자 매핑 등)이 위치한 로컬 파일 시스템의 경로./my/config.json
EMAIL_DEFAULT_FROM_NAMEFastComments Robot이메일 "From Name" 헤더.아니오My Company Name
EMAIL_DEFAULT_FOOTER_LOGO/images/logo-32-2020-01.png이메일 바닥글 로고.아니오https://exmaple.com/footer.png
EMAIL_DEFAULT_TRANSPORTEMAIL_CONFIG_PATH의 "defaultTransport"에 대한 오버라이드. 동일한 구성 파일을 다른 환경에 배포할 때 유용합니다.아니오myTransportName
ON_PREM_TENANT_IDfastcomments.com의 계정 ID. 라이선스 키를 등록하는 데 사용됩니다.아니오
ON_PREM_LICENSE_KEY온프렘 라이선스 키.아니오
GIPHY_API_KEYGiphy API 키. 지정하지 않으면 gif 선택기를 비활성화하는 구성 규칙을 만들어야 합니다.아니오
GIPHY_DEFAULT_RATINGpggiphy 통합에 사용됩니다. 위젯 커스터마이제이션 규칙으로도 재정의할 수 있습니다.아니오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_TYPElocal_disk내보내기와 같은 대용량 파일을 저장할 위치.아니오local_disk, s3
FROM_EMAIL_HOST이메일이 발송되는 호스트명.아니오example.com
COOKIE_IDfastcomments.sidfastcomments 쿠키의 이름.아니오
COOKIE_HOSTNAME.fastcomments.com쿠키의 "hostname" 필드 값. 접두사로 점을 권장합니다.아니오.example.com
S3_ACCESS_KEY사용자 파일 업로드, 아바타 등에 사용됩니다. 정의되지 않으면 로컬 파일 시스템이 기본입니다.아니오
S3_SECRET_KEY사용자 파일 업로드, 아바타 등에 사용됩니다.아니오
S3_REGION사용자 파일 업로드, 아바타 등에 사용됩니다.아니오
S3_BUCKET사용자 파일 업로드, 아바타 등에 사용됩니다.아니오
S3_HOST사용자 파일 업로드, 아바타 등에 사용됩니다.아니오
CACHE_DIRDB를 사용할 수 없을 때의 선택적 오프라인 캐시를 저장할 위치. 상위 100개 댓글 스레드로 주기적으로 갱신됩니다.아니오
BACKUP_DIRDB를 사용할 수 없을 때 데이터를 저장할 위치. 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:

이메일 구성
Copy Copy
1
2{
3 "defaultDKIM": {
4 "domainName": "mycompany.org",
5 "keySelector": "2024",
6 "privateKey": "-----BEGIN PRIVATE KEY-----\nABCDEFG\n-----END PRIVATE KEY-----"
7 },
8 "providerTransports": {
9 "yahoo.com": "specialTransport"
10 },
11 "defaultTransport": "mailgun",
12 "transports": {
13 "mailgun": {
14 "host": "smtp.mailgun.org",
15 "port": 587,
16 "secure": false,
17 "auth": {
18 "user": "admin@somewhere.com",
19 "pass": "password"
20 },
21 "tls": {
22 "ciphers": "SSLv3"
23 }
24 },
25 "specialTransport": {
26 "host": "smtp.someplace.org",
27 "port": 587,
28 "secure": false,
29 "auth": {
30 "user": "admin@example.com",
31 "pass": "password"
32 },
33 "tls": {
34 "ciphers": "SSLv3"
35 }
36 }
37 }
38}
39

위 예제에서는 mailgun이라는 기본 SMTP 이메일 트랜스포트를 정의합니다. 또한 @yahoo.com 이메일에 대해 특별히 사용하는 전용 트랜스포트도 정의합니다. 특정 도메인에 대해 전송 제공자나 발신 IP를 조정하여 전달률을 튜닝해야 하는 시나리오가 있을 수 있습니다. 이는 선택 사항입니다.

DocumentDB

DocumentDB에 연결할 때 기본 설정과 호환되도록 MONGO_ENABLE_SSL=true MONGO_SSL_CA=/some/path.pem을 지정하는 것이 좋습니다.


데이터베이스 다운타임 및 유지보수 모드 Internal Link

FastComments는 자동 유지관리 모드를 지원합니다. 데이터베이스가 다운되더라도 인기 있는 댓글 스레드는 계속 제공할 수 있습니다.

또한 유지관리 모드에서는 모든 댓글이 BACKUP_DIR에 저장됩니다. 시스템이 다시 온라인이 되면(스팸 검사 등) 처리되어 저장됩니다.

이는 매시간 상위 100개의 인기 댓글 스레드를 결정하고 해당 콘텐츠를 디스크에 캐시함으로써 이루어집니다. 상위 100개 스레드의 결정은 미리 계산된 상태에서 이미 수행되므로, 무거운 주기 작업이 아닙니다.

이것은 완전히 선택 사항이며 CACHE_DIRBACKUP_DIR가 설정된 경우에만 활성화됩니다. 물론 이것은 애플리케이션 노드를 상태적으로 만들지만, 이는 언제든지 손실되어도 애플리케이션이 오작동하지 않도록 하는 상태입니다.

유지관리 모드에서는 댓글 스레드의 적절한 인증을 수행할 수 없으므로, 안전하게 공개로 간주되는 스레드만 주기적으로 백업된다는 점에 유의하세요.

유지관리 모드에서는 많은 기능을 사용할 수 없습니다.

위젯 코드 Internal Link

온프레미스용 프런트엔드 코드 스니펫과 라이브러리는 SaaS 제품과 동일합니다. 그러나 apiHost와 올바른 스크립트 경로를 지정해야 합니다:

온프레미스용 댓글 코드
Copy Copy
1
2<script async src="https://my.host.com/js/embed-v2-async.min.js"></script>
3<div id="fastcomments-widget"></div>
4<script>
5 window.fcConfigs = [{
6 target: '#fastcomments-widget',
7 tenantId: "demo",
8 apiHost: "https://my.host.com"
9 // ... SSO 페이로드 등을 전달할 수도 있습니다.
10 }];
11</script>
12

위 예시는 매우 단순한 예입니다. 또한 1st-party React, Angular, Vue, Svelte 등 라이브러리를 사용할 수도 있습니다.

API Internal Link

API는 일반 SaaS 제품과 마찬가지로 액세스할 수 있습니다. On-Prem 대시보드에 로그인하여 API 키를 생성하고 해당 키로 API에 액세스하면 됩니다. 해당 API 엔드포인트는 on-prem과 SaaS 제품에서 동일합니다.

다중 도메인 Internal Link

귀하의 On-Prem FastComments 설치는 예를 들어 app.mycorp.orghr.mycorp.org와 같은 여러 내부 도메인에 댓글을 제공할 수 있습니다.

이 도메인들은 개별적으로 구성할 수 있으며, 각각의 동작을 설정하기 위해 별도의 Customization Rules를 만들어 하나의 On-Prem 설치에서 호스팅할 수 있습니다.

보안 Internal Link

기본적으로 FastComments는 댓글 스레드가 공개되어 있다고 가정합니다.

보안 수준을 높이려면 맞춤 규칙을 생성하되 Requires SSO 옵션을 선택하는 것이 권장됩니다. 이렇게 하면 모든 댓글 관련 엔드포인트가 SSO 인증을 요구하게 됩니다.

결론

On Prem 문서의 끝에 도달했습니다. 아래에 추가 의견이나 질문이 있으시면 알려주세요 - 또는 지원 페이지를 통해 저희에게 문의하실 수도 있습니다.