# Самостоятельная установка {#self-host-installation}
Мы предлагаем версию сервера Tuist с возможностью самостоятельного размещения
для организаций, которым требуется больший контроль над своей инфраструктурой.
Эта версия позволяет размещать Tuist на собственной инфраструктуре, обеспечивая
безопасность и конфиденциальность данных.
::: warning LICENSE REQUIRED
Для самостоятельного размещения Tuist требуется действующая платная лицензия.
Местная версия Tuist доступна только для организаций на тарифном плане
Enterprise. Если вы заинтересованы в этой версии, пожалуйста, свяжитесь с нами
по адресу [contact@tuist.dev](mailto:contact@tuist.dev).
:::
## Каденция выпуска {#release-cadence}
Мы выпускаем новые версии Tuist постоянно, по мере того как новые изменения,
которые можно выпустить, появляются на главной. Мы следуем [семантическому
версионированию](https://semver.org/), чтобы обеспечить предсказуемое
версионирование и совместимость.
Основной компонент используется для того, чтобы отмечать изменения в сервере
Tuist, которые потребуют согласования с локальными пользователями. Не стоит
ожидать, что мы будем его использовать, а если вдруг понадобится, будьте
уверены, мы будем работать с вами, чтобы сделать переход плавным.
## Непрерывное развертывание {#continuous-deployment}
Мы настоятельно рекомендуем настроить конвейер непрерывного развертывания,
который будет автоматически развертывать последнюю версию Tuist каждый день. Это
гарантирует, что вы всегда будете иметь доступ к последним функциям, улучшениям
и обновлениям безопасности.
Вот пример рабочего процесса GitHub Actions, который ежедневно проверяет наличие
и развертывает новые версии:
```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
```
## Требования к времени выполнения {#runtime-requirements}
В этом разделе описаны требования к размещению сервера Tuist на вашей
инфраструктуре.
### Матрица совместимости {#compatibility-matrix}
Сервер Tuist протестирован и совместим со следующими минимальными версиями:
| Компонент | Минимальная версия | Примечания |
| ----------- | ------------------ | ---------------------------------------------- |
| PostgreSQL | 15 | С расширением TimescaleDB |
| TimescaleDB | 2.16.1 | Необходимое расширение PostgreSQL (устаревшее) |
| ClickHouse | 25 | Требуется для аналитики |
::: warning TIMESCALEDB DEPRECATION
TimescaleDB в настоящее время является необходимым расширением PostgreSQL для
сервера Tuist, используемым для хранения и запроса данных временных рядов.
Однако **TimescaleDB устарел** и будет исключен из числа необходимых
зависимостей в ближайшем будущем, когда мы перенесем всю функциональность
временных рядов на ClickHouse. Пока же убедитесь, что на вашем экземпляре
PostgreSQL установлена и включена TimescaleDB.
:::
### Запуск виртуализированных образов Docker {#running-dockervirtualized-images}
Мы распространяем сервер в виде образа [Docker](https://www.docker.com/) через
[GitHub's Container
Registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry).
Чтобы запустить его, ваша инфраструктура должна поддерживать запуск образов
Docker. Обратите внимание, что большинство поставщиков инфраструктуры
поддерживают его, поскольку он стал стандартным контейнером для распространения
и запуска программного обеспечения в производственных средах.
### База данных Postgres {#postgres-database}
Помимо запуска образов Docker, вам понадобится база данных
[Postgres](https://www.postgresql.org/) с расширением
[TimescaleDB](https://www.timescale.com/) для хранения реляционных данных и
временных рядов. Большинство поставщиков инфраструктуры включают базы данных
Postgres в свои предложения (например,
[AWS](https://aws.amazon.com/rds/postgresql/) и [Google
Cloud](https://cloud.google.com/sql/docs/postgres)).
**Требуется расширение TimescaleDB:** Tuist требует расширения TimescaleDB для
эффективного хранения и запроса данных временных рядов. Это расширение
используется для командных событий, аналитики и других функций, основанных на
времени. Перед запуском Tuist убедитесь, что на вашем экземпляре PostgreSQL
установлено и включено расширение TimescaleDB.
::: info MIGRATIONS
Точка входа образа Docker автоматически запускает все ожидающие миграции схемы
перед запуском службы. Если миграция не удалась из-за отсутствия расширения
TimescaleDB, вам нужно будет сначала установить его в свою базу данных.
:::
### База данных ClickHouse {#clickhouse-database}
Tuist использует [ClickHouse](https://clickhouse.com/) для хранения и запроса
больших объемов аналитических данных. ClickHouse - это **, необходимый** для
таких функций, как build insights, и он станет основной базой данных временных
рядов, когда мы откажемся от TimescaleDB. Вы можете выбрать, размещать
ClickHouse самостоятельно или использовать их хостинговый сервис.
::: info MIGRATIONS
Точка входа образа Docker автоматически запускает все предстоящие миграции схемы
ClickHouse перед запуском службы.
:::
### Хранение {#storage}
Вам также понадобится решение для хранения файлов (например, двоичных файлов
фреймворков и библиотек). В настоящее время мы поддерживаем любое хранилище,
совместимое с S3.
## Конфигурация {#configuration}
Конфигурация службы выполняется во время выполнения с помощью переменных
окружения. Учитывая конфиденциальный характер этих переменных, мы рекомендуем
шифровать и хранить их в надежных решениях для управления паролями. Будьте
уверены, Tuist работает с этими переменными очень осторожно, гарантируя, что они
никогда не будут отображаться в логах.
::: info LAUNCH CHECKS
При запуске проверяются все необходимые переменные. Если какие-либо из них
отсутствуют, запуск завершится неудачей, а в сообщении об ошибке будут подробно
указаны отсутствующие переменные.
:::
### Конфигурация лицензии {#license-configuration}
Как пользователь локального сервиса, вы получите лицензионный ключ, который
нужно будет указать в качестве переменной окружения. Этот ключ используется для
проверки лицензии и обеспечения работы службы в соответствии с условиями
соглашения.
| Переменная среды | Описание | Требуется | По умолчанию | Пример |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------------ | ----------------------------------------- |
| `TUIST_LICENSE` | Лицензия, предоставляемая после подписания соглашения об уровне обслуживания | Да* | | `******` |
| `TUIST_LICENSE_CERTIFICATE_BASE64` | **Исключительная альтернатива `TUIST_LICENSE`**. Публичный сертификат в кодировке Base64 для автономной проверки лицензии в средах с воздушной завесой, где сервер не может связаться с внешними службами. Используется только в тех случаях, когда `TUIST_LICENSE` не может быть использован. | Да* | | `LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...` |
\* Должны быть указаны либо `TUIST_LICENSE`, либо
`TUIST_LICENSE_CERTIFICATE_BASE64`, но не оба. Используйте `TUIST_LICENSE` для
стандартных развертываний.
::: warning EXPIRATION DATE
Лицензии имеют срок действия. Пользователи получат предупреждение при
использовании команд Tuist, взаимодействующих с сервером, если срок действия
лицензии истекает менее чем через 30 дней. Если вы заинтересованы в продлении
лицензии, пожалуйста, свяжитесь с [contact@tuist.dev](mailto:contact@tuist.dev).
:::
### Конфигурация базовой среды {#base-environment-configuration}
| Переменная среды | Описание | Требуется | По умолчанию | Пример | |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `TUIST_APP_URL` | Базовый URL-адрес для доступа к экземпляру из Интернета | Да | | https://tuist.dev | |
| `TUIST_SECRET_KEY_BASE` | Ключ, используемый для шифрования информации (например, сеансов в файле cookie). | Да | | | `c5786d9f869239cbddeca645575349a570ffebb332b64400c37256e1c9cb7ec831345d03dc0188edd129d09580d8cbf3ceaf17768e2048c037d9c31da5dcacfa` |
| `TUIST_SECRET_KEY_PASSWORD` | Перец для генерации хэшированных паролей | Нет | `$TUIST_SECRET_KEY_BASE` | | |
| `TUIST_SECRET_KEY_TOKENS` | Секретный ключ для генерации случайных жетонов | Нет | `$TUIST_SECRET_KEY_BASE` | | |
| `TUIST_SECRET_KEY_ENCRYPTION` | 32-байтный ключ для шифрования конфиденциальных данных по алгоритму AES-GCM | Нет | `$TUIST_SECRET_KEY_BASE` | | |
| `TUIST_USE_IPV6` | Когда `1`, он настраивает приложение на использование IPv6-адресов. | Нет | `0` | `1` | |
| `TUIST_LOG_LEVEL` | Уровень журнала, который будет использоваться для приложения | Нет | `информация` | [Уровни журнала](https://hexdocs.pm/logger/1.12.3/Logger.html#module-levels) | |
| `TUIST_GITHUB_APP_NAME` | URL-версия имени вашего приложения на GitHub | Нет | | `my-app` | |
| `TUIST_GITHUB_APP_PRIVATE_KEY_BASE64` | Закрытый ключ в кодировке base64, используемый в приложении GitHub для разблокировки дополнительных функций, таких как автоматическая публикация комментариев к PR. | Нет | `LS0tLS1CRUdJTiBSU0EgUFJJVkFUR...` | | |
| `TUIST_GITHUB_APP_PRIVATE_KEY` | Закрытый ключ, используемый в приложении GitHub для разблокировки дополнительных функций, таких как автоматическая публикация комментариев к PR. **Мы рекомендуем использовать base64-кодированную версию, чтобы избежать проблем со специальными символами** | Нет | `-----BEGIN RSA...` | | |
| `TUIST_OPS_USER_HANDLES` | Список дескрипторов пользователей, имеющих доступ к URL-адресам операций, разделенный запятыми | Нет | | `пользователь1,пользователь2` | |
| `TUIST_WEB` | Включите конечную точку веб-сервера | Нет | `1` | `1` или `0` | |
### Конфигурация базы данных {#database-configuration}
Для настройки подключения к базе данных используются следующие переменные
окружения:
| Переменная среды | Описание | Требуется | По умолчанию | Пример |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ------------ | ---------------------------------------------------------------------- |
| `DATABASE_URL` | URL-адрес для доступа к базе данных Postgres. Обратите внимание, что URL должен содержать информацию об аутентификации | Да | | `postgres://username:password@cloud.us-east-2.aws.test.com/production` |
| `TUIST_CLICKHOUSE_URL` | URL-адрес для доступа к базе данных ClickHouse. Обратите внимание, что URL должен содержать информацию об аутентификации | Нет | | `http://username:password@cloud.us-east-2.aws.test.com/production` |
| `TUIST_USE_SSL_FOR_DATABASE` | Если значение равно true, то для подключения к базе данных используется [SSL](https://en.wikipedia.org/wiki/Transport_Layer_Security). | Нет | `1` | `1` |
| `TUIST_DATABASE_POOL_SIZE` | Количество соединений, которые необходимо держать открытыми в пуле соединений | Нет | `10` | `10` |
| `TUIST_DATABASE_QUEUE_TARGET` | Интервал (в милисекундах) для проверки того, что все соединения, извлеченные из пула, заняли больше интервала очереди [(Дополнительная информация)](https://hexdocs.pm/db_connection/DBConnection.html#start_link/2-queue-config) | Нет | `300` | `300` |
| `TUIST_DATABASE_QUEUE_INTERVAL` | Пороговое время (в милисекундах) в очереди, которое пул использует для определения того, следует ли ему начать отбрасывать новые соединения [(Дополнительная информация)](https://hexdocs.pm/db_connection/DBConnection.html#start_link/2-queue-config) | Нет | `1000` | `1000` |
| `TUIST_CLICKHOUSE_FLUSH_INTERVAL_MS` | Интервал времени в миллисекундах между очистками буфера ClickHouse | Нет | `5000` | `5000` |
| `TUIST_CLICKHOUSE_MAX_BUFFER_SIZE` | Максимальный размер буфера ClickHouse в байтах перед принудительной очисткой | Нет | `1000000` | `1000000` |
| `TUIST_CLICKHOUSE_BUFFER_POOL_SIZE` | Количество запускаемых буферных процессов ClickHouse | Нет | `5` | `5` |
### Настройка среды аутентификации {#authentication-environment-configuration}
Мы поддерживаем аутентификацию через [провайдеров идентификации
(IdP)](https://en.wikipedia.org/wiki/Identity_provider). Чтобы воспользоваться
этим, убедитесь, что все необходимые переменные окружения для выбранного
провайдера присутствуют в окружении сервера. **Отсутствие переменных** приведет
к тому, что Tuist обойдет этого провайдера.
#### GitHub {#github}
Мы рекомендуем аутентифицироваться с помощью [GitHub
App](https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps),
но вы также можете использовать [OAuth
App](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app).
Убедитесь, что в окружение сервера включены все необходимые переменные
окружения, указанные GitHub. Отсутствие переменных приведет к тому, что Tuist не
примет во внимание аутентификацию GitHub. Чтобы правильно настроить приложение
GitHub:
- В общих настройках приложения GitHub:
- Скопируйте идентификатор клиента `` и установите его как
`TUIST_GITHUB_APP_CLIENT_ID.`
- Создайте и скопируйте новый клиентский секрет `` и установите его как
`TUIST_GITHUB_APP_CLIENT_SECRET.`
- Установите URL-адрес обратного вызова `` как
`http://YOUR_APP_URL/users/auth/github/callback`. `YOUR_APP_URL` также
может быть IP-адресом вашего сервера.
- Требуются следующие разрешения:
- Репозитории:
- Заявки на перетяжку: Чтение и запись
- Счета:
- Адреса электронной почты: Только для чтения
В разделе `Разрешения и события`'s `Account permissions` установите для
разрешения `Email addresses` значение `Read-only`.
Затем вам нужно будет выставить следующие переменные окружения в среде, в
которой запущен сервер Tuist:
| Переменная среды | Описание | Требуется | По умолчанию | Пример |
| -------------------------------- | --------------------------------------- | --------- | ------------ | ------------------------------------------ |
| `TUIST_GITHUB_APP_CLIENT_ID` | Идентификатор клиента приложения GitHub | Да | | `Iv1.a629723000043722` |
| `TUIST_GITHUB_APP_CLIENT_SECRET` | Секрет клиента приложения | Да | | `232f972951033b89799b0fd24566a04d83f44ccc` |
#### Google {#google}
Вы можете настроить аутентификацию в Google с помощью [OAuth
2](https://developers.google.com/identity/protocols/oauth2). Для этого вам нужно
будет создать новый мандат типа OAuth client ID. При создании учетных данных
выберите тип приложения "Веб-приложение", назовите его `Tuist`, а URI
перенаправления установите на `{base_url}/users/auth/google/callback`, где
`base_url` - это URL, на котором работает ваш хостинг-сервис. После создания
приложения скопируйте идентификатор и секрет клиента и установите их в качестве
переменных окружения `GOOGLE_CLIENT_ID` и `GOOGLE_CLIENT_SECRET` соответственно.
::: info CONSENT SCREEN SCOPES
Возможно, вам потребуется создать экран согласия. При этом обязательно добавьте
диапазоны `userinfo.email` и `openid` и отметьте приложение как внутреннее.
:::
#### Okta {#okta}
Вы можете включить аутентификацию с помощью Okta по протоколу [OAuth
2.0](https://oauth.net/2/). Вам нужно будет [создать
приложение](https://developer.okta.com/docs/en/guides/implement-oauth-for-okta/main/#create-an-oauth-2-0-app-in-okta)
на Okta, следуя этим инструкциям.
После получения идентификатора и секрета клиента в процессе настройки приложения
Okta вам нужно будет установить следующие переменные окружения:
| Переменная среды | Описание | Требуется | По умолчанию | Пример |
| ---------------------------- | ---------------------------------------------------------------------------------------------------- | --------- | ------------ | ------ |
| `TUIST_OKTA_1_CLIENT_ID` | Идентификатор клиента для аутентификации в Okta. Номер должен быть идентификатором вашей организации | Да | | |
| `TUIST_OKTA_1_CLIENT_SECRET` | Секрет клиента для аутентификации в Okta | Да | | |
Число `1` необходимо заменить на идентификатор вашей организации. Обычно это 1,
но проверьте в своей базе данных.
### Настройка среды хранения данных {#storage-environment-configuration}
Tuist нуждается в хранилище для хранения артефактов, загружаемых через API. Для
эффективной работы Tuist необходимо **настроить одно из поддерживаемых решений
для хранения**.
#### Хранилища, совместимые с S3 {#s3compliant-storages}
Для хранения артефактов можно использовать любого поставщика услуг хранения,
совместимого с S3. Для аутентификации и настройки интеграции с поставщиком
хранилища необходимы следующие переменные среды:
| Переменная среды | Описание | Требуется | По умолчанию | Пример |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | ---------------------------------- | ------------------------------------------------------------- |
| `TUIST_S3_ACCESS_KEY_ID` или `AWS_ACCESS_KEY_ID` | Идентификатор ключа доступа для аутентификации у поставщика услуг хранения данных | Да | | `AKIAIOSFOD` |
| `TUIST_S3_SECRET_ACCESS_KEY` или `AWS_SECRET_ACCESS_KEY` | Секретный ключ доступа для аутентификации у поставщика услуг хранения данных | Да | | `wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY` |
| `TUIST_S3_REGION` или `AWS_REGION` | Регион, в котором находится ведро | Нет | `авто` | `запад-2` |
| `TUIST_S3_ENDPOINT` или `AWS_ENDPOINT` | Конечная точка поставщика услуг хранения | Да | | `https://s3.us-west-2.amazonaws.com` |
| `TUIST_S3_BUCKET_NAME` | Имя ведра, в котором будут храниться артефакты | Да | | `tuist-artifacts` |
| `TUIST_S3_CA_CERT_PEM` | Сертификат ЦС в кодировке PEM для проверки HTTPS-соединений S3. Полезно для сред с воздушной завесой с самоподписанными сертификатами или внутренними центрами сертификации. | Нет | Пакет системного ЦС | `-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----` |
| `TUIST_S3_CONNECT_TIMEOUT` | Таймаут (в миллисекундах) для установления соединения с провайдером хранилища | Нет | `3000` | `3000` |
| `TUIST_S3_RECEIVE_TIMEOUT` | Таймаут (в миллисекундах) для получения данных от провайдера хранилища | Нет | `5000` | `5000` |
| `TUIST_S3_POOL_TIMEOUT` | Таймаут (в миллисекундах) для пула соединений с провайдером хранилища. Используйте `infinity` для отсутствия таймаута. | Нет | `5000` | `5000` |
| `TUIST_S3_POOL_MAX_IDLE_TIME` | Максимальное время простоя (в миллисекундах) для соединений в пуле. Используйте `infinity`, чтобы поддерживать соединения неограниченное время. | Нет | `Бесконечность` | `60000` |
| `TUIST_S3_POOL_SIZE` | Максимальное количество соединений в одном пуле | Нет | `500` | `500` |
| `TUIST_S3_POOL_COUNT` | Количество используемых пулов соединений | Нет | Количество системных планировщиков | `4` |
| `TUIST_S3_PROTOCOL` | Протокол, используемый при подключении к провайдеру хранилища (`http1` или `http2`). | Нет | `http1` | `http1` |
| `TUIST_S3_VIRTUAL_HOST` | Следует ли строить URL с именем ведра в качестве поддомена (виртуального хоста). | Нет | `ложь` | `1` |
::: info AWS authentication with Web Identity Token from environment variables
Если ваш поставщик хранилища - AWS и вы хотите аутентифицироваться с помощью
токена веб-идентификации, вы можете установить переменную окружения
`TUIST_S3_AUTHENTICATION_METHOD` на `aws_web_identity_token_from_env_vars`, и
Tuist будет использовать этот метод, используя обычные переменные окружения AWS.
:::
#### Облачное хранилище Google {#google-cloud-storage}
Для Google Cloud Storage следуйте [этим
документам](https://cloud.google.com/storage/docs/authentication/managing-hmackeys),
чтобы получить пару `AWS_ACCESS_KEY_ID` и `AWS_SECRET_ACCESS_KEY`. Переменная
`AWS_ENDPOINT` должна быть установлена на `https://storage.googleapis.com`.
Остальные переменные окружения такие же, как и для любого другого
S3-совместимого хранилища.
### Конфигурация электронной почты {#email-configuration}
Tuist требует функциональности электронной почты для аутентификации
пользователей и транзакционных уведомлений (например, сброс пароля, уведомления
об учетной записи). В настоящее время **поддерживает только Mailgun** в качестве
почтового провайдера.
| Переменная среды | Описание | Требуется | По умолчанию | Пример |
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | --------------------------------------------------------------------------------------- | ------------------------- |
| `TUIST_MAILGUN_API_KEY` | Ключ API для аутентификации в Mailgun | Да* | | `ключ-1234567890abcdef` |
| `TUIST_MAILING_DOMAIN` | Домен, с которого будут отправляться электронные письма | Да* | | `mg.tuist.io` |
| `TUIST_MAILING_FROM_ADDRESS` | Адрес электронной почты, который будет отображаться в поле "От". | Да* | | `noreply@tuist.io` |
| `TUIST_MAILING_REPLY_TO_ADDRESS` | Необязательный адрес для ответов пользователей | Нет | | `support@tuist.dev` |
| `TUIST_SKIP_EMAIL_CONFIRMATION` | Пропускать подтверждение по электронной почте при регистрации новых пользователей. Если эта функция включена, пользователи автоматически получают подтверждение и могут войти в систему сразу после регистрации | Нет | `true`, если электронная почта не настроена, `false`, если электронная почта настроена. | `true`, `false`, `1`, `0` |
\* Переменные конфигурации электронной почты необходимы только в том случае,
если вы хотите отправлять электронные письма. Если они не настроены,
подтверждение электронной почты автоматически пропускается
::: info SMTP SUPPORT
Поддержка общего SMTP в настоящее время недоступна. Если вам нужна поддержка
SMTP для вашего локального развертывания, свяжитесь с
[contact@tuist.dev](mailto:contact@tuist.dev), чтобы обсудить ваши требования.
:::
::: info AIR-GAPPED DEPLOYMENTS
Для локальных установок, не имеющих доступа в Интернет или настроек почтового
провайдера, подтверждение по электронной почте автоматически пропускается по
умолчанию. Пользователи могут войти в систему сразу после регистрации. Если у
вас настроена электронная почта, но вы хотите пропустить подтверждение,
установите `TUIST_SKIP_EMAIL_CONFIRMATION=true`. Чтобы потребовать подтверждения
электронной почты, если она настроена, установите
`TUIST_SKIP_EMAIL_CONFIRMATION=false`.
:::
### Настройка платформы Git {#git-platform-configuration}
Tuist может интегрироваться с Git-платформами, чтобы предоставить дополнительные
возможности, такие как автоматическая публикация комментариев в ваших запросах
на вытягивание.
#### GitHub {#platform-github}
Вам нужно будет [создать приложение
GitHub](https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps).
Вы можете использовать созданное вами приложение для аутентификации, если вы не
создали приложение GitHub с OAuth. В разделе `Разрешения и события`'s
`Repository permissions` вам нужно дополнительно установить разрешение `Pull
requests` на `Read and write`.
Помимо `TUIST_GITHUB_APP_CLIENT_ID` и `TUIST_GITHUB_APP_CLIENT_SECRET`, вам
понадобятся следующие переменные окружения:
| Переменная среды | Описание | Требуется | По умолчанию | Пример |
| ------------------------------ | ------------------------------- | --------- | ------------ | ------------------------------------- |
| `TUIST_GITHUB_APP_PRIVATE_KEY` | Закрытый ключ приложения GitHub | Да | | `----- BEGIN RSA PRIVATE KEY-----...` |
## Тестирование на месте {#testing-locally}
Мы предоставляем комплексную конфигурацию Docker Compose, включающую все
необходимые зависимости для тестирования сервера Tuist на локальной машине перед
развертыванием в вашей инфраструктуре:
- PostgreSQL 15 с расширением TimescaleDB 2.16 (устаревшее)
- ClickHouse 25 для аналитики
- ClickHouse Keeper для координации
- MinIO для S3-совместимого хранилища
- Redis для постоянного хранения KV во всех развертываниях (необязательно).
- pgweb для администрирования баз данных
::: danger LICENSE REQUIRED
Для запуска сервера Tuist, включая локальные экземпляры разработки, требуется
действительная переменная окружения `TUIST_LICENSE`. Если вам нужна лицензия,
пожалуйста, свяжитесь с [contact@tuist.dev](mailto:contact@tuist.dev).
:::
**Быстрый старт:**
1. Загрузите файлы конфигурации:
```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. Настройте переменные окружения:
```bash
cp .env.example .env
# Edit .env and add your TUIST_LICENSE and authentication credentials
```
3. Запустите все службы:
```bash
docker compose up -d
# or with podman:
podman compose up -d
```
4. Зайдите на сервер по адресу http://localhost:8080.
**Конечные точки обслуживания:**
- Сервер Tuist: http://localhost:8080
- Консоль MinIO: http://localhost:9003 (учетные данные: `tuist` /
`tuist_dev_password`)
- API MinIO: http://localhost:9002
- pgweb (пользовательский интерфейс PostgreSQL): http://localhost:8081
- Метрика "Прометея": http://localhost:9091/metrics
- ClickHouse HTTP: http://localhost:8124
**Общие команды:**
Проверьте состояние обслуживания:
```bash
docker compose ps
# or: podman compose ps
```
Просмотр журналов:
```bash
docker compose logs -f tuist
```
Услуги по остановке:
```bash
docker compose down
```
Сброс всех настроек (удаление всех данных):
```bash
docker compose down -v
```
**Файлы конфигурации:**
- [docker-compose.yml](/server/self-host/docker-compose.yml) - Полная
конфигурация Docker Compose
- [clickhouse-config.xml](/server/self-host/clickhouse-config.xml) -
Конфигурация ClickHouse
- [clickhouse-keeper-config.xml](/server/self-host/clickhouse-keeper-config.xml)
- Конфигурация ClickHouse Keeper
- [.env.example](/server/self-host/.env.example) - Пример файла переменных
окружения
## Развертывание {#deployment}
Официальный образ Tuist Docker доступен по адресу:
```
ghcr.io/tuist/tuist
```
### Извлечение образа Docker {#pulling-the-docker-image}
Вы можете получить изображение, выполнив следующую команду:
```bash
docker pull ghcr.io/tuist/tuist:latest
```
Или выберите конкретную версию:
```bash
docker pull ghcr.io/tuist/tuist:0.1.0
```
### Развертывание образа Docker {#deploying-the-docker-image}
Процесс развертывания образа Docker будет отличаться в зависимости от выбранного
вами облачного провайдера и подхода к непрерывному развертыванию в вашей
организации. Поскольку большинство облачных решений и инструментов, таких как
[Kubernetes](https://kubernetes.io/), используют образы Docker в качестве
фундаментальных единиц, примеры, приведенные в этом разделе, должны хорошо
сочетаться с существующими настройками.
::: warning
Если вашему конвейеру развертывания необходимо подтвердить, что сервер работает,
вы можете отправить HTTP-запрос `GET` по адресу `/ready` и подтвердить код
состояния `200` в ответе.
:::
#### Fly {#fly}
Чтобы развернуть приложение на [Fly](https://fly.io/), вам потребуется
конфигурационный файл `fly.toml`. Рассмотрите возможность его динамической
генерации в рамках конвейера непрерывного развертывания (CD). Ниже приведен
эталонный пример для использования:
```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 = "/"
```
Затем вы можете выполнить `fly launch --local-only --no-deploy` для запуска
приложения. При последующих развертываниях вместо `fly launch --local-only`
нужно будет выполнить `fly deploy --local-only`. Fly.io не позволяет получать
приватные Docker-образы, поэтому нам нужно использовать флаг `--local-only`.
## Метрики Прометея {#prometheus-metrics}
Tuist предоставляет метрики Prometheus по адресу `/metrics`, чтобы помочь вам
следить за вашим самораспространяющимся экземпляром. Эти метрики включают в
себя:
### Метрики HTTP-клиента Finch {#finch-metrics}
Tuist использует [Finch](https://github.com/sneako/finch) в качестве
HTTP-клиента и выдает подробные метрики о HTTP-запросах:
#### Метрики запроса
- `tuist_prom_ex_finch_request_count_total` - Общее количество запросов Finch
(счетчик).
- Метки: `finch_name`, `method`, `scheme`, `host`, `port`, `status`
- `tuist_prom_ex_finch_request_duration_milliseconds` - Продолжительность
HTTP-запросов (гистограмма).
- Метки: `finch_name`, `method`, `scheme`, `host`, `port`, `status`
- Ведра: 10 мс, 50 мс, 100 мс, 250 мс, 500 мс, 1 с, 2,5 с, 5 с, 10 с
- `tuist_prom_ex_finch_request_exception_count_total` - Общее количество
исключений из запросов Finch (счетчик).
- Ярлыки: `finch_name`, `method`, `scheme`, `host`, `port`, `kind`, `reason`
#### Метрики очереди пула подключений
- `tuist_prom_ex_finch_queue_duration_milliseconds` - Время ожидания в очереди
пула соединений (гистограмма).
- Метки: `finch_name`, `scheme`, `host`, `port`, `pool`
- Ведра: 1 мс, 5 мс, 10 мс, 25 мс, 50 мс, 100 мс, 250 мс, 500 мс, 1 с
- `tuist_prom_ex_finch_queue_idle_time_milliseconds` - Время, в течение которого
соединение простаивало перед использованием (гистограмма).
- Метки: `finch_name`, `scheme`, `host`, `port`, `pool`
- Ведра: 10 мс, 50 мс, 100 мс, 250 мс, 500 мс, 1 с, 5 с, 10 с
- `tuist_prom_ex_finch_queue_exception_count_total` - Общее количество
исключений из очереди Finch (счетчик).
- Ярлыки: `finch_name`, `scheme`, `host`, `port`, `kind`, `reason`
#### Метрики подключения
- `tuist_prom_ex_finch_connect_duration_milliseconds` - Время установления
соединения (гистограмма).
- Ярлыки: `finch_name`, `scheme`, `host`, `port`, `error`
- Ведра: 10 мс, 50 мс, 100 мс, 250 мс, 500 мс, 1 с, 2,5 с, 5 с
- `tuist_prom_ex_finch_connect_count_total` - Общее количество попыток
соединения (счетчик).
- Ярлыки: `finch_name`, `scheme`, `host`, `port`
#### Отправить метрики
- `tuist_prom_ex_finch_send_duration_milliseconds` - Время, затраченное на
отправку запроса (гистограмма).
- Метки: `finch_name`, `method`, `scheme`, `host`, `port`, `error`
- Ведра: 1 мс, 5 мс, 10 мс, 25 мс, 50 мс, 100 мс, 250 мс, 500 мс, 1 с
- `tuist_prom_ex_finch_send_idle_time_milliseconds` - Время простоя соединения
перед отправкой (гистограмма).
- Метки: `finch_name`, `method`, `scheme`, `host`, `port`, `error`
- Ведра: 1 мс, 5 мс, 10 мс, 25 мс, 50 мс, 100 мс, 250 мс, 500 мс
Все метрики гистограмм предоставляют варианты `_bucket`, `_sum`, и `_count` для
детального анализа.
### Другие показатели
В дополнение к метрикам Finch, Tuist предоставляет метрики для:
- Производительность виртуальной машины BEAM
- Пользовательские метрики бизнес-логики (хранилища, учетные записи, проекты и
т. д.)
- Производительность базы данных (при использовании инфраструктуры Tuist-hosted)
## Операции {#operations}
Tuist предоставляет набор утилит по адресу `/ops/`, которые вы можете
использовать для управления своим экземпляром.
::: warning Authorization
Доступ к конечным точкам `/ops/` могут получить только те, чьи дескрипторы
указаны в переменной окружения `TUIST_OPS_USER_HANDLES`.
:::
- **Ошибки (`/ops/errors`):** Вы можете просмотреть неожиданные ошибки,
возникшие в приложении. Это полезно для отладки и понимания того, что пошло не
так, и мы можем попросить вас поделиться этой информацией с нами, если вы
столкнулись с проблемами.
- **Приборная панель (`/ops/dashboard`):** Вы можете просмотреть приборную
панель, которая дает представление о производительности и состоянии приложения
(например, потребление памяти, запущенные процессы, количество запросов). Эта
панель может быть очень полезна, чтобы понять, достаточно ли используемого
вами оборудования для дескриптора нагрузки.