컨테이너를 사용한 Mattermost 배포
Mattermost v12.0요약
컨테이너 기술을 사용하여 Mattermost 서버를 배포하면 기능 탐색, 테스트, 개발 목적으로 활용할 수 있으며, 기본 인프라를 관리하지 않고도 빠르게 Mattermost 인스턴스를 설정할 수 있습니다. Docker가 설치되어 있지 않다면 운영 체제에 따라 아래 지침을 따르세요.
컨테이너 기술을 사용하여 Mattermost 서버를 배포하면 기능 탐색, 테스트, 개발 목적으로 활용할 수 있으며, 기본 인프라를 관리하지 않고도 빠르게 Mattermost 인스턴스를 설정할 수 있습니다. 이 배포 방법은 기본적으로 클러스터형 배포 또는 고가용성(HA) 구성을 지원하지 않으므로 프로덕션 환경에서는 사용하지 않아야 합니다.
- Docker를 사용한 Mattermost 서버 배포는 Linux 운영 체제에서만 공식적으로 지원됩니다.
- macOS 및 Windows Docker 배포는 테스트 및 개발 목적으로만 지원됩니다.
- Docker는 자동 장애 조치, 공유 스토리지, 로드 밸런싱과 같은 핵심 기능이 없으므로 고가용성(HA)에 적합하지 않습니다. 또한 Docker는 여러 노드를 관리하고 장애에서 복구하는 데 어려움이 있습니다. 이러한 기능을 통해 안정성을 확보하려면 HA를 위해 쿠버네티스에 배포할 것을 권장합니다.
Docker가 설치되어 있지 않다면 운영 체제에 따라 아래 지침을 따르세요. Docker Engine과 Docker Compose(릴리즈 1.28 이상)가 필요합니다.
FIPS / STIG 규정 준수 이미지가 필요하십니까? Mattermost는 모든 컨테이너 이미지에 대해 FIPS 규정 준수, STIG 강화 변형을 게시합니다. 이미지 태그를 교체하는 것만으로 충분합니다. FIPS / STIG 컨테이너 빌드를 참조하세요.
Docker에 Mattermost 배포#
이 섹션은 Docker Compose를 활용하여 Docker에 Mattermost를 배포하기 위한 빠른 시작 가이드를 제공합니다.
- 이 배포 구성은 데이터베이스용 컨테이너와 애플리케이션용 컨테이너, 두 개의 별도 컨테이너로 구성됩니다. 역방향 프록시로 NGINX를 사용하는 경우 선택 사항인 세 번째 컨테이너가 추가됩니다.
- Docker 배포에 문제가 있습니까? 자세한 내용은 Docker 배포 문제 해결 문서를 참조하세요.
-
터미널 창에서 리포지터리를 복제하고 디렉터리로 이동합니다.
git clone https://github.com/mattermost/docker cd docker -
env.example파일을 복사하고 조정하여.env파일을 만듭니다.cp env.example .env
- 최소한 `.env` 파일의 `DOMAIN` 값을 Mattermost 서버의 도메인에 맞게 수정해야 합니다.
- `MM_SUPPORTSETTINGS_SUPPORTEMAIL`을 통해 [지원 이메일](/administration-guide/configure/site-configuration-settings#support-email-address)을 구성할 것을 권장합니다. 이는 사용자가 도움이 필요할 때 문의하는 이메일 주소입니다.
-
필요한 디렉터리를 만들고 권한을 설정합니다.
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes} sudo chown -R 2000:2000 ./volumes/app/mattermost -
(선택 사항) NGINX용 TLS를 구성합니다. 포함된 NGINX 역방향 프록시를 사용하지 않는 경우 이 단계를 건너뛸 수 있습니다.
리소스 제한: pids_limit를 설정하는 사용자 지정 docker-compose.yml 파일을 사용하는 경우, 정상적인 연결 확장을 허용하면서 리소스를 제한하기 위해 mem_limit를 대신 사용할 것을 권장합니다. 낮은 pids_limit 값은 컨테이너가 충분한 프로세스나 스레드를 만들지 못하게 하여 부하 상태에서 불안정한 동작을 일으킬 수 있습니다. docker-compose.yml의 현재 기본값은 mem_limit: 4G로 설정되어 있습니다.
새 인증서와 키 만들기#
bash scripts/issue-certificate.sh -d -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 .pem ./volumes/web/cert/cert.pem
cp .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
- Mattermost를 배포합니다.
포함된 NGINX를 사용하지 않고 배포#
docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml up -d
새 Mattermost 배포에 접속하려면 브라우저에서 http://: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:///로 이동합니다.
배포를 종료하려면 다음 명령을 실행합니다.
docker compose -f docker-compose.yml -f docker-compose.nginx.yml down
- 첫 번째 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 설치#
-
배포를 종료합니다.
-
git pull을 실행하여 리포지터리의 최신 변경 사항을 가져오고,env.example의 변경 가능성에 주의합니다. -
.env파일의MATTERMOST_IMAGE_TAG를 원하는 Enterprise 또는 Team 이미지 버전을 가리키도록 조정합니다.
**프로덕션 환경**에서는 `MATTERMOST_IMAGE_TAG=release-10`과 같은 일반 태그보다 `MATTERMOST_IMAGE_TAG=release-10.5`와 같은 특정 버전 태그를 사용할 것을 권장합니다. 일반 `release-x` 태그는 개발용으로만 제공되며 해당 메이저 버전 내의 새 패치 릴리즈를 자동으로 받지 않습니다. 특정 버전 태그를 사용하면 프로덕션 배포에 더 재현 가능하고 결정론적인 환경을 보장합니다.
- 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 미리보기로 Mattermost 체험#
Docker를 사용하여 단일 로컬 컴퓨터에서 Mattermost를 평가할 방법을 찾고 계십니까? 미리보기 모드로 Mattermost를 설치하려면 Mattermost Docker Preview Image를 사용할 것을 권장합니다.
- 이 로컬 이미지는 자체 완결형입니다(즉, 내부 데이터베이스가 있으며 바로 작동합니다). 이 이미지를 사용하는 컨테이너를 삭제하면 예상대로 데이터와 구성이 제거됩니다. 체험 배포를 사용자 지정하는 방법은 구성 설정 문서를 참조하세요.
- 미리보기 모드는 알려진 비밀번호 문자열을 사용하고, 프로덕션이 아닌 다른 구성 설정을 포함하며, 이메일이 비활성화되어 있고, 영구 데이터를 유지하지 않으며(모든 데이터가 컨테이너 내부에 있음), 업그레이드를 지원하지 않으므로 프로덕션 환경에서 사용하지 않아야 합니다.
- 로컬이 아닌 환경에서 미리보기 모드의 통화 기능을 사용하려는 경우, 서버가 보안(HTTPS) 연결에서 실행되고 있으며 통화를 실행하기 위한 네트워크 요구사항이 충족되는지 확인해야 합니다.
-
Docker를 설치합니다.
-
Docker가 준비되면 터미널 창에서 다음 명령을 실행합니다.
docker run --name mattermost-preview -d --publish 8065:8065 --publish 8443:8443 mattermost/mattermost-preview -
Docker가 이미지 가져오기를 마치면 브라우저에서
http://localhost:8065/로 이동하여 Mattermost를 미리 봅니다. -
화면 오른쪽 상단의 계정이 없으신가요를 선택하여 미리보기 인스턴스용 계정을 만듭니다. 이 옵션이 보이지 않으면 오픈 서버 활성화 구성 설정이 활성화되어 있는지 확인하세요. 이 설정은 자체 호스팅 Mattermost 배포에서 기본적으로 비활성화되어 있습니다.
-
사용자 자격 증명으로 미리보기 인스턴스에 로그인합니다.
미리보기 배포 문제 해결#
Mattermost용 미리보기 모드 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 배포 문제 해결을 참조하고, 컨테이너에 한정되지 않는 문제는 배포 문제 해결을 참조하세요.
Mattermost 배포 보안 설정#
Docker 컨테이너를 사용한 Mattermost 배포는 HTTPS 및 역방향 프록시의 적절한 구성으로 보안을 강화할 수 있습니다. 이 가이드는 Mattermost 배포를 위한 TLS 및 NGINX 역방향 프록시 설정 단계를 설명하여 사용자와 서버 간의 안전한 통신을 보장합니다.
- 역방향 프록시 역할을 할 NGINX 컨테이너를 설정합니다. NGINX를 별도 컨테이너로 사용하거나 호스트 컴퓨터에 설치할 수 있습니다.
- NGINX 구성 및 TLS 인증서에 대한 볼륨 바인딩:
- NGINX 구성 파일과 TLS 인증서에 대한 Docker 볼륨을 바인딩하여 이러한 자산의 영구적이고 안전한 스토리지를 보장합니다.
- TLS 키와 같은 민감한 파일이 저장된 호스트 디렉터리에 권한 제한을 사용합니다.
-
역방향 프록시 및 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로 구성을 확인합니다.
- TLS 인증서 발급:
- 무료 자동 인증서를 위해 Let's Encrypt를 사용합니다. Certbot과 같은 도구를 사용하면 프로세스를 자동화할 수 있습니다.
- 또는 신뢰할 수 있는 인증 기관(CA)에서 인증서를 구매하고 중간 및 루트 인증서 체인을 올바르게 설정합니다.
개인 키를 안전하게 보관하고 Docker 이미지 내에 직접 저장하지 마세요.
-
Docker 네트워킹을 사용하여 컨테이너 연결:
-
Docker의 네트워킹 기능을 사용하여 컨테이너를 격리하고 연결합니다.
-
안전한 통신을 보장하기 위해 커스텀 Docker 브리지 네트워크를 만듭니다. 예시:
docker network create mattermost-network -
동일한 네트워크에서 Mattermost 및 NGINX 컨테이너를 시작합니다.
docker network connect mattermost-network mattermost docker network connect mattermost-network nginx
-
-
서버 IP 주소를 도메인으로 지정:
도메인(예: your-domain.com)이 서버의 공용 IP 주소를 가리키는지 확인합니다. IP가 동적인 경우 원활한 연결을 위해 동적 DNS(DDNS)를 설정하는 것을 고려하세요.
-
인증서를 배치하고 구성을 업데이트한 후 NGINX 컨테이너를 재시작합니다.
-
로그(docker logs nginx)를 사용하여 컨테이너 작동 상태를 문제 해결하고 검증합니다.
-
웹 브라우저에서
https://your-domain.com을 방문하여 Mattermost가 HTTPS로 안전하게 실행되는지 확인합니다. -
SSL Labs와 같은 도구 : https://www.ssllabs.com/ssltest/를 사용하여 TLS 설정 품질을 검증합니다.
-
다운그레이드 공격을 방지하기 위해 NGINX 구성에서 HTTP Strict Transport Security(HSTS)를 활성화합니다.
-
과도한 요청과 같은 남용 트래픽을 제한하기 위해 NGINX 속도 제한 기능을 사용합니다.
추가적으로 다음 사항을 고려하세요.
- Seccomp 프로파일 및 AppArmor와 같은 Docker 보안 기능을 사용하여 컨테이너 런타임을 보호합니다.
--privileged옵션으로 컨테이너를 실행하지 않고 사용자 네임스페이스를 활용합니다.- 서드파티 이미지의 취약점 노출을 방지하기 위해 항상 신뢰할 수 있는 이미지(예: 공식 NGINX 및 Mattermost 이미지)를 사용합니다.
- 알려진 취약점에 대한 패치가 적용되도록 Mattermost, NGINX 및 Docker를 정기적으로 최신 버전으로 업데이트합니다.
- 무단 접근을 제한하고 Fail2Ban이나 Wazuh와 같은 도구를 사용하여 트래픽을 모니터링하기 위해 적절한 방화벽 규칙을 설정합니다.
이 단계를 따르면 Docker 컨테이너를 사용한 Mattermost 배포가 NGINX를 통한 효율적인 프록시로 HTTPS를 통해 안전하게 접근할 수 있습니다. 추가 보안 권장 사항을 구현하면 진화하는 위협으로부터 환경을 더욱 보호할 수 있습니다.