Skip to content

번역 🌍

이 페이지를 번역하거나 기존 번역을 개선할 수 있습니다.

기여

셀프 호스트 설치

인프라에 대한 더 많은 제어가 필요한 조직을 위해 자체 호스팅 버전의 Tuist 서버를 제공합니다. 이 버전을 사용하면 자체 인프라에서 Tuist를 호스팅하여 데이터를 안전하게 비공개로 유지할 수 있습니다.

라이선스 필요

자체 호스팅 Tuist에는 법적으로 유효한 유료 라이선스가 필요합니다. 온프레미스 버전의 Tuist는 Enterprise 요금제를 사용하는 조직만 사용할 수 있습니다. 이 버전에 관심이 있으시면 [email protected]로 문의하시기 바랍니다.

릴리스 케이던스

새로운 릴리즈 가능한 변경 사항이 메인에 적용되면 지속적으로 새 버전을 출시합니다. 예측 가능한 버전 관리와 호환성을 보장하기 위해 시맨틱 버전 관리를 따릅니다.

주요 구성 요소는 온프레미스 사용자와의 조정이 필요한 Tuist 서버의 중대한 변경 사항을 알리는 데 사용됩니다. 당사가 이 기능을 사용할 필요는 없으며, 필요한 경우 당사는 원활한 전환을 위해 여러분과 협력할 것이니 안심하세요.

지속적 배포

매일 최신 버전의 Tuist를 자동으로 배포하는 지속적인 배포 파이프라인을 설정하는 것을 적극 권장합니다. 이렇게 하면 항상 최신 기능, 개선 사항 및 보안 업데이트에 액세스할 수 있습니다.

다음은 매일 새 버전을 확인하고 배포하는 GitHub 작업 워크플로 예시입니다:

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

런타임 요구 사항

이 섹션에서는 인프라에서 Tuist 서버를 호스팅하기 위한 요구 사항을 간략하게 설명합니다.

호환성 매트릭스

Tuist 서버는 테스트를 거쳤으며 다음 최소 버전과 호환됩니다:

구성 요소최소 버전참고
PostgreSQL15타임스케일DB 확장 사용
타임스케일DB2.16.1필수 PostgreSQL 확장(더 이상 사용되지 않음)
ClickHouse25분석에 필요

시간 초과 디버깅 경고

타임스케일DB는 현재 시계열 데이터 저장 및 쿼리에 사용되는 Tuist 서버의 필수 PostgreSQL 확장 프로그램입니다. 그러나 TimescaleDB는 더 이상 사용되지 않으며 가까운 시일 내에 모든 시계열 기능을 ClickHouse로 마이그레이션함에 따라 필수 종속성에서 삭제될 예정입니다. 현재로서는 PostgreSQL 인스턴스에 타임스케일DB가 설치되어 있고 활성화되어 있는지 확인하세요.

도커 가상화 이미지 실행

GitHub의 컨테이너 레지스트리](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry)를 통해 Docker 이미지로 서버를 배포합니다.

이를 실행하려면 인프라가 Docker 이미지 실행을 지원해야 합니다. 프로덕션 환경에서 소프트웨어를 배포하고 실행하기 위한 표준 컨테이너가 되었기 때문에 대부분의 인프라 제공업체가 이를 지원합니다.

Postgres 데이터베이스

Docker 이미지를 실행하는 것 외에도 관계형 및 시계열 데이터를 저장하려면 TimescaleDB 확장이 있는 Postgres 데이터베이스가 필요합니다. 대부분의 인프라 제공업체는 AWSGoogle Cloud와 같은 서비스 제공에 Postgres 데이터베이스를 포함합니다(예: AWSGoogle Cloud).

타임스케일DB 확장이 필요합니다: 효율적인 시계열 데이터 저장 및 쿼리를 위해 튜이스트에는 타임스케일DB 확장이 필요합니다. 이 확장은 명령 이벤트, 분석 및 기타 시간 기반 기능에 사용됩니다. 튜이스트를 실행하기 전에 PostgreSQL 인스턴스에 타임스케일DB가 설치되어 있고 활성화되어 있는지 확인하세요.

마이그레이션

Docker 이미지의 엔트리포인트는 서비스를 시작하기 전에 보류 중인 모든 스키마 마이그레이션을 자동으로 실행합니다. 타임스케일DB 확장이 누락되어 마이그레이션이 실패하는 경우, 먼저 데이터베이스에 해당 확장을 설치해야 합니다.

ClickHouse 데이터베이스

Tuist는 대량의 분석 데이터를 저장하고 쿼리하기 위해 ClickHouse를 사용합니다. ClickHouse는 인사이트 구축과 같은 기능에 **** 필요하며, 향후 타임스케일DB를 단계적으로 폐지함에 따라 기본 시계열 데이터베이스가 될 것입니다. ClickHouse를 자체 호스팅할지 아니면 호스팅된 서비스를 사용할지 선택할 수 있습니다.

마이그레이션

Docker 이미지의 엔트리포인트는 서비스를 시작하기 전에 보류 중인 모든 ClickHouse 스키마 마이그레이션을 자동으로 실행합니다.

스토리지

또한 파일(예: 프레임워크 및 라이브러리 바이너리)을 저장할 솔루션이 필요합니다. 현재는 S3와 호환되는 모든 스토리지를 지원합니다.

구성

서비스 구성은 런타임에 환경 변수를 통해 이루어집니다. 이러한 변수의 민감한 특성을 고려할 때 안전한 비밀번호 관리 솔루션에 암호화하여 저장하는 것이 좋습니다. Tuist는 이러한 변수를 매우 신중하게 처리하여 로그에 절대 표시되지 않도록 하므로 안심하셔도 됩니다.

시작 확인

시작 시 필요한 변수가 확인됩니다. 누락된 변수가 있으면 실행이 실패하고 오류 메시지에 누락된 변수가 자세히 표시됩니다.

라이선스 구성

온프레미스 사용자는 환경 변수로 노출해야 하는 라이선스 키를 받게 됩니다. 이 키는 라이선스의 유효성을 검사하고 서비스가 계약 조건 내에서 실행되고 있는지 확인하는 데 사용됩니다.

환경 변수설명필수기본값
TUIST_LICENSE서비스 수준 계약 체결 후 제공되는 라이선스예*******
튜이스트_라이센스_인증서_베이스64**튜이스트_라이센스의 탁월한 대안**. 서버가 외부 서비스와 연결할 수 없는 에어 갭 환경에서 오프라인 라이선스 유효성 검사를 위한 Base64 인코딩된 공인 인증서입니다. TUIST_LICENSE` 를 사용할 수 없는 경우에만 사용예*LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...

* TUIST_LICENSE 또는 TUIST_LICENSE_CERTIFICATE_BASE64 중 하나만 제공해야 하며, 둘 다 제공하면 안 됩니다. 표준 배포의 경우 TUIST_LICENSE 을 사용합니다.

만료 날짜

라이선스에는 만료일이 있습니다. 라이선스가 30일 이내에 만료되면 서버와 상호 작용하는 Tuist 명령을 사용하는 동안 사용자에게 경고 메시지가 표시됩니다. 라이선스 갱신에 관심이 있는 경우 [email protected]로 문의하시기 바랍니다.

기본 환경 구성

환경 변수설명필수기본값
TUIST_APP_URL인터넷에서 인스턴스에 액세스하기 위한 기본 URL입니다.https://tuist.dev
tuist_secret_key_base정보를 암호화하는 데 사용할 키(예: 쿠키의 세션)c5786d9f869239cbddeca645575349a570ffebb332b64400c37256e1c9cb7ec831345d03dc0188edd129d09580d8cbf3ceaf17768e2048c037d9c31da5dcacfa
tuist_secret_key_passwordPepper로 해시된 비밀번호 생성아니요튜리스트_시크릿_키_베이스
튜이스트_시크릿_키_토큰랜덤 토큰을 생성하는 비밀 키아니요튜리스트_시크릿_키_베이스
튜이스트_시크릿_키_암호화민감한 데이터의 AES-GCM 암호화를 위한 32바이트 키아니요튜리스트_시크릿_키_베이스
TUIST_USE_IPV61 을 입력하면 앱이 IPv6 주소를 사용하도록 구성됩니다.아니요01
tuist_log_level앱에 사용할 로그 수준아니요정보로그 수준
튜이스트_구글_앱_이름GitHub 앱 이름의 URL 버전아니요내 앱
튜이스트_구글_앱_개인키_베이스64자동 PR 댓글 게시와 같은 추가 기능을 잠금 해제하기 위해 GitHub 앱에 사용되는 base64로 인코딩된 개인 키입니다.아니요LS0tLS1CRUdJTiBSU0EgUFJJVkFUR...
tuist_github_app_private_keyGitHub 앱에서 자동 PR 댓글 게시와 같은 추가 기능을 잠금 해제하는 데 사용되는 비공개 키입니다. 특수 문자 관련 문제를 방지하려면 Base64로 인코딩된 버전을 사용하는 것이 좋습니다.아니요-----BEGIN RSA...
튜이스트_옵스_사용자_핸들작업 URL에 액세스할 수 있는 사용자 핸들의 쉼표로 구분된 목록입니다.아니요user1,user2
TUIST_WEB웹 서버 엔드포인트 사용아니요11 또는 0

데이터베이스 구성

데이터베이스 연결을 구성하는 데 사용되는 환경 변수는 다음과 같습니다:

환경 변수설명필수기본값
DATABASE_URLPostgres 데이터베이스에 액세스하기 위한 URL입니다. URL에는 인증 정보가 포함되어야 합니다.postgres://username:[email protected]/production
튜이스트_클릭하우스_URLClickHouse 데이터베이스에 액세스하기 위한 URL입니다. URL에는 인증 정보가 포함되어야 합니다.아니요http://username:[email protected]/production
tuist_use_ssl_for_databasetrue이면 SSL을 사용하여 데이터베이스에 연결합니다.아니요11
튜이스트_데이터베이스_풀_크기연결 풀에서 계속 열어 둘 연결 수입니다.아니요1010
튜이스트_데이터베이스_큐_타겟풀에서 체크 아웃된 모든 연결이 큐 간격보다 오래 걸렸는지 확인하는 간격(밀리초)입니다 [(자세한 정보)(https://hexdocs.pm/db_connection/DBConnection.html#start_link/2-queue-config).아니요300300
튜이스트_데이터베이스_큐_인터벌풀에서 새 연결 드롭을 시작할지 여부를 결정하는 데 사용하는 큐의 임계값 시간(밀리초)입니다. (자세한 정보)아니요10001000
tuist_clickhouse_flush_interval_msClickHouse 버퍼 플러시 사이의 시간 간격(밀리초)아니요50005000
tuist_clickhouse_max_buffer_size강제 플러시 전 최대 ClickHouse 버퍼 크기(바이트)아니요10000001000000
튜이스트_클릭하우스_버퍼_풀_크기실행할 ClickHouse 버퍼 프로세스 수아니요55

인증 환경 구성

ID 공급자(IdP)(https://en.wikipedia.org/wiki/Identity_provider)를 통해 인증을 용이하게 합니다. 이를 활용하려면 선택한 제공업체에 필요한 모든 환경 변수가 서버 환경에 있는지 확인하십시오. **** 변수가 누락되면 Tuist는 해당 공급자를 우회하게 됩니다.

GitHub

GitHub 앱](https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)을 사용하여 인증하는 것이 좋지만 OAuth 앱을 사용할 수도 있습니다. 서버 환경에 GitHub에서 지정한 모든 필수 환경 변수를 포함해야 합니다. 변수가 없으면 Tuist가 GitHub 인증을 간과하게 됩니다. GitHub 앱을 올바르게 설정하려면 다음과 같이 하세요:

  • GitHub 앱의 일반 설정에서:
    • 클라이언트 ID 를 복사하여 TUIST_GITHUB_APP_CLIENT_ID로 설정합니다.
    • 클라이언트 비밀 을 새로 생성하고 복사하여 TUIST_GITHUB_APP_CLIENT_SECRET으로 설정합니다.
    • 콜백 URLhttp://YOUR_APP_URL/users/auth/github/callback 으로 설정합니다. YOUR_APP_URL 은 서버의 IP 주소일 수도 있습니다.
  • 다음 권한이 필요합니다:
    • 리포지토리:
      • 풀 리퀘스트: 읽기 및 쓰기
    • 계정:
      • 이메일 주소: 읽기 전용

권한 및 이벤트계정 권한 섹션에서 이메일 주소 권한을 읽기 전용 으로 설정합니다.

그런 다음 Tuist 서버가 실행되는 환경에서 다음 환경 변수를 노출해야 합니다:

환경 변수설명필수기본값
튜이스트_구글_앱_클라이언트_IDGitHub 애플리케이션의 클라이언트 IDIv1.a629723000043722
튜이스트_구글_앱_클라이언트_시크릿애플리케이션의 클라이언트 비밀232f972951033b89799b0fd24566a04d83f44ccc

Google

OAuth 2](https://developers.google.com/identity/protocols/oauth2)를 사용하여 Google 인증을 설정할 수 있습니다. 이를 위해서는 OAuth 클라이언트 ID 유형의 새 자격 증명을 생성해야 합니다. 자격 증명을 만들 때 애플리케이션 유형으로 "웹 애플리케이션"을 선택하고 이름을 Tuist 로 지정한 다음 리디렉션 URI를 {base_url}/users/auth/google/callback (여기서 base_url 은 호스팅된 서비스가 실행되고 있는 URL)으로 설정합니다. 앱을 생성한 후 클라이언트 ID와 비밀 번호를 복사하여 각각 GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRET 환경 변수로 설정합니다.

동의 화면 범위

동의 화면을 만들어야 할 수도 있습니다. 이 때 userinfo.emailopenid 범위를 추가하고 앱을 내부로 표시하세요.

Okta

OAuth 2.0](https://oauth.net/2/) 프로토콜을 통해 Okta로 인증을 활성화할 수 있습니다. 다음 지침에 따라 Okta에서 앱을 생성해야 합니다.

Okta 애플리케이션을 설정하는 동안 클라이언트 ID와 비밀번호를 받으면 다음 환경 변수를 설정해야 합니다:

환경 변수설명필수기본값
tuist_okta_1_client_idOkta에 대해 인증할 클라이언트 ID입니다. 이 번호는 조직 ID여야 합니다.
tuist_okta_1_client_secretOkta에 대한 인증을 위한 클라이언트 비밀

1 숫자를 조직 ID로 바꿔야 합니다. 일반적으로 1이 되지만 데이터베이스에서 확인하세요.

스토리지 환경 구성

튜이스트는 API를 통해 업로드된 아티팩트를 저장할 스토리지가 필요합니다. 지원되는 스토리지 솔루션 중 하나( )를 구성해야 Tuist를 효과적으로 운영할 수 있습니다.

S3 호환 스토리지

모든 S3 호환 스토리지 공급업체를 사용하여 아티팩트를 저장할 수 있습니다. 스토리지 제공업체와의 통합을 인증하고 구성하려면 다음 환경 변수가 필요합니다:

환경 변수설명필수기본값
TUIST_S3_ACCESS_KEY_ID 또는 AWS_ACCESS_KEY_ID스토리지 제공업체에 대해 인증할 액세스 키 ID입니다.아키아이오스푸드
TUIST_S3_SECRET_ACCESS_KEY 또는 AWS_SECRET_ACCESS_KEY스토리지 제공업체에 대한 인증을 위한 비밀 액세스 키wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
TUIST_S3_REGION 또는 AWS_REGION버킷이 위치한 지역아니요자동us-west-2
TUIST_S3_ENDPOINT 또는 AWS_ENDPOINT스토리지 제공업체의 엔드포인트https://s3.us-west-2.amazonaws.com
tuist_s3_버킷_이름아티팩트를 저장할 버킷의 이름입니다.튜이스트 아티팩트
TUIST_S3_CA_CERT_PEMS3 HTTPS 연결을 확인하기 위한 PEM 인코딩된 CA 인증서. 자체 서명 인증서 또는 내부 인증 기관이 있는 에어 갭 환경에 유용합니다.아니요시스템 CA 번들-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----
tuist_s3_connect_timeout스토리지 공급자에 대한 연결을 설정하는 데 걸리는 시간 제한(밀리초)아니요30003000
tuist_s3_receive_timeout스토리지 공급자로부터 데이터를 수신하는 데 걸리는 시간 제한(밀리초)아니요50005000
tuist_s3_pool_timeout스토리지 공급자에 대한 연결 풀의 시간 제한(밀리초)입니다. 시간 초과가 없는 경우 무한대 사용아니요50005000
tuist_s3_pool_max_idle_time풀에 있는 연결의 최대 유휴 시간(밀리초)입니다. 무한대 연결을 무기한으로 유지하려면 다음을 사용하세요.아니요무한대60000
tuist_s3_pool_size풀당 최대 연결 수아니요500500
tuist_s3_pool_count사용할 연결 풀의 수아니요시스템 스케줄러 수4
튜이스트_S3_프로토콜스토리지 제공업체에 연결할 때 사용할 프로토콜 (http1 또는 http2)아니요http1http1
tuist_s3_virtual_hostURL을 버킷 이름을 하위 도메인(가상 호스트)으로 구성해야 하는지 여부아니요false1

환경 변수를 통한 웹 ID 토큰을 사용한 AWS 인증

스토리지 제공업체가 AWS이고 웹 ID 토큰을 사용하여 인증하려는 경우, 환경 변수 TUIST_S3_AUTHENTICATION_METHODaws_web_identity_token_from_env_vars 로 설정하면 Tuist는 기존 AWS 환경 변수를 사용하여 해당 방법을 사용합니다.

Google 클라우드 스토리지

Google 클라우드 스토리지의 경우, 이 문서에 따라 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 쌍을 얻으세요. AWS_ENDPOINThttps://storage.googleapis.com 로 설정해야 합니다. 다른 환경 변수는 다른 S3 호환 스토리지와 동일합니다.

이메일 구성

Tuist는 사용자 인증 및 거래 알림(예: 비밀번호 재설정, 계정 알림)을 위해 이메일 기능이 필요합니다. 현재 이메일 제공업체로는 Mailgun( )만 지원됩니다.

환경 변수설명필수기본값
튜이스트_메일건_API_키Mailgun 인증을 위한 API 키예*KEY-1234567890ABCDEF
tuist_mailing_domain이메일을 보낼 도메인예*mg.tuist.io
튜이스트_메일링_발신_주소'보낸 사람' 필드에 표시될 이메일 주소입니다.예*[email protected]
튜이스트_메일링_답장_주소사용자 답장의 답장 수신 주소(선택 사항)아니요[email protected]
튜이스트_스킵_이메일_확인신규 사용자 등록 시 이메일 확인 건너뛰기. 이 기능을 활성화하면 사용자가 자동으로 확인되며 등록 후 즉시 로그인할 수 있습니다.아니요 이메일이 구성되지 않은 경우, 거짓 이메일이 구성된 경우true, false, 1, 0

* 이메일 구성 변수는 이메일을 보내려는 경우에만 필요합니다. 구성하지 않으면 이메일 확인이 자동으로 건너뜁니다.

SMTP 지원

현재 일반 SMTP 지원은 제공되지 않습니다. 온프레미스 배포를 위해 SMTP 지원이 필요한 경우 [email protected]로 연락하여 요구 사항을 논의하세요.

공기 틈새 배포

인터넷 액세스 또는 이메일 제공업체 구성이 없는 온프레미스 설치의 경우 이메일 확인은 기본적으로 자동으로 건너뜁니다. 사용자는 등록 후 바로 로그인할 수 있습니다. 이메일이 설정되어 있지만 확인을 건너뛰려면 TUIST_SKIP_EMAIL_CONFIRMATION=true 을 설정합니다. 이메일이 설정되어 있을 때 이메일 확인을 요구하려면 TUIST_SKIP_EMAIL_CONFIRMATION=false 을 설정합니다.

Git 플랫폼 구성

Tuist는 Git 플랫폼과 통합하여 풀 리퀘스트에 자동으로 댓글을 게시하는 등의 추가 기능을 제공할 수 있습니다.

GitHub

GitHub 앱](https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)을 만들어야 합니다. OAuth GitHub 앱을 만들지 않았다면 인증용으로 만든 것을 재사용할 수 있습니다. 권한 및 이벤트리포지토리 권한 섹션에서 풀 리퀘스트 권한을 읽기 및 쓰기 로 추가로 설정해야 합니다.

TUIST_GITHUB_APP_CLIENT_IDTUIST_GITHUB_APP_CLIENT_SECRET 외에 다음 환경 변수가 필요합니다:

환경 변수설명필수기본값
tuist_github_app_private_keyGitHub 애플리케이션의 비공개 키-----비긴 RSA 개인 키-----...

로컬로 테스트

인프라에 배포하기 전에 로컬 컴퓨터에서 Tuist 서버를 테스트하는 데 필요한 모든 종속성을 포함하는 포괄적인 Docker Compose 구성을 제공합니다:

  • 타임스케일DB 2.16 확장이 포함된 PostgreSQL 15(더 이상 사용되지 않음)
  • 분석용 ClickHouse 25
  • 클릭하우스 키퍼를 통한 조정
  • S3 호환 스토리지용 MinIO
  • 배포 간 영구 KV 스토리지를 위한 Redis(선택 사항)
  • 데이터베이스 관리를 위한 PGWEB

::: 위험 라이선스 필요

로컬 개발 인스턴스를 포함하여 Tuist 서버를 실행하려면 법적으로 유효한 TUIST_LICENSE 환경 변수가 필요합니다. 라이선스가 필요한 경우 [email protected]로 문의하시기 바랍니다.

:::

빠른 시작:

  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 에서 서버에 액세스하세요.

서비스 엔드포인트:

공통 명령:

서비스 상태를 확인합니다:

bash
docker compose ps
# or: podman compose ps

로그 보기:

bash
docker compose logs -f tuist

서비스를 중지합니다:

bash
docker compose down

모든 것을 초기화합니다(모든 데이터 삭제):

bash
docker compose down -v

구성 파일:

배포

공식 Tuist 도커 이미지는 다음 링크에서 확인할 수 있습니다:

ghcr.io/tuist/tuist

도커 이미지 가져오기

다음 명령을 실행하여 이미지를 검색할 수 있습니다:

bash
docker pull ghcr.io/tuist/tuist:latest

또는 특정 버전을 가져올 수도 있습니다:

bash
docker pull ghcr.io/tuist/tuist:0.1.0

도커 이미지 배포

Docker 이미지의 배포 프로세스는 선택한 클라우드 제공업체와 조직의 지속적인 배포 방식에 따라 달라집니다. Kubernetes](https://kubernetes.io/)와 같은 대부분의 클라우드 솔루션 및 도구는 Docker 이미지를 기본 단위로 활용하므로 이 섹션의 예는 기존 설정과 잘 맞아야 합니다.

WARNING

배포 파이프라인에서 서버가 가동 중인지 확인해야 하는 경우, GET HTTP 요청을 /ready 로 보내고 응답에 200 상태 코드를 어설트할 수 있습니다.

비행

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 메트릭

Tuist는 자체 호스팅 인스턴스를 모니터링하는 데 도움이 되도록 /metrics 에서 Prometheus 지표를 노출합니다. 이러한 메트릭에는 다음이 포함됩니다:

Finch HTTP 클라이언트 메트릭

Tuist는 Finch를 HTTP 클라이언트로 사용하며 HTTP 요청에 대한 자세한 메트릭을 노출합니다:

요청 메트릭

  • tuist_prom_ex_finch_request_count_total - 총 핀치 요청 수(카운터)
    • 레이블: 핀치_이름, 방법, 체계, 호스트, 포트, 상태
  • tuist_prom_ex_finch_request_duration_milliseconds - HTTP 요청 기간(히스토그램)
    • 레이블: 핀치_이름, 방법, 체계, 호스트, 포트, 상태
    • 버킷 10밀리초, 50밀리초, 100밀리초, 250밀리초, 500밀리초, 1초, 2.5초, 5초, 10초
  • tuist_prom_ex_finch_request_exception_count_total - 핀치 요청 예외의 총 개수(카운터)
    • 레이블: 핀치_이름, 방법, 체계, 호스트, 포트, 종류, 이유

연결 풀 대기열 메트릭

  • 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 - 핀치 대기열 예외의 총 개수(카운터)
    • 레이블: 핀치_이름, 체계, 호스트, 포트, 종류, 이유

연결 메트릭

  • tuist_prom_ex_finch_connect_duration_milliseconds - 연결 설정에 소요된 시간(히스토그램)
    • 레이블: 핀치_이름, 체계, 호스트, 포트, 오류
    • 버킷 10밀리초, 50밀리초, 100밀리초, 250밀리초, 500밀리초, 1초, 2.5초, 5초
  • tuist_prom_ex_finch_connect_count_total - 총 연결 시도 횟수(카운터)
    • 레이블: 핀치_이름, 체계, 호스트, 포트

메트릭 보내기

  • tuist_prom_ex_finch_send_duration_milliseconds - 요청 전송에 소요된 시간(히스토그램)
    • 레이블: 핀치_이름, 방법, 체계, 호스트, 포트, 오류
    • 버킷 1밀리초, 5밀리초, 10밀리초, 25밀리초, 50밀리초, 100밀리초, 250밀리초, 500밀리초, 1초
  • tuist_prom_ex_finch_send_idle_time_milliseconds - 전송 전 연결이 유휴 상태로 있었던 시간(히스토그램)
    • 레이블: 핀치_이름, 방법, 체계, 호스트, 포트, 오류
    • 버킷 1밀리초, 5밀리초, 10밀리초, 25밀리초, 50밀리초, 100밀리초, 250밀리초, 500밀리초

모든 히스토그램 메트릭은 자세한 분석을 위해 _bucket, _sum, _count 변형을 제공합니다.

기타 메트릭

Tuist는 Finch 메트릭 외에도 다음에 대한 메트릭을 노출합니다:

  • BEAM 가상 머신 성능
  • 사용자 지정 비즈니스 로직 메트릭(스토리지, 계정, 프로젝트 등)
  • 데이터베이스 성능(Tuist에서 호스팅하는 인프라를 사용하는 경우)

작업

Tuist는 /ops/ 에서 인스턴스를 관리하는 데 사용할 수 있는 유틸리티 세트를 제공합니다.

권한 부여

TUIST_OPS_USER_HANDLES 환경 변수에 핸들이 나열된 사용자만 /ops/ 엔드포인트에 액세스할 수 있습니다.

  • 오류(/ops/errors): 애플리케이션에서 발생한 예기치 않은 오류를 볼 수 있습니다. 이 정보는 디버깅하고 무엇이 잘못되었는지 이해하는 데 유용하며, 문제가 발생하면 이 정보를 공유해 달라고 요청할 수 있습니다.
  • 대시보드(/ops/dashboard)를 클릭합니다: 애플리케이션의 성능 및 상태(예: 메모리 사용량, 실행 중인 프로세스, 요청 수)에 대한 인사이트를 제공하는 대시보드를 볼 수 있습니다. 이 대시보드는 사용 중인 하드웨어가 부하를 처리하기에 충분한지 이해하는 데 매우 유용할 수 있습니다.

Released under the MIT License.