컨테이너를 사용하여 Mattermost 배포하기#

기능 탐색, 테스트 및 개발 목적으로 컨테이너 기술을 사용하여 Mattermost Server를 배포할 수 있습니다. 이는 기본 인프라를 관리할 필요 없이 Mattermost 인스턴스를 빠르게 설정할 수 있게 해줍니다. 이 배포 방법은 기본적으로 클러스터 배포나 고가용성(HA) 구성을 지원하지 않기 때문에 프로덕션 환경에서는 사용하지 않아야 합니다.

특정 배포 지침을 위해 아래에서 선호하는 컨테이너 플랫폼을 선택하세요:

이 가이드는 Docker 컨테이너를 사용하여 Mattermost를 배포하는 단계별 지침을 제공합니다.

경고

  • Docker를 사용한 Mattermost 서버 배포는 Linux 운영 체제에서만 공식적으로 지원됩니다.

  • macOS와 Windows Docker 배포는 테스트 및 개발 목적으로만 지원됩니다.

  • Docker는 자동 장애 조치, 공유 스토리지, 로드 밸런싱 등 주요 기능이 부족하기 때문에 고가용성(HA)에 이상적이지 않습니다. Docker는 여러 노드 관리와 장애 복구에도 어려움이 있습니다. 이러한 기능을 통해 안정성을 보장하기 위해 HA를 위해서는 Kubernetes에 배포 하는 것을 권장합니다.

1단계: Docker 설치

Docker가 설치되어 있지 않다면, 운영 체제에 따라 아래 지침을 따르세요. Docker EngineDocker Compose (1.28 이상 버전)이 필요합니다.

2단계: Docker에 Mattermost 배포

이 섹션은 Docker Compose 를 활용하여 Docker에 Mattermost를 배포하는 빠른 시작 가이드를 제공합니다.

참고

  • 배포 구성은 두 개의 별도 컨테이너로 구성됩니다: 데이터베이스용 컨테이너와 애플리케이션용 컨테이너입니다. NGINX를 리버스 프록시로 사용할 경우 선택적으로 세 번째 컨테이너가 추가됩니다.

  • Docker 배포에 문제가 발생했나요? 자세한 내용은 Docker 배포 문제 해결 문서를 참조하세요.

  1. 터미널 창에서 저장소를 복제하고 디렉토리로 이동하세요.

    git clone https://github.com/mattermost/docker
    cd docker
    
  2. env.example 파일을 복사하고 수정하여 .env 파일을 생성하세요.

    cp env.example .env
    

    중요

    • 최소한 .env 파일의 DOMAIN 값을 Mattermost 서버의 도메인에 맞게 수정해야 합니다.

    • MM_SUPPORTSETTINGS_SUPPORTEMAIL 을 통해 지원 이메일 을 구성하는 것을 권장합니다. 이는 사용자가 도움이 필요할 때 연락할 이메일 주소입니다.

  3. 필요한 디렉토리를 생성하고 권한을 설정하세요.

    mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
    sudo chown -R 2000:2000 ./volumes/app/mattermost
    
  4. (선택사항) NGINX용 TLS를 구성하세요. 포함된 NGINX 리버스 프록시를 사용하지 않는 경우 이 단계를 건너뛸 수 있습니다.

    새 인증서와 키를 생성하는 경우:

    bash scripts/issue-certificate.sh -d <YOUR_MM_DOMAIN> -o ${PWD}/certs
    

    인증서와 키를 포함하려면 .env 파일에서 다음 줄의 주석을 해제하고 적절한 파일을 가리키도록 하세요.

    #CERT_PATH=./certs/etc/letsencrypt/live/${DOMAIN}/fullchain.pem
    #KEY_PATH=./certs/etc/letsencrypt/live/${DOMAIN}/privkey.pem
    

    기존 인증서와 키를 사용하는 경우:

    mkdir -p ./volumes/web/cert
    cp <PATH-TO-PRE-EXISTING-CERT>.pem ./volumes/web/cert/cert.pem
    cp <PATH-TO-PRE-EXISTING-KEY>.pem ./volumes/web/cert/key-no-password.pem
    

    인증서와 키를 포함하려면 .env 파일의 다음 줄이 적절한 파일을 가리키도록 하세요.

    CERT_PATH=./volumes/web/cert/cert.pem
    KEY_PATH=./volumes/web/cert/key-no-password.pem
    
  5. Mattermost를 배포하세요.

    포함된 NGINX를 사용하지 않는 경우:

    docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml up -d
    

    새 Mattermost 배포에 접근하려면 브라우저에서 http://<YOUR_MM_DOMAIN>:8065/ 로 이동하세요.

    배포를 종료하려면:

    docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml down
    

    포함된 NGINX를 사용하는 경우:

    docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d
    

    HTTPS를 통해 새 Mattermost 배포에 접근하려면 브라우저에서 https://<YOUR_MM_DOMAIN>/ 로 이동하세요.

    배포를 종료하려면:

    docker compose -f docker-compose.yml -f docker-compose.nginx.yml down
    
  6. 첫 번째 Mattermost 시스템 관리자 사용자를 생성하고, 더 많은 사용자 초대, 그리고 Mattermost 플랫폼을 탐색하세요.

GitLab으로 SSO 구성 (선택사항)

자체 서명된 인증서로 GitLab과 SSO를 사용하려면 권한에 대한 PKI 체인을 추가해야 합니다. 이는 Token request failed: certificate signed by unknown authority 오류를 방지하기 위해 필요합니다.

PKI 체인을 추가하려면 .env 파일에서 다음 줄의 주석을 해제하고 pki_chain.pem 파일을 가리키도록 하세요:

#GITLAB_PKI_CHAIN_PATH=<path_to_your_gitlab_pki>/pki_chain.pem

그런 다음 docker-compose.yml 파일에서 다음 줄의 주석을 해제하고 동일한 pki_chain.pem 파일을 가리키도록 하세요:

# - ${GITLAB_PKI_CHAIN_PATH}:/etc/ssl/certs/pki_chain.pem:ro

mattermost-docker에서 업그레이드

mattermost-docker GitHub 저장소는 더 이상 사용되지 않습니다. Mattermost의 공식 Docker 배포 솔루션에 접근하려면 mattermost/docker GitHub 저장소를 방문하세요.

기존 mattermost/mattermost-prod-app 이미지에서 마이그레이션하려면 Mattermost에서 공식적으로 지원하는 mattermost/mattermost-enterprise-edition 또는 mattermost/mattermost-team-edition 이미지로 마이그레이션하는 것을 권장합니다. 이 이미지들은 PostgreSQL v11+ 데이터베이스를 지원하며, 이는 커뮤니티에서 오랫동안 과제였던 부분입니다. 이러한 새 이미지로 이동해도 기능이나 기능성을 잃지 않습니다.

추가 도움이나 질문이 있으면 이 이슈 를 참조하세요.

다른 버전의 Mattermost 설치

  1. 배포를 종료하세요.

  2. 저장소의 최근 변경사항을 가져오기 위해 git pull``을 실행하고, 잠재적인 ``env.example 변경사항에 주의하세요.

  3. .env 파일에서 MATTERMOST_IMAGE_TAG 를 원하는 enterprise 또는 team 이미지 버전을 가리키도록 조정하세요.

  4. Mattermost를 재배포하세요.

Docker 배포 문제 해결

M1 Mac에서 배포 중이고 Docker 컨테이너에서 권한 문제가 발생하는 경우, 세 번째 단계를 다시 수행 하고 이 명령을 건너뛰세요:

sudo chown -R 2000:2000 ./volumes/app/mattermost

일반적으로 Docker 배포에 문제가 있는 경우, docker 데몬이 활성화되어 있고 실행 중인지 확인하세요:

sudo systemctl enable --now docker

Mattermost 배포의 모든 데이터와 설정을 제거하려면:

sudo rm -rf ./volumes

PostgreSQL 문제 해결

빠른 시작 배포의 경우 .env 파일에서 Postgres 사용자 이름 및/또는 비밀번호를 변경할 수 있습니다(권장). 데이터베이스가 외부에서 관리되는 경우, 데이터베이스 관리 도구에서 비밀번호를 변경해야 합니다. 그런 다음 .env 파일을 새 자격 증명으로 업데이트하세요.

TLS & NGINX 문제 해결

Nginx용 TLS 인증서와 키 구성에 대한 자세한 가이드는 저장소의 이 문서 를 참조하세요.

Docker Preview를 사용한 Mattermost 체험

Docker를 사용하여 단일 로컬 머신에서 Mattermost를 평가하는 방법을 찾고 계신가요? Preview 모드에서 Mattermost를 설치하기 위해 Mattermost Docker Preview Image 를 사용하는 것을 권장합니다.

중요

  • 이 로컬 이미지는 자체 포함되어 있습니다(즉, 내부 데이터베이스가 있고 바로 사용할 수 있습니다). 이 이미지를 사용하는 컨테이너를 삭제하면 예상대로 데이터와 구성이 제거됩니다. 체험 배포를 사용자 지정하는 방법에 대해 자세히 알아보려면 구성 설정 문서를 참조하세요.

  • Preview 모드 는 알려진 비밀번호 문자열을 사용하고, 다른 비프로덕션 구성 설정을 포함하며, 이메일이 비활성화되어 있고, 영구 데이터를 유지하지 않으며(모든 데이터는 컨테이너 내부에 있음), 업그레이드를 지원하지 않기 때문에 프로덕션 환경에서 사용해서는 안 됩니다.

  • 비로컬 환경에서 Preview 모드 의 통화 기능을 사용할 계획이라면, 서버가 보안(HTTPS) 연결에서 실행되고 있고 네트워크 요구 사항 이 충족되는지 확인해야 합니다.

  1. Docker 를 설치하세요.

  2. Docker가 설치되면 터미널 창에서 다음 명령을 실행하세요:

docker run --name mattermost-preview -d --publish 8065:8065 --publish 8443:8443 mattermost/mattermost-preview
  1. Docker가 이미지 가져오기를 완료하면 브라우저에서 http://localhost:8065/ 로 이동하여 Mattermost를 미리 볼 수 있습니다.

  2. 미리보기 인스턴스용 계정을 만들려면 화면 오른쪽 상단의 계정이 없음 을 선택하세요. 이 옵션이 보이지 않으면 서버 열기 활성화 구성 설정이 활성화되어 있는지 확인하세요. 이 설정은 기본적으로 자체 호스팅 Mattermost 배포에서 비활성화되어 있습니다.

  3. 사용자 자격 증명으로 미리보기 인스턴스에 로그인하세요.

미리보기 배포 문제 해결

Mattermost의 Preview 모드 Docker 인스턴스는 제품 평가를 위해 설계되었으며, 이메일을 활성화하지 않고도 제품이 작동할 수 있도록 SendEmailNotifications=false 로 설정됩니다. 배포를 사용자 지정하려면 구성 설정 문서를 참조하세요.

Mattermost 미리보기 이미지와 컨테이너를 업데이트하려면 먼저 다음 명령을 실행하여 기존 mattermost-preview 컨테이너를 중지하고 삭제해야 합니다:

docker pull mattermost/mattermost-preview
docker stop mattermost-preview
docker rm mattermost-preview

새 이미지를 가져오고 컨테이너가 중지되고 삭제되면 위의 docker run 명령을 실행해야 합니다.

중요

Linux에서는 모든 docker 명령 앞에 sudo 를 포함하세요.

컨테이너 내부의 셸에 접근하려면 다음 명령을 실행하세요:

docker exec -ti mattermost-preview /bin/bash

참고

일반적인 배포 문제 해결 방법은 배포 문제 해결 문서를 참조하세요.

Docker 컨테이너를 사용하여 AWS Elastic Beanstalk에서 Mattermost 서버를 Preview 모드 로 배포할 수 있습니다. 이는 기본 인프라를 관리할 필요 없이 Mattermost 인스턴스를 빠르게 설정할 수 있게 해주므로 기능 탐색, 테스트 및 개발 목적으로 좋은 옵션입니다. 이 배포 방법은 프로덕션 환경에서 사용하지 않아야 합니다.

아래의 Elastic Beanstalk 애플리케이션 생성 프로세스는 애플리케이션과 환경 생성을 단일 워크플로우로 결합합니다:

  1. AWS 콘솔 에서 Elastic Beanstalk 를 선택하세요.

  2. Elastic Beanstalk 홈 페이지에서 애플리케이션 생성 버튼을 선택하세요.

  3. Elastic Beanstalk 애플리케이션의 애플리케이션 이름 을 입력하세요.

  4. (선택 사항) 애플리케이션 태그 를 지정하세요.

  5. 플랫폼으로 Docker 를 선택하세요.

  6. 플랫폼 분기에서 64비트 Amazon Linux 2에서 실행되는 Docker 를 선택하세요. 다중 컨테이너 Docker는 더 이상 사용되지 않습니다.

  7. 플랫폼 버전을 3.4.8 (권장) 으로 미리 선택된 상태로 두세요.

  8. 애플리케이션 코드**에서 **코드 업로드 를 선택하세요.

  9. https://raw.githubusercontent.com/mattermost/mattermost-docker-preview/master/Dockerrun.aws.json 에서 Dockerrun.aws.json 파일을 다운로드하세요.

  10. 고유한 버전 레이블 을 설정하고, 로컬 파일 을 선택한 다음 파일 선택 버튼을 클릭하여 이전 단계에서 다운로드한 파일을 찾으세요. 파일이 성공적으로 업로드됨 메시지가 표시되어야 합니다.

  11. 애플리케이션 생성 을 선택하세요. Beanstalk가 환경을 시작하는 데 몇 분이 걸릴 수 있습니다. 시작이 성공하면 큰 녹색 체크 표시와 상태 가 녹색으로 표시됩니다.

  12. 대시보드 상단의 애플리케이션 이름 옆에 있는 도메인 링크를 선택하여 환경을 테스트하세요. 또는 브라우저에 http://<your-ebs-application-url>.elasticbeanstalk.com 형식으로 도메인을 입력하세요. 원하는 경우 자체 도메인을 매핑할 수도 있습니다. 모든 것이 올바르게 작동하면 도메인이 Mattermost 로그인 페이지로 이동합니다. Mattermost 탐색을 즐기세요!

(권장) 이메일 활성화

Mattermost의 기본 Docker 인스턴스는 제품 평가를 위해 설계되었으며, 이메일을 활성화하지 않고도 제품이 작동할 수 있도록 SendEmailNotifications=false 로 설정됩니다. 제품의 전체 기능을 보려면 SMTP 이메일 활성화 를 권장합니다.

배포에 대한 더 많은 구성 및 사용자 지정 옵션은 Configuration Settings 문서를 참조하세요.

Mattermost 배포 보안 설정#

Docker 컨테이너를 사용한 Mattermost 배포는 HTTPS 및 리버스 프록시에 대한 적절한 구성으로 보안을 강화할 수 있습니다. 이 가이드는 Mattermost 배포를 위한 TLS 및 NGINX 리버스 프록시 설정 단계를 설명하여 사용자와 서버 간의 안전한 통신을 보장합니다.

  1. 리버스 프록시 역할을 하는 NGINX 컨테이너를 설정하세요. NGINX는 별도의 컨테이너로 사용하거나 호스트 시스템에 설치할 수 있습니다.

  2. NGINX 구성 및 TLS 인증서를 위한 볼륨 바인딩:

  • NGINX 구성 파일과 TLS 인증서를 위한 Docker 볼륨을 바인딩하여 이러한 자산의 지속적이고 안전한 저장을 보장하세요.

  • TLS 키와 같은 민감한 파일이 저장된 호스트 디렉토리에 권한 제한을 사용하세요.

  1. 리버스 프록시와 HTTPS를 구성하기 위해 견고한 nginx.conf 파일을 설계하여 NGINX 구성 파일을 생성하세요. 기본 예시는 다음과 같습니다:

    server {
        listen 443 ssl;
        server_name your-domain.com;
    
        ssl_certificate /etc/nginx/certs/fullchain.pem;
        ssl_certificate_key /etc/nginx/certs/privkey.pem;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        location / {
            proxy_pass http://mattermost:8065;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
        }
    }
    

적용하기 전에 nginx -t 로 구성을 확인하세요.

  1. TLS 인증서 획득:

  • 무료 자동화된 인증서를 위해 Let’s Encrypt를 사용하세요. Certbot과 같은 도구가 프로세스 자동화에 도움이 될 수 있습니다.

  • 또는 신뢰할 수 있는 인증 기관(CA)에서 인증서를 구매하고 중간 인증서와 루트 인증서 체인의 적절한 설정을 보장하세요.

개인 키를 안전하게 보관하고 Docker 이미지 내부에 직접 저장하지 마세요.

  1. Docker 네트워킹을 사용하여 컨테이너 연결하기:

    • 컨테이너를 격리하고 연결하기 위해 Docker의 네트워킹 기능을 사용하세요.

    • 안전한 통신을 보장하기 위해 사용자 정의 Docker 브리지 네트워크를 생성하세요. 예시:

      docker network create mattermost-network
      
    • 동일한 네트워크에서 Mattermost와 NGINX 컨테이너 실행하기:

      docker network connect mattermost-network mattermost
      docker network connect mattermost-network nginx
      
  2. 도메인을 서버 IP 주소로 지정하기:

    도메인(예: your-domain.com)이 서버의 공용 IP 주소를 가리키도록 하세요. IP가 동적인 경우 원활한 연결을 위해 동적 DNS(DDNS) 설정을 고려하세요.

  3. 인증서를 배치하고 구성을 업데이트한 후 NGINX 컨테이너를 재시작하세요:

  4. 컨테이너의 작동을 문제 해결하고 검증하기 위해 로그(docker logs nginx)를 사용하세요.

  5. 웹 브라우저에서 https://your-domain.com 을 방문하여 HTTPS를 통해 Mattermost가 안전하게 실행되고 있는지 확인하세요.

  6. TLS 설정의 품질을 검증하기 위해 SSL Labs(https://www.ssllabs.com/ssltest/)와 같은 도구를 사용하세요.

  7. 다운그레이드 공격을 방지하기 위해 NGINX 구성에서 HTTP Strict Transport Security(HSTS)를 활성화하세요.

  8. 과도한 요청과 같은 악의적인 트래픽을 제한하기 위해 NGINX 속도 제한 기능을 사용하세요:

추가로 고려할 사항:

  • 컨테이너 런타임을 보호하기 위해 Seccomp 프로필과 AppArmor와 같은 Docker의 보안 기능을 사용하세요.

  • --privileged 권한으로 컨테이너를 실행하지 말고 사용자 네임스페이스를 활용하세요.

  • 서드파티 이미지의 취약점에 노출되는 것을 방지하기 위해 항상 신뢰할 수 있는 이미지(예: 공식 NGINX 및 Mattermost 이미지)를 사용하세요.

  • 알려진 취약점에 대한 패치가 적용되도록 Mattermost, NGINX, Docker를 정기적으로 최신 버전으로 업데이트하세요.

  • Fail2Ban이나 Wazuh와 같은 도구를 사용하여 무단 접근을 제한하고 트래픽을 모니터링하기 위한 적절한 방화벽 규칙을 설정하세요.

이 단계들을 따르면 Docker 컨테이너를 사용하는 Mattermost 배포가 NGINX를 통한 효율적인 프록시와 함께 HTTPS를 통해 안전하게 접근 가능해집니다. 추가 보안 권장사항을 구현하면 진화하는 위협으로부터 환경을 더욱 보호할 수 있습니다.