에어갭 환경 배포

Mattermost v11.11번역일: 2026-09-02원본 보기

에어갭 환경이란 공개 인터넷에서 격리되어 필요한 모든 구성 요소를 로컬에서 사용할 수 있어야 하는 환경을 말합니다. 이 가이드는 자체 호스팅 에어갭 환경에 Mattermost를 배포하는 데 필요한 사항을 설명하며, 성공적인 배포를 위한 적절한 준비, 배포 지침, 필수 구성에 초점을 맞춥니다.

개요

큰 틀에서 볼 때, 에어갭 환경에 Mattermost를 배포하려면 대상 시스템에 인터넷 접근이 없으므로 필요한 모든 소프트웨어, 컨테이너 이미지, 구성 리소스를 미리 준비하고, 이 산출물을 보안 매체로 격리 네트워크에 전송한 뒤, 에어갭 환경 안에서 설치·구성·검증해야 합니다. 관련 단계를 요약하면 다음과 같습니다.

1. 선호하는 Mattermost 배포 옵션 선택:

이 단계는 에어갭 환경에서 이미 운영 중인 인프라에 따라 결정되는 경우가 많습니다. 처음부터 배포한다면 서버 배포 문서를 검토해 조직의 요구에 가장 적합한 옵션을 선택할 것을 권장합니다.

2. 프라이빗 컨테이너 레지스트리 또는 패키지 미러 구축:

에어갭 환경에 이미 프라이빗 컨테이너 레지스트리나 패키지 미러가 마련되어 있는 것이 이상적입니다. 그렇지 않다면 자주 묻는 질문을 따르거나 해당 환경에 맞는 온라인 자료를 참고할 것을 권장합니다.

3. 자재 명세서(Bill of Materials) 준비:

배포 방식에 따라 필요한 자재를 내려받고 태그를 지정한 뒤 프라이빗 레지스트리나 미러로 푸시해야 합니다.

4. 에어갭 환경으로 자재 전송:

프라이빗 레지스트리가 공개 인터넷에 접근할 수 없다면, 인터넷에 연결된 머신에서 레지스트리 데이터의 아카이브를 만들어 승인된 데이터 전송 방식(예: 디스크에 굽기)으로 안전하게 옮길 수 있습니다.

5. Mattermost 서버 설치

에어갭 환경에 필요한 리소스를 모두 갖추었다면 Linux, Kubernetes, Docker 지침에 따라 배포를 진행할 수 있습니다.

6. Mattermost 데스크톱 앱 설치

에어갭 기기는 공개 앱 스토어에 접근할 수 없으므로 GitHub 릴리스 페이지에서 제공되는 최신 패키지로 앱을 직접 설치해야 합니다. 원하는 배포 방식에 맞는 설치 지침은 문서에서 확인할 수 있습니다.

6. 에어갭 운영을 위한 Mattermost 구성

이 문서에서 권장하는 구성 설정은 인터넷 접근이 없는 상태에서 Mattermost를 에어갭 환경에서 운영할 수 있도록 맞춰져 있습니다.

참고

조직에서 에어갭 환경에 Mattermost 및 관련 서비스를 배포하는 데 지원이 필요하다면 Mattermost 전문가와의 상담을 고려해 보세요.

자재 명세서

인터넷에 연결된 머신에서 설치 과정에 필요한 모든 패키지, 컨테이너 이미지, 의존성을 수집해야 합니다. 필요한 리소스는 배포 방식에 따라 다르며, 구체적으로 다음과 같습니다.

Linux

제공되는 tarball을 사용하는 것이 에어갭 환경에서 가장 간단한 설치 방식이므로 권장합니다. 64비트 Linux 에어갭 시스템이라면 어디서든 몇 분 만에 Mattermost 서버를 설치할 수 있습니다.

사전 요구 사항

  • Mattermost tarball. 서버 업그레이드가 잦지 않은 환경에서 장기 지원을 받으려면 최신 ESR 사용을 권장합니다.
  • 데이터베이스: 사용하는 Linux 배포판에 맞는 PostgreSQL 설치 패키지 또는 컨테이너 이미지.
  • 파일 저장소: 사용자 2,000명 미만 배포에는 로컬 파일 시스템 저장소로 충분합니다. 고가용성이 필요한 더 큰 규모의 배포에는 S3 호환 오브젝트 스토리지 솔루션이나 NFS(Network File System) 서버를 공유 저장소로 사용할 것을 권장합니다.
  • 로드 밸런서: 에어갭 환경에 이미 로드 밸런서가 운영 중이라면 이 항목은 건너뛰어도 됩니다. 그렇지 않다면 Linux 패키지로 NGINX를 배포할 것을 권장합니다.
  • 데스크톱 앱: 배포 방식에 맞는 필요한 패키지를 내려받으세요.

(선택) 지원 서비스

다음 선택 구성 요소를 활성화할 계획이라면 관련 리소스도 함께 내려받는 것을 고려하세요.

Kubernetes

에어갭 환경에서 이미 Kubernetes 클러스터를 운영 중이라면, 확장성과 견고함을 갖춘 배포를 위해 Kubernetes를 권장합니다.

사전 요구 사항

참고

데이터베이스 준비 상태 점검(에어갭 권장 사항)

설치된 Mattermost Operator가 spec.database.readinessCheck.mode를 지원한다면, Mattermost 커스텀 리소스에 spec.database.readinessCheck.mode: builtin을 설정하여 메인 컨테이너와 동일한 Mattermost 이미지로 데이터베이스 준비 상태 init 컨테이너를 실행할 수 있습니다. 그러면 init 컨테이너가 postgres:13을 내려받아 pg_isready를 실행하는 대신 이미지에 포함된 mattermost db ping 명령을 호출합니다.

이 모드는 postgres:13을 프라이빗 레지스트리에 미러링할 필요가 없어지므로 에어갭 클러스터에 권장합니다. 준비 상태 점검에 필요한 이미지는 이미 미러링 중인 Mattermost 이미지뿐입니다. builtin 모드를 사용하기 전에, 설치된 Operator 버전의 Mattermost CRD 또는 Operator 릴리스 노트에 readinessCheck.mode 필드가 포함되어 있는지 확인하세요. builtin 모드는 mattermost db ping 명령을 제공하는 Mattermost 릴리스도 필요합니다(제공 여부는 Mattermost 서버 릴리스 노트를 참고하세요).

예시:

spec:
  database:
    external:
      secret: <my-db-secret>
    readinessCheck:
      mode: builtin
      timeout: 5m   # optional; default is 5m

기존 external 모드(postgres:13과 pg_isready를 사용)는 하위 호환성을 위해 여전히 기본값이며 이전 Mattermost 버전 사용자도 선택할 수 있지만, 향후 Operator 릴리스에서 지원 중단될 예정입니다. readinessCheck 필드의 전체 스키마는 Mattermost CRD 레퍼런스를 참고하세요.

(선택) 지원 서비스

다음 선택 구성 요소를 활성화할 계획이라면 관련 리소스도 함께 내려받는 것을 고려하세요.

Docker

에어갭 환경에 Kubernetes 클러스터가 없지만 설치와 의존성 관리를 간소화하기 위해 컨테이너를 사용하고 싶다면 Docker를 쓸 수 있습니다. 다만 Docker는 클러스터 배포나 고가용성(HA) 구성을 기본 지원하지 않으므로 대규모 프로덕션 환경에는 권장하지 않습니다.

사전 요구 사항

  • Mattermost Enterprise Edition 이미지.
  • 데이터베이스: PostgreSQL 이미지.
  • 로드 밸런서: 에어갭 환경에 이미 로드 밸런서가 운영 중이라면 이 항목은 건너뛰어도 됩니다. 그렇지 않다면 이 이미지로 NGINX를 배포할 것을 권장합니다.
  • 데스크톱 앱: 배포 방식에 맞는 필요한 패키지를 내려받으세요.

(선택) 지원 서비스

다음 선택 구성 요소를 활성화할 계획이라면 관련 리소스도 함께 내려받는 것을 고려하세요.

Mattermost 플러그인

Mattermost에는 미션 크리티컬 도구를 위한 여러 사전 구축 연동이 포함되어 있습니다. Mattermost 패키지에 기본 포함된 것 외의 플러그인을 사용하려면 Mattermost Marketplace에서 플러그인 바이너리를 내려받아야 합니다. Mattermost를 배포한 뒤에는 시스템 콘솔에서 이 플러그인 바이너리를 직접 업로드할 수 있습니다.

SSL/TLS 인증서와 키

배포에 SSL이 필요하다면 필요한 인증서를 준비해 두세요. 여기에는 Mattermost에서 HTTPS를 활성화하기 위한 인증서와 키, 그리고 LDAP나 SAML 같은 내부 서비스에 접근하는 데 필요한 CA 파일이나 인증서가 포함됩니다.

로컬 문서

Mattermost 문서는 로컬에서 빌드할 수 있으므로 에어갭 환경에서도 설치·구성 문서를 볼 수 있습니다. 또는 GitHub 문서 저장소에서 필요한 배포·구성 문서를 직접 내려받을 수도 있습니다.

사전 요구 사항

문서를 로컬에서 빌드하려면 다음 소프트웨어가 필요합니다.

서버 구성

배포를 완료한 뒤에는 에어갭 운영에 맞게 Mattermost를 구성해야 합니다. 다음 섹션에서는 이러한 구성 옵션과 설정 권장 사항을 설명합니다.

모바일 푸시 알림

Mattermost는 모바일 푸시 알림을 사용해 새 메시지와 활동을 사용자에게 알릴 수 있습니다. 이 알림에는 모바일 기기로 알림을 전송하는 서버 구성 요소가 배포되어 있어야 합니다. 기본적으로 Mattermost는 공개 푸시 알림 서비스를 사용하는데, 이는 에어갭 환경에서 사용할 수 없습니다. 시스템 콘솔 > 환경 > 푸시 알림 서버에서 푸시 알림을 비활성화할 것을 권장합니다.

이메일

내부 에어갭 이메일 서비스를 구축하지 않았다면 시스템 콘솔 > 인증 > 가입에서 이메일 초대와 이메일 인증을 비활성화할 것을 권장합니다.

웹사이트 링크 미리보기는 링크의 내용을 가져오기 위해 인터넷 연결이 필요합니다. 시스템 콘솔 > 사이트 구성 > 게시물에서 웹사이트 링크 미리보기를 비활성화할 것을 권장합니다.

GIF 선택기

GIF 선택기는 외부 인터넷 접근에 의존하는 서드파티 서비스를 사용합니다. 시스템 콘솔 > 연동 > GIF에서 비활성화할 수 있습니다.

공지

제품 내 공지는 새로운 제품 개선 사항, 기능, 릴리스를 관리자와 최종 사용자에게 주기적으로 알리기 위해 인터넷 접근이 필요합니다. 시스템 콘솔 > 사이트 구성 > 공지에서 공지를 비활성화할 수 있습니다.

텔레메트리

로그 오류를 피하기 위해 보안 업데이트 확인, 오류 및 진단 보고 기능을 포함한 텔레메트리 관련 기능을 비활성화할 것을 권장합니다.

자주 묻는 질문

에어갭 환경에 프라이빗 컨테이너 레지스트리나 패키지 미러가 없다면 어떻게 해야 하나요?

프라이빗 컨테이너 레지스트리는 에어갭 배포에 필요한 Docker 이미지를 안전하게 보관하여 데이터 격리 요건을 충족합니다. 마찬가지로 프라이빗 패키지 미러는 Ubuntu나 RHEL/CentOS Linux 환경의 에어갭 배포에 필요한 운영체제 패키지를 보관합니다. 로컬 레지스트리나 미러를 구축하는 것은 에어갭 환경에서 모든 이미지, 의존성, 패키지를 사용할 수 있도록 하기 위한 Mattermost 배포의 핵심 단계입니다. 아래 절차는 사용 중인 배포 방식에 따라 로컬 레지스트리나 미러를 구축하는 과정을 설명합니다. 이는 대략적인 안내이며, 구체적인 배포 요구에 따라 온라인 자료로 보완할 수 있습니다.

Linux

(Ubuntu) 프라이빗 Debian 패키지 미러 구축

여기서는 Aptly로 로컬 미러를 만들지만, debmirror 같은 다른 옵션을 사용해도 됩니다.

  1. Aptly 설치(인터넷에 연결된 머신에서):
    apt-get update
    apt-get install aptly gnupg
  2. 패키지 서명용 GPG 키 생성:
    gpg --gen-key
  3. 미러 구성 생성:
    aptly mirror create -architectures=amd64 debian-bullseye http://deb.debian.org/debian bullseye main contrib non-free
  4. 미러를 갱신해 패키지 내려받기:
    aptly mirror update debian-bullseye
  5. 스냅숏 생성 및 게시:
    aptly snapshot create debian-bullseye-$(date +%Y%m%d) from mirror debian-bullseye
    aptly publish snapshot debian-bullseye-$(date +%Y%m%d)
  6. 저장소 서비스 실행:
    aptly serve
  7. 클라이언트 구성: 로컬 미러를 사용하도록 apt를 구성합니다.
    cat > /etc/apt/sources.list << EOF
    deb http://mirror.example.com/debian bullseye main contrib non-free
    EOF

(RHEL/CentOS) 프라이빗 RHEL 패키지 미러 구축

여기서는 로컬 미러에 reprosync를 사용합니다.

  1. 필요한 도구 설치(인터넷에 연결된 RHEL 시스템에서):
    yum install yum-utils createrepo
  2. 패키지 내려받기:
    mkdir -p /var/www/html/repos/rhel8
    reposync -p /var/www/html/repos/rhel8 --download-metadata --repo=rhel-8-for-x86_64-baseos-rpms
    reposync -p /var/www/html/repos/rhel8 --download-metadata --repo=rhel-8-for-x86_64-appstream-rpms
  3. 저장소 메타데이터 생성:
    createrepo /var/www/html/repos/rhel8/rhel-8-for-x86_64-baseos-rpms
    createrepo /var/www/html/repos/rhel8/rhel-8-for-x86_64-appstream-rpms
  4. 웹 서버 구축:
    yum install httpd
    systemctl enable httpd
    systemctl start httpd
  5. 클라이언트 구성: 기존 저장소를 비활성화합니다.
    cd /etc/yum.repos.d/
    mkdir backup
    mv *.repo backup/
  6. 클라이언트 구성: 새 저장소 파일을 만듭니다.
    cat > /etc/yum.repos.d/local-baseos.repo << EOF
    [local-baseos]
    name=Red Hat Enterprise Linux 8 BaseOS
    baseurl=http://mirror.example.com/repos/rhel8/rhel-8-for-x86_64-baseos-rpms
    enabled=1
    gpgcheck=0
    EOF
    
    cat > /etc/yum.repos.d/local-appstream.repo << EOF
    [local-appstream]
    name=Red Hat Enterprise Linux 8 AppStream
    baseurl=http://mirror.example.com/repos/rhel8/rhel-8-for-x86_64-appstream-rpms
    enabled=1
    gpgcheck=0
    EOF
  7. 클라이언트 구성: 캐시를 비우고 테스트합니다.
    yum clean all
    yum repolist

Kubernetes

자체 호스팅 프라이빗 컨테이너 레지스트리 구축

  1. Docker Registry 설치:
    docker run -d -p 5000:5000 --restart=always --name registry registry:2
  2. 영구 저장소 구성:
    docker run -d -p 5000:5000 --restart=always --name registry \
    -v /mnt/registry:/var/lib/registry \
    registry:2
  3. TLS 보안 추가(권장):
    1. 자체 서명 인증서를 생성합니다.
      mkdir -p certs
      openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
      -x509 -days 365 -out certs/domain.crt
    2. TLS를 적용해 레지스트리를 실행합니다.
      docker run -d -p 5000:5000 --restart=always --name registry \
      -v /mnt/registry:/var/lib/registry \
      -v $(pwd)/certs:/certs \
      -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
      -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
      registry:2

프라이빗 이미지 레지스트리를 사용하도록 Kubernetes 구성

에어갭 환경에서 Kubernetes를 사용할 때는 프라이빗 레지스트리를 사용하도록 구성해야 합니다.

  1. 레지스트리 인증용 Kubernetes 시크릿 생성:
    kubectl create secret docker-registry regcred \
    --docker-server=registry.example.com:5000 \
    --docker-username=your_username \
    --docker-password=your_password \
    --docker-email=your_email@example.com
  2. 파드 명세에서 시크릿 참조:
    apiVersion: v1
    kind: Pod
    metadata:
      name: mattermost-pod
    spec:
      containers:
      - name: mattermost
        image: registry.example.com:5000/mattermost/mattermost-enterprise-edition:latest
      imagePullSecrets:
      - name: regcred
  3. Helm 배포의 경우 values.yaml에 레지스트리를 지정합니다.
    image:
      repository: registry.example.com:5000/mattermost/mattermost-enterprise-edition
      tag: latest
      pullPolicy: IfNotPresent
    
    imagePullSecrets:
      - name: regcred

Docker

자체 호스팅 프라이빗 컨테이너 레지스트리 구축

  1. Docker Registry 설치:
    docker run -d -p 5000:5000 --restart=always --name registry registry:2
  2. 영구 저장소 구성:
    docker run -d -p 5000:5000 --restart=always --name registry \
    -v /mnt/registry:/var/lib/registry \
    registry:2
  3. TLS 보안 추가(권장):
    1. 자체 서명 인증서를 생성합니다.
      mkdir -p certs
      openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
      -x509 -days 365 -out certs/domain.crt
    2. TLS를 적용해 레지스트리를 실행합니다.
      docker run -d -p 5000:5000 --restart=always --name registry \
      -v /mnt/registry:/var/lib/registry \
      -v $(pwd)/certs:/certs \
      -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
      -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
      registry:2

프라이빗 레지스트리 채우기

자재 명세서에 있는 필수 이미지를 내려받아 프라이빗 레지스트리에 푸시했는지 확인하세요.

프라이빗 이미지 레지스트리를 사용하도록 Docker 구성

모든 호스트의 Docker가 프라이빗 레지스트리를 신뢰하고 사용하도록 구성하세요.

  1. Docker의 신뢰할 수 있는 레지스트리에 등록:

    /etc/docker/daemon.json을 편집하거나 새로 만듭니다.

    {
      "insecure-registries": ["registry.example.com:5000"]
    }

    자체 서명 인증서를 사용하는 레지스트리의 경우:

    mkdir -p /etc/docker/certs.d/registry.example.com:5000
    cp domain.crt /etc/docker/certs.d/registry.example.com:5000/ca.crt
  2. Docker 데몬 재시작:
    systemctl restart docker
  3. 구성 테스트:
    docker pull registry.example.com:5000/mattermost/mattermost-enterprise-edition:latest