
Język 🇵🇱 Polski
Tło
Pierwsze kroki
Wdrażanie
Architektura
Instalacja i integracja
Wskazówki bezpieczeństwa
Hostowanie FastComments lokalnie (On-Prem)
FastComments oferuje kilka rozwiązań do wdrożenia. Najczęstszym jest przypadek, w którym hostujemy aplikację dla Ciebie.
Jednak rozumiemy, że niektórzy klienci nie mogą przechowywać swoich informacji w chmurze i wymagają hostowania wszystkich swoich danych na miejscu.
Niniejsza dokumentacja obejmuje ten przypadek użycia.
Co zawiera 
FastComments On Prem pozwala wdrożyć nasze rozwiązanie do komentowania na żywo, w tym wszystkie narzędzia do moderacji i administracji, na własnym sprzęcie.
To oznacza, że masz kontrolę nad swoimi danymi, a system komentowania może być ograniczony do twojej lokalnej sieci LAN lub sieci korporacyjnej.
Od czego zacząć 
Aby rozpocząć wdrażanie FastComments On Prem, skontaktuj się z nami.
Po skonfigurowaniu możesz zawsze pobrać najnowszy obraz Dockera ze strony licencji.
Instancje 
Wymagane komponenty
Dla On-Prem FastComments składa się tylko z serwera aplikacji i bazy danych. Uprościliśmy wdrożenie tak, aby aplikacja mogła obsługiwać cały ruch bezpośrednio, bez dodawania innych komponentów.
Serwer aplikacji jest dostarczany w obrazie Dockera i może być wdrożony przy użyciu dowolnego rozwiązania do zarządzania kontenerami.
Baza danych, MongoDB, może być uruchomiona samodzielnie lub hostowana przez innego dostawcę, np. AWS DocumentDB lub MongoDB Atlas.
FastComments jest obecnie testowany z MongoDB 7, jednak dążymy do zgodności z DocumentDB, aby ułatwić wdrożenie.
Rozmiary instancji
Zauważysz, że FastComments jest dość dobrze zoptymalizowany i nie wymaga dużych maszyn dla samej aplikacji, aby utrzymać niskie wartości P99.
Wszystkie zadania wsadowe i cron korzystają ze strumieniowania, aby ograniczyć całkowite zużycie pamięci.
Poniższe tabele dla serwera aplikacji i bazy danych mogą pomóc przy doborze rozmiarów.
Instancje serwera aplikacji
| Concurrent Users | Total Cluster CPUs | Total Cluster Memory |
|---|---|---|
| 100 | 1 | 256mb |
| 1K | 2 | 512mb |
| 10K | 8 | 1gb |
| 100K | 32 | 8gb |
| 1M | 64 | 64gb |
Na przykład pojedyncze jądro obsługujące około 100 wątków komentarzy na sekundę zwykle nigdy nie używa więcej niż 250mb RSS.
Instancje serwera bazy danych
Dobór rozmiaru bazy danych zależy od rozmiaru zestawu roboczego (working set), czyli ilości danych, do których uzyskujesz dostęp w danym momencie, a także od liczby równoczesnych żądań.
FastComments jest dość łagodny dla Mongo — dla gorących zapytań używa wskazówek indeksów, strumieniowych kursorów i ma limity współbieżności w różnych obszarach, aby zapobiec przeciążeniu systemów dalszego przetwarzania.
Poniżej znajduje się ogólna wskazówka dotycząca rozmiarów instancji bazy danych. Należy pamiętać, że dotyczy to na instancję, a nie łącznych zasobów w klastrze.
| Concurrent Users | Comments Stored | CPUs Per Instance | Memory Per Instance |
|---|---|---|---|
| 100 | 1k | 1 | 256mb |
| 1K | 5k | 2 | 512mb |
| 10K | 100k | 8 | 2gb |
| 100K | 500k | 16 | 8gb |
| 1M | 5M | 32 | 32gb |
Powyższe tabele to ostrożne szacunki. Rzeczywiste wymagania mogą się różnić w zależności od Twojej konfiguracji (rozmiary stron, wolumen komentarzy itp.).
Konfiguracja 
FastComments wykorzystuje zmienne środowiskowe do konfiguracji. Poniższa lista przedstawia wszystkie obsługiwane zmienne istotne dla wdrożeń On-Prem.
| Zmienna | Domyślna | Opis | Wymagane | Przykłady lub wartości |
|---|---|---|---|---|
| NODE_ENV | Typ środowiska. | Yes | production, dev | |
| MONGO_URI | URI połączenia z bazą danych. | Yes | ||
| MONGO_ENABLE_SSL | false | Aktywuje użycie SSL do połączenia z bazą danych. | No | true, false |
| MONGO_ENABLE_SSL_VALIDATE | false | Włącza walidację certyfikatu względem CA podczas łączenia z Mongo. | No | true, false |
| MONGO_SSL_CA | Plik PEM z CA dla SSL Mongo. | No | /path/to/some-cert.pem | |
| ADMIN_NOTIFICATIONS_EMAIL | Adres e-mail, na który powinny trafiać ważne powiadomienia systemowe. | No | admin-group@bigcorp.com | |
| IP_HASH_SALT | Sól do haszowania adresów IP. | Yes | ||
| SESSION_SECRET | Klucz używany do podpisywania sesji. | Yes | ||
| SESSION_STORE_SECRET | Klucz używany do podpisywania/haszowania sesji w przechowywaniu. Musi różnić się od SESSION_SECRET. | Yes | ||
| HOSTNAME | Nazwa hosta, na którym jest wdrożony FastComments (panel administracyjny itp.). NIE powinna zawierać numeru portu ani protokołu. | Yes | example.com | |
| HOST_ADDR | Dostępny URI, pod którym wdrożony jest FastComments (panel administracyjny itp.). | Yes | https://example.com | |
| EMAIL_CONFIG_PATH | Ścieżka w lokalnym systemie plików do pliku konfiguracyjnego e-mail (SMTP, mapowania domen/dostawców itp.). | Yes | /my/config.json | |
| EMAIL_DEFAULT_FROM_NAME | Robot FastComments | Nagłówek "From Name" w e-mailu. | No | My Company Name |
| EMAIL_DEFAULT_FOOTER_LOGO | /images/logo-32-2020-01.png | Logo w stopce e-maila. | No | https://exmaple.com/footer.png |
| EMAIL_DEFAULT_TRANSPORT | Zastąpienie wartości "defaultTransport" w EMAIL_CONFIG_PATH. Przydatne przy wdrażaniu tego samego pliku konfiguracyjnego w różnych środowiskach. | No | myTransportName | |
| ON_PREM_TENANT_ID | ID konta na fastcomments.com. Używane do zarejestrowania klucza licencyjnego. | No | ||
| ON_PREM_LICENSE_KEY | Klucz licencyjny on-prem. | No | ||
| GIPHY_API_KEY | Klucz API Giphy. Jeśli nie jest określony, powinieneś utworzyć regułę konfiguracyjną wyłączającą wybór gifów. | No | ||
| GIPHY_DEFAULT_RATING | pg | Używane w integracji z Giphy. Może być także nadpisane regułami dostosowania widgetu. | No | g, pg, pg-13, r |
| OPENAI_SECRET_KEY | Używane do funkcji opartych na OpenAI, np. opcjonalnego wykrywania spamu opartego na GPT. | No | ||
| CDN_HOST_ADDR | Nazwa hosta, z którego będą pobierane zasoby. Domyślnie wartość HOSTNAME. | No | example.com | |
| LARGE_FILE_HOST_ADDR | Nazwa hosta, z którego pobierane są duże pliki (np. eksporty). Domyślnie wartość CDN_HOST_ADDR. | No | example.com | |
| LARGE_FILE_LOCATION_TYPE | local_disk | Gdzie powinny być przechowywane duże pliki, takie jak eksporty. | No | local_disk, s3 |
| FROM_EMAIL_HOST | Nazwa hosta, z którego powinny być wysyłane e-maile. | No | example.com | |
| COOKIE_ID | fastcomments.sid | Nazwa ciasteczka fastcomments. | No | |
| COOKIE_HOSTNAME | .fastcomments.com | Wartość pola "hostname" w ciasteczku. Zalecane poprzedzenie kropką. | No | .example.com |
| S3_ACCESS_KEY | Używane do przesyłania plików użytkowników, avatarów itp. Domyślnie używany lokalny system plików, jeśli niezdefiniowane. | No | ||
| S3_SECRET_KEY | Używane do przesyłania plików użytkowników, avatarów itp. | No | ||
| S3_REGION | Używane do przesyłania plików użytkowników, avatarów itp. | No | ||
| S3_BUCKET | Używane do przesyłania plików użytkowników, avatarów itp. | No | ||
| S3_HOST | Używane do przesyłania plików użytkowników, avatarów itp. | No | ||
| CACHE_DIR | Lokalizacja do przechowywania opcjonalnego cache offline, na wypadek gdy DB jest niedostępna. Okresowo odświeżane z 100 najbardziej popularnymi wątkami komentarzy. | No | ||
| BACKUP_DIR | Lokalizacja do przechowywania danych na wypadek niedostępności DB. Jeśli komentarz zostanie przesłany, gdy DB jest niedostępna, trafia tutaj i jest przetwarzany później. | No |
Zauważ, że wszystkie zmienne związane z domenami używają końcówek _HOST lub _ADDR. Różnica to:
_HOST:example.com_ADDR:https://example.com
Ścieżka w EMAIL_CONFIG_PATH powinna wskazywać na plik JSON o następującym przykładowym formacie:

W powyższym przykładzie definiujemy domyślny transport e-mail SMTP o nazwie mailgun. Definiujemy także specjalny transport, którego używamy konkretnie dla e-maili @yahoo.com. W niektórych scenariuszach pożądane jest użycie określonego dostawcy lub adresu IP nadawcy dla danej domeny w celu dostrojenia dostarczalności. To jest opcjonalne.
DocumentDB
Podczas łączenia z DocumentDB warto ustawić MONGO_ENABLE_SSL=true MONGO_SSL_CA=/some/path.pem, aby być zgodnym z domyślnymi ustawieniami.
Przestoje bazy danych i tryb konserwacji 
FastComments obsługuje automatyczny tryb konserwacji. Jeśli baza danych przestanie działać, może nadal serwować popularne wątki komentarzy.
Dodatkowo, w trybie konserwacji wszystkie komentarze są zapisywane w BACKUP_DIR. Zostaną one przetworzone (sprawdzone pod kątem spamu itd.) i zapisane, gdy system wróci online.
Robi to, co godzinę, określając 100 najpopularniejszych wątków komentarzy i buforując ich zawartość na dysku. Określanie 100 najlepszych wątków jest już wykonywane na podstawie wstępnie obliczonego stanu, więc nie jest to ciężkie zadanie periodyczne.
To jest całkowicie opcjonalne i włączane tylko jeśli ustawione są CACHE_DIR i BACKUP_DIR. Oczywiście sprawia to, że węzły aplikacji stają się stanowe, jednak jest to stan, który może zostać utracony w dowolnym momencie bez powodowania niewłaściwego działania aplikacji.
Należy pamiętać, że w trybie konserwacji nie da się przeprowadzić właściwej autoryzacji wątków komentarzy, dlatego okresowo tworzony jest backup tylko tych wątków, które można bezpiecznie uznać za publiczne.
W trybie konserwacji wiele funkcji jest niedostępnych.
Blokady 
Jak każdy rozproszony system FastComments potrzebuje sposobu na blokowanie zasobów i procedur. Te blokady można monitorować za pomocą endpointu /locks-in-progress.
Na przykład, oto endpoint na naszym shardzie w USA.
To może być przydatne, aby zobaczyć, dlaczego system jest zawieszony lub obciążony. Jeśli na przykład SRE chce sprawdzić, dlaczego system doświadcza wysokiego obciążenia CPU, może sprawdzić ten endpoint, aby uzyskać nazwę nieprawidłowo działającego crona.
Kod widżetu 
Przykłady kodu front-end i biblioteki dla On-Prem są takie same jak w produkcie SaaS. Jednak musisz określić apiHost oraz poprawną ścieżkę do skryptu:

Powyższy przykład jest bardzo prosty. Możemy też użyć oficjalnych bibliotek dla React, Angular, Vue, Svelte itp.
API 
Do API można uzyskać dostęp tak jak do zwykłego produktu SaaS: należy zalogować się do panelu On-Prem, utworzyć klucze API i użyć ich do uzyskania dostępu do API.
Punkty końcowe API są takie same on-prem, jak w produkcie SaaS.
Wiele domen 
Twoja instalacja On-Prem FastComments może obsługiwać komentarze dla wielu wewnętrznych domen, na przykład app.mycorp.org i hr.mycorp.org. Możesz konfigurować je
oddzielnie, ale hostować je na jednej instalacji On-Prem, tworząc oddzielne Customization Rules, aby określić ich indywidualne zachowania.
Podsumowanie
Dokumentacja On Prem dobiegła końca. Daj nam znać, jakie masz dalsze uwagi lub pytania poniżej - możesz również skontaktować się z nami przez Stronę pomocy.