Hostuj relay Happier u siebie: SSO, mTLS i twoja własna baza danych
Happier jest na licencji MIT, a relay, przez który rozmawia każde urządzenie, to kontener, który możesz prowadzić sam. Ta strona jest listą kontrolek, które się z nim dostaje — co serwer egzekwuje, co przechowuje i co przekazuje twoim klientom w czasie działania.
Warto ustawić sobie kształt całości przed listą. Sesje działają na własnych komputerach twoich programistów, na CLI dostawców, które już mają. Relay przenosi wiadomości między tymi komputerami a ich telefonami, przeglądarkami i desktopami. To jedyny element, który musi być osiągalny z zewnątrz, i to ten element prosimy cię hostować.
Wszystko poniżej to konfiguracja serwera: zmienne środowiskowe na tym kontenerze, egzekwowane przez ten kontener, bez żadnej usługi prowadzonej przez Happier na tej drodze. Domyślna postawa świeżego serwera to przechowywanie szyfrowane end-to-end i otwarta rejestracja, przy założeniu, że większość osób stawia go za Tailscale. Jeśli czytasz tę stronę, prawie na pewno chcesz odwrotności drugiej połowy tego zdania.
Co ten szyfrowany tryb domyślny oznacza pod spodem — który klucz powstaje gdzie, co zostaje twojemu relayowi i które kolumny może odczytać bez klucza — opisuje architektura szyfrowania, napisana dla programisty, a nie dla ciebie. To strona, którą warto wysłać każdemu, kto pyta, co serwer widzi; ta zostaje przy tym, co możesz wyegzekwować.
SSO: organizacje GitHub, grupy OIDC i certyfikaty klienta
Tożsamość jest delegowana do tego, co już prowadzisz. Zadaniem Happier jest egzekwować ją przy każdym żądaniu, a nie tylko przy rejestracji, i pytać wciąż od nowa.
- Wymagaj dostawcy tożsamości, sprawdzanego przy każdym żądaniu
- Anonimowa rejestracja jest domyślnie włączona, bo większość osób hostujących u siebie stawia relay za Tailscale i na tym kończy. Wyłącz ją i zamiast tego wymagaj dostawcy tożsamości, a uprawnienie jest egzekwowane na każdej uwierzytelnionej trasie HTTP i przy handshake’u czasu rzeczywistego — nie tylko w drzwiach wejściowych. Żądanie od kogoś, kto już się nie kwalifikuje, jest odrzucane, a nie obniżane do niższych uprawnień.
- Logowanie przez GitHub, ograniczone do twoich organizacji
- Dopuść konkretne loginy albo wymagaj członkostwa w jednej lub kilku organizacjach GitHub, dopasowując dowolną z nich albo wszystkie. Zalecana ścieżka weryfikuje członkostwo przez GitHub App, a nie przez własny token OAuth użytkownika, więc dostęp nie przetrwa cofnięcia zgody przez programistę — i nie psuje się, kiedy ktoś ją cofnie.
- Logowanie jednokrotne OIDC, z regułami dostępu per dostawca
- Okta, Entra ID, Auth0, Keycloak, cokolwiek z dokumentem discovery. Każdy dostawca ma własne reguły dostępu: listę dozwolonych loginów, dopuszczone domeny e-mail, grupy, w których użytkownik musi być w co najmniej jednej, grupy, w których musi być we wszystkich. Jeśli twój IdP pomija grupy w tokenie i zwraca zamiast nich wskaźnik overage, Happier traktuje użytkownika jako niekwalifikującego się, a nie jako pozbawionego grup.
- Certyfikaty klienta mTLS z twojego MDM
- Zakończ mTLS na swoim reverse proxy i przekaż do Happier zweryfikowaną tożsamość. Odwzoruj ją z pola SAN email albo SAN UPN certyfikatu, żeby urządzenie rotujące certyfikat wciąż było tą samą osobą, i ogranicz ją listami dozwolonych wystawców i domen e-mail. Nieznane certyfikaty są odrzucane, chyba że celowo włączysz automatyczne zakładanie kont.
- Offboarding: członkostwo sprawdzane ponownie w interwale, który ustawisz
- Członkostwo jest sprawdzane ponownie w interwale, który ustawisz — domyślnie raz dziennie, aż do jednej minuty — a wynik jest buforowany w rekordzie tożsamości. Ciekawe ustawienie dotyczy tego, co się dzieje, gdy twój IdP jest nieosiągalny: domyślnie tryb permisywny albo tryb ścisły, w którym serwer odmawia dostępu, zamiast pozwolić, by nieaktualne sprawdzenie uprawnień zastąpiło aktualne.
Polityka przechowywania, retencja i baza danych, którą hostujesz
Kontrolki, o które audytor pyta w drugiej kolejności, gdy skończy z uwierzytelnianiem.
- Trzy polityki przechowywania, a domyślną jest ta ścisła
- Tylko szyfrowane end-to-end, co odrzuca zapisy jawnym tekstem i jest tym, co robi świeży serwer. Opcjonalne, gdzie decyduje konto albo sesja. Albo tylko jawny tekst, dla organizacji, które zarządzają szyfrowaniem na poziomie infrastruktury i chcą indeksowania po stronie serwera — realny kompromis, powiedziany wprost: przy tym ustawieniu serwer może odczytać przechowywaną treść.
- Okna retencji, które ustawiasz, egzekwowane bez czytania transkrypcji
- Domyślnie wyłączone: nie ustawiaj nic, a serwer trzyma sesje na zawsze. Włącz je, a reguła dla sesji jest celowo zachowawcza — drzewo sesji jest usuwane tylko wtedy, gdy jest nieaktywne według utrwalonej flagi, starsze niż próg według dwóch osobnych znaczników czasu i nieobserwowane jako żywe w pamięci, przy czym próg jest sprawdzany ponownie wewnątrz transakcji usuwania. Nigdy nie musi odszyfrować transkrypcji, żeby zdecydować.
- Wyłącz funkcje dla wszystkich naraz
- Głos, funkcje społecznościowe, przesyłanie zgłoszeń błędów, załączniki, wbudowany terminal, przekazywanie sesji, połączone usługi, wskaźniki limitów — każde z nich jest zmienną środowiskową na serwerze, ogłaszaną klientom w czasie działania. Klienci dostosowują się do tego, co serwer podaje jako dostępne, więc wyłączona możliwość jest w interfejsie nieobecna, a nie obecna i niedziałająca.
- Limity szybkości i endpoint diagnostyczny, który kontrolujesz
- Globalny limiter plus limity per trasa, każdy z własnym oknem i wybraną przez ciebie strategią klucza — po IP albo po użytkowniku z powrotem do IP, czego chcesz, gdy stu programistów dzieli jeden adres wyjściowy VPN. Migawka diagnostyczna serwera jest wyłączona, dopóki jej nie włączysz, a gdy ją włączysz, jest dostępna tylko dla właściciela.
- Obraz Dockera, z SQLite albo Postgresem pod spodem
- Publikowany obraz relay-server działa jako użytkownik bez uprawnień roota, z wbudowanym interfejsem webowym, domyślnie używa SQLite na jednym zamontowanym wolumenie i przyjmuje udokumentowane nadpisanie na Postgresa. MySQL też działa, z obrazu zbudowanego ze źródeł — gotowy obraz celowo pomija tego klienta. Przypnij niezmienny tag; obraz nie aktualizuje się sam.
Jeśli twoja organizacja ma zerową retencję danych
Jeśli czytasz tę stronę, być może trafiłeś już na tę ścianę z drugiej strony. Własna dokumentacja Remote Control od Anthropic jest jednoznaczna: organizacje z wymaganiami zgodności takimi jak Zero Data Retention nie mogą go włączyć. W tym stanie przełącznik w konsoli administracyjnej Claude Code jest wyszarzony, więc nie jest to coś, o czym Owner może zdecydować inaczej. Jest też niedostępne na Amazon Bedrock, na Agent Platform od Google Cloud i na Microsoft Foundry oraz wyłączone, gdy ruch jest kierowany na bramkę LLM zamiast na api.anthropic.com.
Nic z tego nie jest zarzutem. Remote Control trzyma transkrypcję sesji na serwerach Anthropic, żeby móc ją synchronizować między twoimi urządzeniami, a organizacja, która zakontraktowała zerową retencję, słusznie to wykluczyła. To po prostu inna odpowiedź na inne pytanie, a jeśli twoja organizacja jest w takiej sytuacji, relay prowadzony przez ciebie samego jest tym kształtem odpowiedzi, który zostaje.
Co dostaje dział zakupów: licencję MIT i obraz kontenera
MIT. Nie source-available, nie open core ze stosem uwierzytelniania za komercyjnym poziomem, nie AGPL. Wszystko na tej stronie jest w tym samym repozytorium co klient, na tej samej licencji, i nic z tego nie zależy od umowy z nami. Jeśli polityka twojej organizacji mówi, że copyleft nie wchodzi do budynku, nic tutaj tej polityki nie narusza.
Żadna z powyższych kontrolek nie stoi za zakupem: nie ma poziomu enterprise do kupienia ani liczby stanowisk do wynegocjowania dla którejkolwiek z nich. W zależności od twojego procesu zakupowego jest to albo uspokajająca, albo niepokojąca część tej strony. Dostajesz zamiast tego źródła, licencję MIT i obraz kontenera.
Postaw testowy relay i sprawdź, co egzekwuje
Uczciwa kolejność jest taka: postaw relay na hoście na jedno użycie, skieruj na niego jednego programistę i przeczytaj GET /v1/features, żeby zobaczyć dokładnie, co ten serwer ogłasza swoim klientom. Ta odpowiedź jest kontraktem i jest najszybszym sposobem potwierdzenia, że polityka, którą ustawiasz, jest polityką, której klienci faktycznie będą przestrzegać.
curl -fsSL https://happier.dev/install | bashPrzewodnik po wdrożeniu w Dockerze opisuje obraz, wolumen i nadpisanie na Postgresa. Referencja uwierzytelniania serwera opisuje każdą zmienną wymienioną powyżej, w tym receptury dla publicznego serwera wymagającego GitHub albo dostawcy OIDC.

