# Instalacja na własnym hostingu {#self-host-installation}
Oferujemy samodzielnie hostowaną wersję serwera Tuist dla organizacji, które
wymagają większej kontroli nad swoją infrastrukturą. Ta wersja umożliwia
hostowanie Tuist na własnej infrastrukturze, zapewniając bezpieczeństwo i
prywatność danych.
::: warning LICENSE REQUIRED
Samodzielny hosting Tuist wymaga prawnie ważnej płatnej licencji. Lokalna wersja
Tuist jest dostępna tylko dla organizacji korzystających z planu Enterprise.
Jeśli jesteś zainteresowany tą wersją, skontaktuj się z
[contact@tuist.dev](mailto:contact@tuist.dev).
:::
## Kadencja zwalniania {#release-cadence}
Wydajemy nowe wersje Tuist w sposób ciągły, w miarę jak nowe możliwe do wydania
zmiany trafiają na main. Stosujemy [semantic versioning](https://semver.org/),
aby zapewnić przewidywalne wersjonowanie i kompatybilność.
Główny komponent służy do oznaczania przełomowych zmian na serwerze Tuist, które
będą wymagały koordynacji z użytkownikami on-premise. Nie powinieneś oczekiwać,
że będziemy go używać, a jeśli zajdzie taka potrzeba, zapewniamy, że będziemy
współpracować z Tobą, aby przejście było płynne.
## Ciągłe wdrażanie {#continuous-deployment}
Zdecydowanie zalecamy skonfigurowanie potoku ciągłego wdrażania, który
automatycznie wdraża najnowszą wersję Tuist każdego dnia. Dzięki temu zawsze
będziesz mieć dostęp do najnowszych funkcji, ulepszeń i aktualizacji
zabezpieczeń.
Oto przykładowy przepływ pracy GitHub Actions, który codziennie sprawdza i
wdraża nowe wersje:
```yaml
name: Update Tuist Server
on:
schedule:
- cron: '0 3 * * *' # Run daily at 3 AM UTC
workflow_dispatch: # Allow manual runs
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Check and deploy latest version
run: |
# Your deployment commands here
# Example: docker pull ghcr.io/tuist/tuist:latest
# Deploy to your infrastructure
```
## Wymagania dotyczące czasu działania {#runtime-requirements}
W tej sekcji przedstawiono wymagania dotyczące hostowania serwera Tuist w
infrastrukturze użytkownika.
### Matryca zgodności {#compatibility-matrix}
Serwer Tuist został przetestowany i jest kompatybilny z następującymi
minimalnymi wersjami:
| Komponent | Wersja minimalna | Uwagi |
| ----------- | ---------------- | ----------------------------------------------- |
| PostgreSQL | 15 | Z rozszerzeniem TimescaleDB |
| TimescaleDB | 2.16.1 | Wymagane rozszerzenie PostgreSQL (przestarzałe) |
| ClickHouse | 25 | Wymagane do analizy |
::: warning TIMESCALEDB DEPRECATION
TimescaleDB jest obecnie wymaganym rozszerzeniem PostgreSQL dla serwera Tuist,
używanym do przechowywania danych szeregów czasowych i wysyłania zapytań.
Jednakże, **TimescaleDB jest przestarzałe** i zostanie usunięte jako wymagana
zależność w najbliższej przyszłości, ponieważ migrujemy całą funkcjonalność
szeregów czasowych do ClickHouse. Na razie upewnij się, że twoja instancja
PostgreSQL ma zainstalowaną i włączoną usługę TimescaleDB.
:::
### Uruchamianie zwirtualizowanych obrazów Docker {#running-dockervirtualized-images}
Dystrybuujemy serwer jako obraz [Docker](https://www.docker.com/) za
pośrednictwem [GitHub's Container
Registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry).
Aby go uruchomić, infrastruktura musi obsługiwać uruchamianie obrazów Docker.
Należy pamiętać, że większość dostawców infrastruktury obsługuje tę technologię,
ponieważ stała się ona standardowym kontenerem do dystrybucji i uruchamiania
oprogramowania w środowiskach produkcyjnych.
### Baza danych Postgres {#postgres-database}
Oprócz uruchomienia obrazów Docker, do przechowywania danych relacyjnych i
szeregów czasowych potrzebna będzie baza danych
[Postgres](https://www.postgresql.org/) z rozszerzeniem
[TimescaleDB](https://www.timescale.com/). Większość dostawców infrastruktury
posiada w swojej ofercie bazy danych Postgres (np.
[AWS](https://aws.amazon.com/rds/postgresql/) i [Google
Cloud](https://cloud.google.com/sql/docs/postgres)).
**Wymagane rozszerzenie TimescaleDB:** Tuist wymaga rozszerzenia TimescaleDB do
wydajnego przechowywania danych szeregów czasowych i wysyłania zapytań.
Rozszerzenie to jest używane do obsługi zdarzeń, analiz i innych funkcji
opartych na czasie. Upewnij się, że twoja instancja PostgreSQL ma zainstalowane
i włączone TimescaleDB przed uruchomieniem Tuist.
::: info MIGRATIONS
Punkt wejścia obrazu Docker automatycznie uruchamia wszelkie oczekujące migracje
schematów przed uruchomieniem usługi. Jeśli migracje nie powiodą się z powodu
braku rozszerzenia TimescaleDB, należy najpierw zainstalować je w bazie danych.
:::
### Baza danych ClickHouse {#clickhouse-database}
Tuist używa [ClickHouse](https://clickhouse.com/) do przechowywania i
wyszukiwania dużych ilości danych analitycznych. ClickHouse jest **wymagany**
dla funkcji takich jak build insights i będzie podstawową bazą danych szeregów
czasowych w miarę wycofywania TimescaleDB. Możesz wybrać, czy chcesz
samodzielnie hostować ClickHouse, czy skorzystać z ich hostowanej usługi.
::: info MIGRATIONS
Punkt wejścia obrazu Docker automatycznie uruchamia wszelkie oczekujące migracje
schematów ClickHouse przed uruchomieniem usługi.
:::
### Przechowywanie {#storage}
Potrzebne będzie również rozwiązanie do przechowywania plików (np. plików
binarnych frameworków i bibliotek). Obecnie obsługujemy dowolną pamięć masową
zgodną ze standardem S3.
## Konfiguracja {#configuration}
Konfiguracja usługi odbywa się w czasie wykonywania poprzez zmienne
środowiskowe. Biorąc pod uwagę wrażliwy charakter tych zmiennych, zalecamy ich
szyfrowanie i przechowywanie w bezpiecznych rozwiązaniach do zarządzania
hasłami. Zapewniamy, że Tuist obsługuje te zmienne z najwyższą starannością,
zapewniając, że nigdy nie są one wyświetlane w dziennikach.
::: info LAUNCH CHECKS
Niezbędne zmienne są weryfikowane podczas uruchamiania. Jeśli jakiejkolwiek
brakuje, uruchomienie nie powiedzie się, a komunikat o błędzie wyszczególni
brakujące zmienne.
:::
### Konfiguracja licencji {#license-configuration}
Jako użytkownik lokalny otrzymasz klucz licencyjny, który musisz ujawnić jako
zmienną środowiskową. Klucz ten służy do walidacji licencji i zapewnienia, że
usługa działa zgodnie z warunkami umowy.
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady |
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- | ----------------------------------------- |
| `TUIST_LICENSE` | Licencja udzielana po podpisaniu umowy o gwarantowanym poziomie usług | Tak* | | `******` |
| `TUIST_LICENSE_CERTIFICATE_BASE64` | **Wyjątkowa alternatywa dla `TUIST_LICENSE`**. Certyfikat publiczny zakodowany w Base64 do walidacji licencji offline w środowiskach, w których serwer nie może skontaktować się z usługami zewnętrznymi. Używaj tylko wtedy, gdy `TUIST_LICENSE` nie może być użyty | Tak* | | `LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...` |
\* Należy podać albo `TUIST_LICENSE` albo `TUIST_LICENSE_CERTIFICATE_BASE64`,
ale nie oba. W przypadku standardowych wdrożeń należy użyć `TUIST_LICENSE`.
::: warning EXPIRATION DATE
Licencje mają datę wygaśnięcia. Użytkownicy otrzymają ostrzeżenie podczas
korzystania z poleceń Tuist, które wchodzą w interakcję z serwerem, jeśli
licencja wygaśnie za mniej niż 30 dni. Jeśli jesteś zainteresowany odnowieniem
licencji, skontaktuj się z [contact@tuist.dev](mailto:contact@tuist.dev).
:::
### Konfiguracja środowiska podstawowego {#base-environment-configuration}
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady | |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `TUIST_APP_URL` | Podstawowy adres URL umożliwiający dostęp do instancji z Internetu | Tak | | https://tuist.dev | |
| `TUIST_SECRET_KEY_BASE` | Klucz używany do szyfrowania informacji (np. sesji w pliku cookie). | Tak | | | `c5786d9f869239cbddeca645575349a570ffebb332b64400c37256e1c9cb7ec831345d03dc0188edd129d09580d8cbf3ceaf17768e2048c037d9c31da5dcacfa` |
| `TUIST_SECRET_KEY_PASSWORD` | Pepper do generowania hashowanych haseł | Nie | `$TUIST_SECRET_KEY_BASE` | | |
| `TUIST_SECRET_KEY_TOKENS` | Tajny klucz do generowania losowych tokenów | Nie | `$TUIST_SECRET_KEY_BASE` | | |
| `TUIST_SECRET_KEY_ENCRYPTION` | 32-bajtowy klucz do szyfrowania poufnych danych AES-GCM | Nie | `$TUIST_SECRET_KEY_BASE` | | |
| `TUIST_USE_IPV6` | Gdy `1` konfiguruje aplikację do korzystania z adresów IPv6 | Nie | `0` | `1` | |
| `TUIST_LOG_LEVEL` | Poziom dziennika używany przez aplikację | Nie | `info` | [Poziomy dziennika](https://hexdocs.pm/logger/1.12.3/Logger.html#module-levels) | |
| `TUIST_GITHUB_APP_NAME` | Wersja adresu URL nazwy aplikacji GitHub | Nie | | `my-app` | |
| `TUIST_GITHUB_APP_PRIVATE_KEY_BASE64` | Zakodowany w base64 klucz prywatny używany w aplikacji GitHub do odblokowywania dodatkowych funkcji, takich jak publikowanie automatycznych komentarzy PR. | Nie | `LS0tLS1CRUdJTiBSU0EgUFJJVkFUR...` | | |
| `TUIST_GITHUB_APP_PRIVATE_KEY` | Klucz prywatny używany w aplikacji GitHub do odblokowywania dodatkowych funkcji, takich jak publikowanie automatycznych komentarzy PR. **Zalecamy użycie wersji zakodowanej w base64, aby uniknąć problemów ze znakami specjalnymi.** | Nie | `-----BEGIN RSA...` | | |
| `TUIST_OPS_USER_HANDLES` | Rozdzielana przecinkami lista uchwytów użytkowników, którzy mają dostęp do adresów URL operacji. | Nie | | `user1,user2` | |
| `TUIST_WEB` | Włącz punkt końcowy serwera WWW | Nie | `1` | `1` lub `0` | |
### Konfiguracja bazy danych {#database-configuration}
Następujące zmienne środowiskowe są używane do konfiguracji połączenia z bazą
danych:
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | --------- | ---------------------------------------------------------------------- |
| `DATABASE_URL` | Adres URL dostępu do bazy danych Postgres. Należy pamiętać, że adres URL powinien zawierać informacje uwierzytelniające | Tak | | `postgres://username:password@cloud.us-east-2.aws.test.com/production` |
| `TUIST_CLICKHOUSE_URL` | Adres URL dostępu do bazy danych ClickHouse. Należy pamiętać, że adres URL powinien zawierać informacje uwierzytelniające | Nie | | `http://username:password@cloud.us-east-2.aws.test.com/production` |
| `TUIST_USE_SSL_FOR_DATABASE` | Gdy wartość ta jest prawdziwa, do połączenia z bazą danych używany jest protokół [SSL](https://en.wikipedia.org/wiki/Transport_Layer_Security). | Nie | `1` | `1` |
| `TUIST_DATABASE_POOL_SIZE` | Liczba połączeń, które mają pozostać otwarte w puli połączeń | Nie | `10` | `10` |
| `TUIST_DATABASE_QUEUE_TARGET` | Interwał (w milisekundach) sprawdzania, czy wszystkie połączenia wyewidencjonowane z puli zajęły więcej niż interwał kolejki [(Więcej informacji)](https://hexdocs.pm/db_connection/DBConnection.html#start_link/2-queue-config) | Nie | `300` | `300` |
| `TUIST_DATABASE_QUEUE_INTERVAL` | Czas progowy (w milisekundach) w kolejce, którego pula używa do określenia, czy powinna zacząć odrzucać nowe połączenia [(Więcej informacji)](https://hexdocs.pm/db_connection/DBConnection.html#start_link/2-queue-config) | Nie | `1000` | `1000` |
| `TUIST_CLICKHOUSE_FLUSH_INTERVAL_MS` | Odstęp czasu w milisekundach pomiędzy kolejnymi opróżnieniami bufora ClickHouse | Nie | `5000` | `5000` |
| `TUIST_CLICKHOUSE_MAX_BUFFER_SIZE` | Maksymalny rozmiar bufora ClickHouse w bajtach przed wymuszeniem spłukiwania | Nie | `1000000` | `1000000` |
| `TUIST_CLICKHOUSE_BUFFER_POOL_SIZE` | Liczba procesów bufora ClickHouse do uruchomienia | Nie | `5` | `5` |
### Konfiguracja środowiska uwierzytelniania {#authentication-environment-configuration}
Ułatwiamy uwierzytelnianie za pośrednictwem [dostawców tożsamości
(IdP)](https://en.wikipedia.org/wiki/Identity_provider). Aby z tego skorzystać,
należy upewnić się, że wszystkie niezbędne zmienne środowiskowe dla wybranego
dostawcy są obecne w środowisku serwera. **Brak zmiennych** spowoduje, że Tuist
ominie tego dostawcę.
#### GitHub {#github}
Zalecamy uwierzytelnianie za pomocą aplikacji [GitHub
App](https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps),
ale można również użyć aplikacji [OAuth
App](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app).
Upewnij się, że w środowisku serwera znajdują się wszystkie istotne zmienne
środowiskowe określone przez GitHub. Brak zmiennych spowoduje, że Tuist przeoczy
uwierzytelnianie GitHub. Aby poprawnie skonfigurować aplikację GitHub:
- W ustawieniach ogólnych aplikacji GitHub:
- Skopiuj identyfikator klienta `` i ustaw go jako
`TUIST_GITHUB_APP_CLIENT_ID.`
- Utwórz i skopiuj nowy sekret klienta `` i ustaw go jako
`TUIST_GITHUB_APP_CLIENT_SECRET`
- Ustaw adres URL wywołania zwrotnego `` jako
`http://YOUR_APP_URL/users/auth/github/callback`. `YOUR_APP_URL` może być
również adresem IP serwera.
- Wymagane są następujące uprawnienia:
- Repozytoria:
- Żądania ściągnięcia: Odczyt i zapis
- Konta:
- Adresy e-mail: Tylko do odczytu
W sekcji `Uprawnienia i zdarzenia`'s `Uprawnienia konta` ustaw uprawnienie
`Adresy e-mail` na `Tylko do odczytu`.
Następnie należy ujawnić następujące zmienne środowiskowe w środowisku, w którym
działa serwer Tuist:
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady |
| -------------------------------- | -------------------------------------- | -------- | -------- | ------------------------------------------ |
| `TUIST_GITHUB_APP_CLIENT_ID` | Identyfikator klienta aplikacji GitHub | Tak | | `Iv1.a629723000043722` |
| `TUIST_GITHUB_APP_CLIENT_SECRET` | Sekret klienta aplikacji | Tak | | `232f972951033b89799b0fd24566a04d83f44ccc` |
#### Google {#google}
Możesz skonfigurować uwierzytelnianie w Google przy użyciu [OAuth
2](https://developers.google.com/identity/protocols/oauth2). W tym celu należy
utworzyć nowe poświadczenia typu OAuth client ID. Podczas tworzenia poświadczeń
wybierz "Aplikacja internetowa" jako typ aplikacji, nazwij ją `Tuist` i ustaw
URI przekierowania na `{base_url}/users/auth/google/callback` gdzie `base_url`
to adres URL, pod którym działa hostowana usługa. Po utworzeniu aplikacji
skopiuj identyfikator klienta i sekret i ustaw je odpowiednio jako zmienne
środowiskowe `GOOGLE_CLIENT_ID` i `GOOGLE_CLIENT_SECRET`.
::: info CONSENT SCREEN SCOPES
Może być konieczne utworzenie ekranu zgody. W tym celu należy dodać zakresy
`userinfo.email` i `openid` oraz oznaczyć aplikację jako wewnętrzną.
:::
#### Okta {#okta}
Możesz włączyć uwierzytelnianie w Okta za pomocą protokołu [OAuth
2.0](https://oauth.net/2/). Będziesz musiał [utworzyć
aplikację](https://developer.okta.com/docs/en/guides/implement-oauth-for-okta/main/#create-an-oauth-2-0-app-in-okta)
w Okta zgodnie z tymi instrukcjami.
Po uzyskaniu identyfikatora klienta i hasła tajnego podczas konfigurowania
aplikacji Okta należy ustawić następujące zmienne środowiskowe:
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady |
| ---------------------------- | -------------------------------------------------------------------------------------------------------- | -------- | -------- | --------- |
| `TUIST_OKTA_1_CLIENT_ID` | Identyfikator klienta do uwierzytelniania w usłudze Okta. Numer powinien być identyfikatorem organizacji | Tak | | |
| `TUIST_OKTA_1_CLIENT_SECRET` | Klucz tajny klienta do uwierzytelniania w usłudze Okta | Tak | | |
Numer `1` należy zastąpić identyfikatorem organizacji. Zazwyczaj będzie to 1,
ale należy to sprawdzić w bazie danych.
### Konfiguracja środowiska pamięci masowej {#storage-environment-configuration}
Tuist potrzebuje pamięci masowej do przechowywania artefaktów przesłanych za
pośrednictwem interfejsu API.** Aby aplikacja Tuist działała efektywnie,
konieczne jest skonfigurowanie jednego z obsługiwanych rozwiązań pamięci masowej
**.
#### Magazyny zgodne z S3 {#s3compliant-storages}
Do przechowywania artefaktów można użyć dowolnego dostawcy pamięci masowej
zgodnego z S3. Do uwierzytelnienia i skonfigurowania integracji z dostawcą
magazynu wymagane są następujące zmienne środowiskowe:
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady |
| -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------- | ------------------------------------------------------------- |
| `TUIST_S3_ACCESS_KEY_ID` lub `AWS_ACCESS_KEY_ID` | Identyfikator klucza dostępu do uwierzytelniania względem dostawcy pamięci masowej | Tak | | `AKIAIOSFOD` |
| `TUIST_S3_SECRET_ACCESS_KEY` lub `AWS_SECRET_ACCESS_KEY` | Tajny klucz dostępu do uwierzytelniania wobec dostawcy pamięci masowej | Tak | | `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY` |
| `TUIST_S3_REGION` lub `AWS_REGION` | Region, w którym znajduje się zasobnik | Nie | `auto` | `us-west-2` |
| `TUIST_S3_ENDPOINT` lub `AWS_ENDPOINT` | Punkt końcowy dostawcy pamięci masowej | Tak | | `https://s3.us-west-2.amazonaws.com` |
| `TUIST_S3_BUCKET_NAME` | Nazwa zasobnika, w którym przechowywane będą artefakty. | Tak | | `tuist-artefakty` |
| `TUIST_S3_CA_CERT_PEM` | Certyfikat CA zakodowany w PEM do weryfikacji połączeń S3 HTTPS. Przydatne w środowiskach z izolacją powietrzną z samopodpisanymi certyfikatami lub wewnętrznymi urzędami certyfikacji. | Nie | Pakiet CA systemu | `-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----` |
| `TUIST_S3_CONNECT_TIMEOUT` | Czas oczekiwania (w milisekundach) na nawiązanie połączenia z dostawcą pamięci masowej. | Nie | `3000` | `3000` |
| `TUIST_S3_RECEIVE_TIMEOUT` | Limit czasu (w milisekundach) na odebranie danych od dostawcy pamięci masowej. | Nie | `5000` | `5000` |
| `TUIST_S3_POOL_TIMEOUT` | Limit czasu (w milisekundach) dla puli połączeń z dostawcą pamięci masowej. Użyj `nieskończoność` dla braku limitu czasu | Nie | `5000` | `5000` |
| `TUIST_S3_POOL_MAX_IDLE_TIME` | Maksymalny czas bezczynności (w milisekundach) dla połączeń w puli. Użyj `infinity`, aby utrzymać połączenia przy życiu w nieskończoność | Nie | `nieskończoność` | `60000` |
| `TUIST_S3_POOL_SIZE` | Maksymalna liczba połączeń na pulę | Nie | `500` | `500` |
| `TUIST_S3_POOL_COUNT` | Liczba pul połączeń do użycia | Nie | Liczba harmonogramów systemowych | `4` |
| `TUIST_S3_PROTOCOL` | Protokół używany podczas łączenia się z dostawcą pamięci masowej (`http1` lub `http2`). | Nie | `http1` | `http1` |
| `TUIST_S3_VIRTUAL_HOST` | Czy adres URL powinien być skonstruowany z nazwą zasobnika jako subdomena (host wirtualny)? | Nie | `fałszywy` | `1` |
::: info AWS authentication with Web Identity Token from environment variables
Jeśli dostawcą pamięci masowej jest AWS i chcesz uwierzytelniać się za pomocą
tokena tożsamości sieciowej, możesz ustawić zmienną środowiskową
`TUIST_S3_AUTHENTICATION_METHOD` na `aws_web_identity_token_from_env_vars`, a
Tuist użyje tej metody przy użyciu konwencjonalnych zmiennych środowiskowych
AWS.
:::
#### Google Cloud Storage {#google-cloud-storage}
W przypadku Google Cloud Storage należy postępować zgodnie z [tymi
dokumentami](https://cloud.google.com/storage/docs/authentication/managing-hmackeys),
aby uzyskać parę `AWS_ACCESS_KEY_ID` i `AWS_SECRET_ACCESS_KEY`. Zmienna
`AWS_ENDPOINT` powinna być ustawiona na `https://storage.googleapis.com`. Inne
zmienne środowiskowe są takie same, jak w przypadku każdego innego magazynu
zgodnego z S3.
### Konfiguracja poczty e-mail {#email-configuration}
Tuist wymaga funkcji poczty e-mail do uwierzytelniania użytkowników i
powiadomień transakcyjnych (np. resetowania hasła, powiadomień o koncie).
Obecnie **obsługuje tylko Mailgun** jako dostawcę poczty e-mail.
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady |
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------------------------------------------------------------------------------- | ------------------------- |
| `TUIST_MAILGUN_API_KEY` | Klucz API do uwierzytelniania w Mailgun | Tak* | | `key-1234567890abcdef` |
| `TUIST_MAILING_DOMAIN` | Domena, z której będą wysyłane wiadomości e-mail | Tak* | | `mg.tuist.io` |
| `TUIST_MAILING_FROM_ADDRESS` | Adres e-mail, który pojawi się w polu "Od". | Tak* | | `noreply@tuist.io` |
| `TUIST_MAILING_REPLY_TO_ADDRESS` | Opcjonalny adres reply-to dla odpowiedzi użytkownika | Nie | | `support@tuist.dev` |
| `TUIST_SKIP_EMAIL_CONFIRMATION` | Pomiń potwierdzenie e-mail dla rejestracji nowych użytkowników. Po włączeniu tej opcji użytkownicy są automatycznie potwierdzani i mogą zalogować się natychmiast po rejestracji. | Nie | `true` jeśli email nie jest skonfigurowany, `false` jeśli email jest skonfigurowany | `true`, `false`, `1`, `0` |
\* Zmienne konfiguracyjne e-mail są wymagane tylko wtedy, gdy chcesz wysyłać
wiadomości e-mail. Jeśli nie zostaną skonfigurowane, potwierdzenie e-mail
zostanie automatycznie pominięte
::: info SMTP SUPPORT
Ogólna obsługa SMTP nie jest obecnie dostępna. Jeśli potrzebujesz wsparcia SMTP
dla swojego lokalnego wdrożenia, skontaktuj się z
[contact@tuist.dev](mailto:contact@tuist.dev), aby omówić swoje wymagania.
:::
::: info AIR-GAPPED DEPLOYMENTS
W przypadku instalacji lokalnych bez dostępu do Internetu lub konfiguracji
dostawcy poczty e-mail, potwierdzenie e-mail jest domyślnie automatycznie
pomijane. Użytkownicy mogą zalogować się natychmiast po rejestracji. Jeśli masz
skonfigurowaną pocztę e-mail, ale nadal chcesz pominąć potwierdzenie, ustaw
`TUIST_SKIP_EMAIL_CONFIRMATION=true`. Aby wymagać potwierdzenia e-mailem, gdy
e-mail jest skonfigurowany, ustaw `TUIST_SKIP_EMAIL_CONFIRMATION=false`.
:::
### Konfiguracja platformy Git {#git-platform-configuration}
Tuist może integrować się z platformami Git, aby zapewnić dodatkowe funkcje, takie jak
automatyczne publikowanie komentarzy w pull requestach.
#### GitHub {#platform-github}
Konieczne będzie [utworzenie aplikacji
GitHub](https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps).
Możesz ponownie użyć tej, którą utworzyłeś do uwierzytelniania, chyba że
utworzyłeś aplikację OAuth GitHub. W sekcji `Uprawnienia i zdarzenia`'s
`Uprawnienia repozytorium` należy dodatkowo ustawić uprawnienie `Żądania
ściągnięcia` na `Odczyt i zapis`.
Oprócz `TUIST_GITHUB_APP_CLIENT_ID` i `TUIST_GITHUB_APP_CLIENT_SECRET` potrzebne
będą następujące zmienne środowiskowe:
| Zmienna środowiskowa | Opis | Wymagane | Domyślne | Przykłady |
| ------------------------------ | ------------------------------- | -------- | -------- | ------------------------------------ |
| `TUIST_GITHUB_APP_PRIVATE_KEY` | Klucz prywatny aplikacji GitHub | Tak | | `-----BEGIN RSA PRIVATE KEY-----...` |
## Lokalne testy {#testing-locally}
Zapewniamy kompleksową konfigurację Docker Compose, która obejmuje wszystkie
wymagane zależności do testowania serwera Tuist na komputerze lokalnym przed
wdrożeniem w infrastrukturze:
- PostgreSQL 15 z rozszerzeniem TimescaleDB 2.16 (przestarzałe)
- ClickHouse 25 dla analityków
- ClickHouse Keeper do koordynacji
- MinIO dla pamięci masowej kompatybilnej z S3
- Redis do trwałego przechowywania KV między wdrożeniami (opcjonalnie)
- pgweb do administrowania bazami danych
::: danger LICENSE REQUIRED
Ważna zmienna środowiskowa `TUIST_LICENSE` jest prawnie wymagana do uruchomienia
serwera Tuist, w tym lokalnych instancji programistycznych. Jeśli potrzebujesz
licencji, skontaktuj się z [contact@tuist.dev](mailto:contact@tuist.dev).
:::
**Szybki start:**
1. Pobierz pliki konfiguracyjne:
```bash
curl -O https://docs.tuist.io/server/self-host/docker-compose.yml
curl -O https://docs.tuist.io/server/self-host/clickhouse-config.xml
curl -O https://docs.tuist.io/server/self-host/clickhouse-keeper-config.xml
curl -O https://docs.tuist.io/server/self-host/.env.example
```
2. Konfiguracja zmiennych środowiskowych:
```bash
cp .env.example .env
# Edit .env and add your TUIST_LICENSE and authentication credentials
```
3. Uruchom wszystkie usługi:
```bash
docker compose up -d
# or with podman:
podman compose up -d
```
4. Dostęp do serwera pod adresem http://localhost:8080
**Punkty końcowe usługi:**
- Serwer Tuist: http://localhost:8080
- MinIO Console: http://localhost:9003 (poświadczenia: `tuist` /
`tuist_dev_password`)
- MinIO API: http://localhost:9002
- pgweb (PostgreSQL UI): http://localhost:8081
- Prometheus Metrics: http://localhost:9091/metrics
- ClickHouse HTTP: http://localhost:8124
**Wspólne polecenia:**
Sprawdź status usługi:
```bash
docker compose ps
# or: podman compose ps
```
Wyświetlanie dzienników:
```bash
docker compose logs -f tuist
```
Zatrzymaj usługi:
```bash
docker compose down
```
Zresetuj wszystko (usuwa wszystkie dane):
```bash
docker compose down -v
```
**Pliki konfiguracyjne:**
- [docker-compose.yml](/server/self-host/docker-compose.yml) - Pełna
konfiguracja Docker Compose
- [clickhouse-config.xml](/server/self-host/clickhouse-config.xml) -
Konfiguracja ClickHouse
- [clickhouse-keeper-config.xml](/server/self-host/clickhouse-keeper-config.xml)
- Konfiguracja ClickHouse Keeper
- [.env.example](/server/self-host/.env.example) - Przykładowy plik zmiennych
środowiskowych
## Wdrożenie {#deployment}
Oficjalny obraz Tuist Docker dostępny jest pod adresem:
```
ghcr.io/tuist/tuist
```
### Pobieranie obrazu Docker {#pulling-the-docker-image}
Obraz można pobrać, wykonując następujące polecenie:
```bash
docker pull ghcr.io/tuist/tuist:latest
```
Lub pobrać określoną wersję:
```bash
docker pull ghcr.io/tuist/tuist:0.1.0
```
### Wdrażanie obrazu Docker {#deploying-the-docker-image}
Proces wdrażania obrazu Docker będzie różnił się w zależności od wybranego
dostawcy chmury i podejścia organizacji do ciągłego wdrażania. Ponieważ
większość rozwiązań i narzędzi chmurowych, takich jak
[Kubernetes](https://kubernetes.io/), wykorzystuje obrazy Docker jako podstawowe
jednostki, przykłady w tej sekcji powinny dobrze pasować do istniejącej
konfiguracji.
::: warning
Jeśli potok wdrażania wymaga sprawdzenia, czy serwer jest uruchomiony, można
wysłać żądanie HTTP `GET` do `/ready` i potwierdzić kod stanu `200` w
odpowiedzi.
:::
#### Latać {#fly}
Aby wdrożyć aplikację na platformie [Fly](https://fly.io/), potrzebny będzie
plik konfiguracyjny `fly.toml`. Rozważ wygenerowanie go dynamicznie w ramach
potoku Continuous Deployment (CD). Poniżej znajduje się przykład referencyjny:
```toml
app = "tuist"
primary_region = "fra"
kill_signal = "SIGINT"
kill_timeout = "5s"
[experimental]
auto_rollback = true
[env]
# Your environment configuration goes here
# Or exposed through Fly secrets
[processes]
app = "/usr/local/bin/hivemind /app/Procfile"
[[services]]
protocol = "tcp"
internal_port = 8080
auto_stop_machines = false
auto_start_machines = false
processes = ["app"]
http_options = { h2_backend = true }
[[services.ports]]
port = 80
handlers = ["http"]
force_https = true
[[services.ports]]
port = 443
handlers = ["tls", "http"]
[services.concurrency]
type = "connections"
hard_limit = 100
soft_limit = 80
[[services.http_checks]]
interval = 10000
grace_period = "10s"
method = "get"
path = "/ready"
protocol = "http"
timeout = 2000
tls_skip_verify = false
[services.http_checks.headers]
[[statics]]
guest_path = "/app/public"
url_prefix = "/"
```
Następnie można uruchomić `fly launch --local-only --no-deploy`, aby uruchomić
aplikację. Przy kolejnych wdrożeniach, zamiast uruchamiać `fly launch
--local-only`, należy uruchomić `fly deploy --local-only`. Fly.io nie pozwala na
pobieranie prywatnych obrazów Docker, dlatego musimy użyć flagi `--local-only`.
## Metryki Prometeusza {#prometheus-metrics}
Tuist udostępnia metryki Prometheus pod adresem `/metrics`, aby pomóc w
monitorowaniu samodzielnie hostowanej instancji. Metryki te obejmują:
### Metryki klienta HTTP Finch {#finch-metrics}
Tuist używa [Finch](https://github.com/sneako/finch) jako klienta HTTP i
udostępnia szczegółowe dane dotyczące żądań HTTP:
#### Metryki żądań
- `tuist_prom_ex_finch_request_count_total` - Całkowita liczba żądań Finch
(licznik)
- Etykiety: `finch_name`, `method`, `scheme`, `host`, `port`, `status`
- `tuist_prom_ex_finch_request_duration_milliseconds` - Czas trwania żądań HTTP
(histogram)
- Etykiety: `finch_name`, `method`, `scheme`, `host`, `port`, `status`
- Wiadra: 10ms, 50ms, 100ms, 250ms, 500ms, 1s, 2.5s, 5s, 10s
- `tuist_prom_ex_finch_request_exception_count_total` - Całkowita liczba
wyjątków żądań Finch (licznik)
- Etykiety: `finch_name`, `method`, `scheme`, `host`, `port`, `kind`, `reason`
#### Metryki kolejki puli połączeń
- `tuist_prom_ex_finch_queue_duration_milliseconds` - Czas oczekiwania w kolejce
puli połączeń (histogram)
- Etykiety: `finch_name`, `scheme`, `host`, `port`, `pool`
- Wiadra: 1ms, 5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms, 1s
- `tuist_prom_ex_finch_queue_idle_time_milliseconds` - Czas bezczynności
połączenia przed użyciem (histogram)
- Etykiety: `finch_name`, `scheme`, `host`, `port`, `pool`
- Wiadra: 10ms, 50ms, 100ms, 250ms, 500ms, 1s, 5s, 10s
- `tuist_prom_ex_finch_queue_exception_count_total` - Całkowita liczba wyjątków
kolejki Finch (licznik)
- Etykiety: `finch_name`, `scheme`, `host`, `port`, `kind`, `reason`
#### Metryki połączeń
- `tuist_prom_ex_finch_connect_duration_milliseconds` - Czas spędzony na
nawiązywaniu połączenia (histogram)
- Etykiety: `finch_name`, `scheme`, `host`, `port`, `error`
- Wiadra: 10ms, 50ms, 100ms, 250ms, 500ms, 1s, 2.5s, 5s
- `tuist_prom_ex_finch_connect_count_total` - Całkowita liczba prób połączenia
(licznik)
- Etykiety: `finch_name`, `scheme`, `host`, `port`
#### Wysyłanie metryk
- `tuist_prom_ex_finch_send_duration_milliseconds` - Czas wysłania żądania
(histogram)
- Etykiety: `finch_name`, `method`, `scheme`, `host`, `port`, `error`
- Wiadra: 1ms, 5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms, 1s
- `tuist_prom_ex_finch_send_idle_time_milliseconds` - Czas bezczynności
połączenia przed wysłaniem (histogram)
- Etykiety: `finch_name`, `method`, `scheme`, `host`, `port`, `error`
- Wiadra: 1ms, 5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms
Wszystkie metryki histogramów udostępniają warianty `_bucket`, `_sum` i `_count`
do szczegółowej analizy.
### Inne wskaźniki
Oprócz metryk Finch, Tuist udostępnia metryki dla:
- Wydajność maszyny wirtualnej BEAM
- Niestandardowe metryki logiki biznesowej (magazyn, konta, projekty itp.).
- Wydajność bazy danych (w przypadku korzystania z infrastruktury hostowanej
przez Tuist)
## Operacje {#operations}
Tuist udostępnia zestaw narzędzi pod adresem `/ops/`, których można użyć do
zarządzania instancją.
::: warning Authorization
Tylko osoby, których uchwyty są wymienione w zmiennej środowiskowej
`TUIST_OPS_USER_HANDLES` mogą uzyskać dostęp do punktów końcowych `/ops/`.
:::
- **Błędy (`/ops/errors`):** Możesz wyświetlić nieoczekiwane błędy, które
wystąpiły w aplikacji. Jest to przydatne do debugowania i zrozumienia, co
poszło nie tak i możemy poprosić Cię o udostępnienie nam tych informacji,
jeśli napotkasz problemy.
- **Dashboard (`/ops/dashboard`):** Możesz wyświetlić pulpit nawigacyjny, który
zapewnia wgląd w wydajność i stan aplikacji (np. zużycie pamięci, uruchomione
procesy, liczbę żądań). Ten pulpit nawigacyjny może być bardzo przydatny, aby
zrozumieć, czy używany sprzęt jest wystarczający do obsługi obciążenia.