Mattermost Team Edition Helm 차트를 GitLab Helm 차트 배포에 설치하는 방법

plans-img Enterprise 플랜에서 사용 가능

deployment-img self-hosted 배포판

이 문서는 기존의 GitLab Helm Chart 배포와 인접하게 Mattermost Team Edition Helm 차트를 사용하는 방법에 대해 설명합니다. Mattermost Team Edition Helm 차트가 설치되면 GitLab SSO 통합이 구성되며, 공유 구성을 활용하여 인증, 저장, 암호화 및 트래픽 라우팅을 간소화합니다.

Mattermost Helm 차트는 별도의 네임스페이스에 설치되므로, 클러스터 전체의 인그레스 및 인증서 리소스를 관리하기 위해 cert-managernginx-ingress 를 구성하는 것이 좋습니다.

사전 준비 사항

  • 실행 중인 Kubernetes 클러스터.

  • Helm v2 .

  • 클러스터에 설치된 Tiller (Helm 서버 측 구성 요소).

Note

Team Edition의 경우 하나의 복제본만 실행할 수 있습니다.

Mattermost Team Edition Helm 차트 설치

이 차트는 Helm 패키지 관리자를 사용하여 Kubernetes 클러스터에 Mattermost Team Edition를 배포합니다. 자세한 지침은 Mattermost Team Edition 문서 를 참조하십시오.

Mattermost Team Edition Helm 차트 배포

Mattermost Team Edition Helm 차트를 설치한 후, 다음 명령을 사용하여 배포할 수 있습니다:

$ helm repo add mattermost https://helm.mattermost.com
$ helm repo update
$ helm upgrade --install mattermost -f values.yaml mattermost/mattermost-team-edition

파드가 실행될 때까지 기다린 다음, 구성에서 지정한 인그레스 호스트를 사용하여 Mattermost 서버에 액세스할 수 있습니다.

GitLab과 OAuth 애플리케이션 생성

다음 단계는 GitLab SSO 통합 설정하는 것입니다.

Mattermost가 인증 제공자로 GitLab을 사용하도록 허용하려면 여기 에 나열된 지침을 따르십시오.

Application ID , Application Secret Key , User API Endpoint , Auth EndpointToken Endpoint 설정을 확인하고 나중에 이 값들을 사용할 것입니다.

Note

기본 GitLab SSO만 공식적으로 지원됩니다. GitLab SSO가 다른 SSO 솔루션에 연결되는 “이중 SSO”는 지원되지 않습니다. 경우에 따라 GitLab SSO를 AD, LDAP, SAML 또는 MFA 애드온에 연결하는 것이 가능할 수 있지만, 특별한 로직이 필요하므로 공식적으로 지원되지 않으며 일부 환경에서 작동하지 않는 것으로 알려져 있습니다.

GitLab Helm 차트 배포

GitLab Helm 차트를 배포하려면 GitLab 클라우드 네이티브 Helm 차트 문서에 설명된 지침을 따르십시오.

다음과 같이 가볍게 설치할 수 있습니다:

$ helm repo add gitlab https://charts.gitlab.io/
$ helm repo update
$ helm upgrade --install gitlab gitlab/gitlab \
  --timeout 600 \
  --set global.hosts.domain= <your-domain> \
  --set global.hosts.externalIP= <external-ip> \
  --set certmanager-issuer.email= <email>
  • <your-domain> : 원하는 도메인, 예: gitlab.example.com .

  • <external-ip> : Kubernetes 클러스터를 가리키는 외부 IP.

  • <email> : TLS 인증서를 검색하기 위해 Let’s Encrypt에 등록할 이메일.

GitLab 인스턴스를 배포한 후, 초기 로그인 에 대한 지침을 따르십시오.

다른 절차를 따르고 인증 및/또는 배포 문제를 경험하는 경우, 문제 해결 포럼 에서 알려주시면 기꺼이 도와드리겠습니다.

GitLab Helm 차트로 Mattermost Team Edition Helm 차트 배포

GitLab 인스턴스에 성공적으로 인증되고 연결된 경우, 다음 단계는 두 차트를 통합하는 것입니다. 이 문서의 단계는 차트 안의 Minio 인스턴스 사용을 가정합니다. 차트 밖의 객체 저장 구성에 대한 정보는 이 문서 에서 GCS 및 S3 예제를 참조하거나, 제공업체의 도움 설명서에서 구성 설정을 확인하십시오.

사전 준비 사항:

  • Mattermost Team Edition Helm 차트 버전: 3.8.2.

  • 실행 중인 GitLab Helm 차트 릴리스.

  • PostgreSQL 암호를 보유하는 시크릿 이름 <gitlab>-postgresql-password .

  • (선택 사항) MinIO 키를 보유하는 시크릿 이름 <gitlab>-minio-secret .

  • GitLab의 서비스 이름, <gitlab>-postgresql , 및 포트를 위한 정보. GitLab Helm 차트를 default 네임스페이스에 설치한 경우, 포트는 5432 입니다.

  • (선택 사항) MinIO용 서비스 이름, <gitlab>-minio-svc , 및 포트를 위한 정보. GitLab Helm 차트를 default 네임스페이스에 설치한 경우, 포트는 9000 입니다.

  • kubernetes.io/ingress.class , kubernetes.io/ingress.provider , 및 certmanager.k8s.io/issuer 의 이름

GitLab Helm 차트와 함께 Mattermost Team Edition 배포하려면 실행 중인 MySql 차트를 비활성화하고 values.yaml 에서 InitContainerEnvironment variables 를 구성하십시오. 아래 목록은 변경해야 할 값들을 보여줍니다. 여기서 GitLab 차트의 이름을 gitlab 이라고 가정합니다.

  • <your-mattermost-domain> : 사용자가 Mattermost에 액세스하는 데 사용하는 URL, Site URL 필드 과 일치해야 합니다. 예: mattermost.gitlab.example.com .

  • <name-of-your-tls-secret> : 도메인의 TLS 인증서를 저장할 이름. 예: mattermost-tls .

  • <ingress-class> : 인그레스 클래스. 기본 GitLab 배포의 경우 gitlab-nginx 입니다.

  • <ingress-provider> : 인그레스 제공자. 기본 GitLab 배포의 경우 nginx 입니다.

  • <certmanager-issuer> : cert manager 발급자. 기본 GitLab 배포의 경우 gitlab-issuer 입니다.

  • <gitlab-ap-secret> : 단계 GitLab과 OAuth 애플리케이션 생성 _에서 생성한 애플리케이션 비밀키.

  • <gitlab-app-id> : 단계 GitLab과 OAuth 애플리케이션 생성 _에서 생성한 애플리케이션 ID.

  • <your-gitlab-domain> : GitLab 도메인 이름, 예: gitlab.example.com .

  • <gitlab-postgres.username> : GitLab PostgreSQL 사용자 이름. 기본값은 gitlab 입니다.

<gitlab-postgres.passwd-secret> : PostgreSQL 암호를 보관하는 시크릿. 기본값은 gitlab-postgresql-password 입니다. <gitlab-postgres-host> : Kubernetes 서비스의 PostgreSQL 호스트. 기본값은 gitlab-postgresql 입니다. <gitlab-postgres-port> : Kubernetes 서비스의 PostgreSQL 포트. 기본값은 5432 입니다. <mattermost-database-name> : Mattermost 데이터베이스, 예: mattermost-db . <gitlab-minio-host> : Kubernetes 서비스의 MinIO 호스트. 기본값은 gitlab-minio-svc 입니다. <gitlab-minio-port> : Kubernetes 서비스의 MinIO 포트. 기본값은 9000 입니다. <gitlab-minio-secret> : MinIO 키를 보관하는 시크릿. 기본값은 gitlab-minio-secret 입니다. <mattermost-minio-bucket-name> : Mattermost MinIO 버킷 이름, 예: mattermost-data .

persistence:
  data:
    enabled: false

# Mattermost 구성:
configJSON:
  ServiceSettings:
    SiteUrl: "https:// <your-mattermost-domain>"
  TeamSettings:
    SiteName: "Mattermost"
  EmailSettings:
    EnableSignUpWithEmail: false

ingress:
  enabled: true
  path: /
  annotations:
    kubernetes.io/ingress.class:  <ingress-class>
    kubernetes.io/ingress.provider: <ingress-provider>
    certmanager.k8s.io/issuer:  <certmanager-issuer>
  hosts:
    - <your-mattermost-domain>
  tls:
    - secretName: <name-of-your-tls-secret>
      hosts:
        - <your-mattermost-domain>

auth:
  gitlab:
    Enable: "true"
    Secret: " <gitlab-app-secret>"
    Id: " <gitlab-app-id>"
    Scope: ""
    AuthEndpoint: "https:// <your-gitlab-domain>/oauth/authorize"
    TokenEndpoint: "https:// <your-gitlab-domain>/oauth/token"
    UserApiEndpoint: "https:// <your-gitlab-domain>/api/v4/user"

externalDB:
  enabled: true
  existingUser: <gitlab-postgres-username>
  existingSecret: " <gitlab-postgres.passwd-secret>"

mysql:
  enabled: false

## 추가 환경 변수
extraEnvVars:
  - name: POSTGRES_PASSWORD_GITLAB
    valueFrom:
      secretKeyRef:
        name: <gitlab-postgres-passwd-secret>
        key: postgres-password
  - name: POSTGRES_USER_GITLAB
    value: <gitlab-postgres-username>
  - name: POSTGRES_HOST_GITLAB
    value: <gitlab-postgres-host>
  - name: POSTGRES_PORT_GITLAB
    value: " <gitlab-postgres-port>"
  - name: POSTGRES_DB_NAME_MATTERMOST
    value: <mattermost-database-name>
  - name: MM_SQLSETTINGS_DRIVERNAME
    value: "postgres"
  - name: MM_SQLSETTINGS_DATASOURCE
    value: postgres://$(POSTGRES_USER_GITLAB):$(POSTGRES_PASSWORD_GITLAB)@$(POSTGRES_HOST_GITLAB):$(POSTGRES_PORT_GITLAB)/$(POSTGRES_DB_NAME_MATTERMOST)?sslmode=disable&connect_timeout=10
  - name: MINIO_ENDPOINT
    value: <gitlab-minio-host>
  - name: MINIO_PORT
    value: " <gitlab-minio-port>"
  - name: MM_FILESETTINGS_DRIVERNAME
    value: amazons3
  - name: MM_FILESETTINGS_AMAZONS3ENDPOINT
    value: $(MINIO_ENDPOINT):$(MINIO_PORT)
  - name: MM_FILESETTINGS_AMAZONS3ACCESSKEYID
    valueFrom:
      secretKeyRef:
        name: <gitlab-minio-secret>
        key: accesskey
  - name: MM_FILESETTINGS_AMAZONS3SECRETACCESSKEY
    valueFrom:
      secretKeyRef:
        name: <gitlab-minio-secret>
        key: secretkey
  - name: MM_FILESETTINGS_AMAZONS3BUCKET
    value: <mattermost-minio-bucket-name>

## 추가 초기 컨테이너
extraInitContainers:
  - name: bootstrap-database
    image: "postgres:9.6-alpine"
    imagePullPolicy: IfNotPresent
    env:
      - name: POSTGRES_PASSWORD_GITLAB
        valueFrom:
          secretKeyRef:
            name: <gitlab-postgres-passwd-secret>
            key: postgres-password
      - name: POSTGRES_USER_GITLAB
        value: <gitlab-postgres-username>
      - name: POSTGRES_HOST_GITLAB
        value: <gitlab-postgres-host>
      - name: POSTGRES_PORT_GITLAB
        value: " <gitlab-postgres-port>"
      - name: POSTGRES_DB_NAME_MATTERMOST
        value: <mattermost-database-name>
    command:
      - sh
      - "-c"
      - |
        if PGPASSWORD=$POSTGRES_PASSWORD_GITLAB psql -h $POSTGRES_HOST_GITLAB -p $POSTGRES_PORT_GITLAB -U $POSTGRES_USER_GITLAB -lqt | cut -d \| -f 1 | grep -qw $POSTGRES_DB_NAME_MATTERMOST; then
        echo "데이터베이스가 이미 존재하여 초기화 컨테이너를 종료합니다"
        exit 0
        else
        echo "데이터베이스가 존재하지 않습니다. 생성 중...."
        PGPASSWORD=$POSTGRES_PASSWORD_GITLAB createdb -h $POSTGRES_HOST_GITLAB -p $POSTGRES_PORT_GITLAB -U $POSTGRES_USER_GITLAB $POSTGRES_DB_NAME_MATTERMOST
        echo "완료"
        fi
  - name: create-minio-bucket
    image: "minio/mc:RELEASE.2018-07-13T00-53-22Z"
    env:
      - name: MINIO_ENDPOINT
        value: <gitlab-minio-host>
      - name: MINIO_PORT
        value: " <gitlab-minio-port>"
      - name: MINIO_ACCESS_KEY
        valueFrom:
          secretKeyRef:
            name: <gitlab-minio-secret>
            key: accesskey
      - name: MINIO_SECRET_KEY
        valueFrom:
          secretKeyRef:
            name: <gitlab-minio-secret>
            key: secretkey
      - name: MATTERMOST_BUCKET_NAME
        value: <mattermost-minio-bucket-name>
    command:
      - sh
      - "-c"
      - |
        echo "Minio 서버에 연결 중: http://$MINIO_ENDPOINT:$MINIO_PORT"
        mc config host add myminio http://$MINIO_ENDPOINT:$MINIO_PORT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
        /usr/bin/mc ls myminio
        echo $?
        /usr/bin/mc ls myminio/$MATTERMOST_BUCKET_NAME > /dev/null 2>&1
        if [ $? -eq 1 ] ; then
          echo "'$MATTERMOST_BUCKET_NAME' 버킷을 생성 중"

``/usr/bin/mc mb myminio/$MATTERMOST_BUCKET_NAME``
그렇지 않은 경우

Bucket '$MATTERMOST_BUCKET_NAME' already exists.

0으로 종료하세요.