Docker를 이용한 Mattermost 셀프 호스팅 설치 가이드
Mattermost는 Slack과 유사한 협업 및 커뮤니케이션 플랫폼인데, 오픈소스이다.
자체 서버에 직접 설치(Self-Hosting)하여 데이터를 완벽하게 통제하고 조직의 보안 정책에 맞게 운영할 수 있다는 큰 장점이 있다.
또한 Slack과 거의 유사해서 매우 쉽게 이전할 수 있다. (slack과 Integration도 쉽고, 이전 기능도 제공한다.)
서버 배포에는 여러 가지 방법을 지원한다. Kubernetes
, Docker
,Linux Install
https://docs.mattermost.com/deploy/server/server-deployment-planning.html
Server deployment planning - Mattermost documentation
Previous Application architecture
docs.mattermost.com
나는 Docker을 이용하여 설치하는 방법에 대해서 알아볼 것이다.
1. Install Docker
우선 Docker을 설치해야 한다. Docker 설치법은 이미 다뤘으니 스킵하겠다.
2. Deploy Mattermost On Docker
2-1. Clone repository
우선 mattermost repository에서 clone을 해준다.
git clone https://github.com/mattermost/docker
cd docker
2-2. Settings
이후 기본적인 환경변수 세팅을 진행해 주기 위해 env
파일을 생성해 준다.
cp env.example .env
우선 필수적으로 자신의 DOMAIN
을 입력해줘야 한다.
.env
파일을 열어 DOMAIN
변수에 Mattermost에 접속할 서버의 IP 주소를 https://
를 제외하고 적어준다. (EX: DOMAIN=localhost
)
다음으로는 MATTERMOST_IMAGE
와 MATTERMOST_IMAGE_TAG
을 작성해 준다.
docker 사이트에서 자신이 선택한 Image에 맞는 가장 최신 이미지의 tag를 적어주면 된다.
다음으로는 Mattermost 데이터(설정, 데이터, 로그 등)를 저장할 디렉토리를 생성하고 권한을 설정해 준다.
mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
sudo chown -R 2000:2000 ./volumes/app/mattermost
mkdir -p ./volumes/web/cert
sudo chown -R 2000:2000 ./volumes/web/cert
2-3. (Optional) Nginx settings
만약 Nginx를 함께 사용하려면 추가 설정이 필요하다.
우선 아주 간단하게 chatgpt에게 nginx와 리버스 프록시에 대하여 물어보면 아래와 같이 대답한다.
리버스프록시
란, 클라이언트와 서버 사이에서 중개자 역할을 하는 서버로, 클라이언트가 요청을 보내면 리버스프록시가 이를 받아서 내부 서버로 전달하고 응답을 다시 클라이언트로 보내게 된다. 이 과정을 통해 보안강화, SSL 종료, 로드밸런싱 등의 기능을 제공한다.
Nginx
란, 가볍고 성능이 좋은 웹서버이자 리버스 프록시 서버이다. 적은 리소스로 많은 동시 접속을 처리할 수 있어 인기가 많다.
아무튼 위 설정도 같이 진행해 보도록 하겠다.
Nginx를 설정하려면 SSL 인증서라는 것이 필요하다. SSL 인증서를 생성하는 방법은 도메인이 있는 경우와 없는 경우 모두 만들 수 있다.
도메인이 있는 경우
만약 자신이 실제 도메인을 가지고 있고, SSL 인증서를 새로 만들어야 한다면 아래 방법을 이용하면 된다.
둘 다 동일하게 certbot
을 이용하는 거라 그냥 간편하게 mattermost의 script를 사용하는 것이 편하다.
- mattermost에서 제공하는 script 사용
bash scripts/issue-certificate.sh -d <YOUR_MM_DOMAIN> -o ${PWD}/certs
- Let's Encrypt 인증서 사용
sudo apt update
sudo apt install certbot
sudo certbot certonly --standalone -d YOUR_DOMAIN_NAME
sudo cp /etc/letsencrypt/live/YOUR_DOMAIN_NAME/fullchain.pem ./volumes/web/cert/cert.pem
sudo cp /etc/letsencrypt/live/YOUR_DOMAIN_NAME/privkey.pem ./volumes/web/cert/key-no-password.pem
sudo chmod 644 ./volumes/web/cert/*.pem
이미 SSL 인증서를 가지고 있는 경우에는 해당 인증서를 옮겨주거나 혹은 .env에서 경로를 수정해 주면 된다.
만약 옮길 거라면 위에서 생성해준 .volumes/web/cert
에 옮겨주면 되고, 경로를 바꾸려면 .env
에서 CERT_PATH
와 KEY_PATH
에 경로와 파일명을 적어주면 된다.
도메인이 없는 경우
도메인이 없는 경우(로컬에서 사용하는 경우) 아래와 같이 개발용 SSL 인증서를 생성하여 사용하면 된다.
cd ./volumes/web/cert
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key-no-password.pem -out cert.pem
sudo chmod 644 ./volumes/web/cert/*.pem
이때 나머지 질문들은 대충 입력하거나. 을 입력해서 비워놓아도 되고 마지막에 Common Name(CN)
은 localhost를 적어주면 된다.
3. RUN
마지막으로 Docker Compose를 사용하여 Mattermost 컨테이너를 백그라운드에서 실행시켜 준다.
Nginx 미사용 시
docker compose -f docker-compose.yml -f docker-compose.without-nginx.yml up -d
Nginx 사용 시
docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d
4. Connect
Nginx 사용 시
nginx 설정을 했다면, 주소창에 https://{DOMAIN}
혹은 https://{DOMAIN}:443
으로 접속하면 열린다.
(nginx가 443을 8065로 매핑하는 설정이 conf에 있기 때문 )
(이때 만약 개발용 SSL을 적용했다면 경고가 뜰 텐데 그냥 신뢰하고 접속하면 된다.-> mattermost 프로그램에서도 마찬가지)
Nginx 미사용 시
nginx 설정을 하지 않았다면, 주소창에 https://{DOMAIN}:8065
를 치면 접속이 가능하다. 포트를 명시해줘야 한다는 점이 차이점이다.
5. Reference
더욱 자세한 가이드 및 docker 외의 다른 방법으로 설치하는 경우는 docs를 참고하면 좋을 것 같다.
Deploy Mattermost using Containers - Mattermost documentation
This guide provides step-by-step instructions for deploying Mattermost using Docker containers. Warning Mattermost server deployment using Docker is officially supported on Linux operating systems only. macOS and Windows Docker deployments are supported fo
docs.mattermost.com
이 외의 이메일 알림이나 플러그인 사용법 같은 기본적인 설정은 다른 글에서 다루도록 하겠다.
6. Appendix
6-1. localhost를 도메인처럼 접속하기
나는 127.0.0.1을 따로 매핑을 해서 로컬에서 접속할 때는 도메인처럼 접속하도록 설정을 해줬다.
물론 외부에서 접속할 때는 ip를 입력해줘야 하지만 로컬에서는 아래와 같이 매핑하면 mattermost.local
로 접속하면 접속이 가능해진다.
sudo nano /etc/hosts
# 편집기에 아래 주소를 매핑
127.0.0.1 mattermost.local
(만약 nginx를 사용하지 않는다면 mattermost.local:8065
로 접속해야 함)
6-2. nginx 설정
nginx에서 하나의 IP를 여러 웹사이트를 호스팅 할 수 있는데, conf
에 있는 server_name을 통해서 어떤 요청이 어떤 사이트로 가야 하는지를 구분하게 된다.
이때 server_name = _
로 선언하면 어떤 ip로 요청이 오든 해당 블록을 실행한다는 뜻이다.
따라서 만약 nginx를 이용해서 하나의 서버만 다룬다면 저렇게 와일드카드로 선언해 놔도 되고, 각 사이트마다 다른 설정을 하기 위해서는 해당 IP마다 블록을 설정해 주면 된다.
'알쓸신잡' 카테고리의 다른 글
Microsoft Dev Tunnels (0) | 2025.04.11 |
---|---|
Mattermost SMTP 설정 (0) | 2025.04.10 |
VSCode github copilot을 이용한 MCP서버 사용 (0) | 2025.04.01 |
맥북 한영키 윈도우 처럼 세팅 (0) | 2025.03.28 |
Obsidian Auto card link 플러그인 (0) | 2025.03.28 |