클라우드에 Mattermost 설치하기.

Mattermost는 Slack 처럼 사용할 수 있는 오픈소스 사내 메신저 프로그램 입니다. Slack과는 달리, 온프레미스 환경에 직접 호스팅할 수 있으며 데이터의 관리 주체가 외부 업체가 아닌 기업이 직접 데이터를 관리할 수 있다는 장점이 있습니다. 삼성, 테슬라, 미국 사회보장국 등 쟁쟁한 대기업들이 사내 메신저로 Slack 대신 Mattermost를 사용하고 있는데요, 이번 포스팅에서는 Mattermost를 클라우드에 설치하는 방법에 대해 다루고자 합니다.

저는 다음과 같은 환경에 설치할 것 입니다:
Vultr Cloud Compute
AWS의 EC2 비슷한 VPS(Virtual Private Server – 가상 사설 서버)호스팅 서비스 입니다. 비용 면에서 AWS보다 저렴합니다. 100% 업타임 보장을 강점으로 내걸고 있고, 한국 서울 데이터센터도 있어서 접속도 안정적입니다. 이 링크를 통해서 회원가입을 하시면, 한달동안 테스트할 수 있는 100달러 크레딧을 받으실 수 있습니다.

Vultr Managed PostgreSQL Database
AWS의 RDS 비슷한 DBaaS (Database as a Service) 입니다. 저는 PostgreSQL을 직접 깔고 관리하기 귀찮으니까 이걸 사용할께요.

Vultr Object Storage
AWS의 S3 비슷한 개체 저장소(Object Storage) 입니다. Cloud Compute 인스턴스에 사진 파일들이 쌓이면 감당하기 힘드니까 이걸 사용하도록 할께요.

VPS 생성

Vultr에 회원 가입을 합니다. 이 링크를 통해서 회원가입을 하시면, 한달동안 Vultr의 모든 서비스를 테스트할 수 있는 100달러 크레딧을 받으실 수 있습니다.

회원가입 후, 신용 카드를 등록하면 Cloud Compute 인스턴스를 생성할 수 있습니다.

+ 버튼을 누르고, Deploy New Server 를 누릅니다.

Deploy New Instance 에서 Optimized Cloud Compute, Cloud Compute, Cloud GPU, Bare Metal 중 선택할 수 있습니다. 상황에 맞게 알맞은 인스턴스를 선택하세요. 일반적으로, Mattermost 서버는 그렇게 많은 사양을 요구하지 않습니다.

Optimized Cloud Compute 는 독립된 CPU코어를 사용하고, Cloud Compute는 다른 사람들과 CPU코어를 공유합니다.

저는 Cloud Compute 로 진행하겠습니다.

CPU와 Storage 타입을 선택할 수 있습니다. AMD와 인텔의 최신 CPU와 NVMe SSD를 사용하는 고성능 가상머신, 인텔의 제온 CPU를 사용하는 고클럭 플랜, 인텔의 지난 세대 CPU와 일반 SSD를 사용하는 일반 사양 플랜을 선택할 수 있습니다.

앞서 말씀드렸듯이 Mattermost 서버는 많은 사양을 요구하지 않습니다.

저는 Regular Performance 플랜으로 사용하겠습니다.

데이터센터 위치를 선택할 수 있습니다. AWS와는 다르게 어느 지역을 선택해도 요금은 동일합니다. 서울을 선택하겠습니다.

서버 운영 체제를 선택할 수 있습니다. 저는 우분투 리눅스를 선호하기에, 우분투 최신 LTS버전인 22.04 LTS로 진행하겠습니다.

서버 사양을 선택할 수 있습니다. 당연한 이야기겠지만 많은 사람이 Mattermost 를 사용할 수록 서버의 크기가 커야합니다. 하지만 우리는 데이터베이스 서버를 Vultr Managed Database로 분리할 것이고, 미디어 스토리지 또한 Vultr Object Storage로 분리할 것이기 때문에 DB자원과 VPS인스턴스의 스토리지 크기가 그렇게 중요하지 않습니다. Mattermost를 사용할 팀의 규모에 맞게 서버 사양을 선택하세요. 일반적으로 10명에서 100명 사이의 팀은 5달러 플랜으로도 충분합니다.

저는 5달러, 1vCPU / 1GB RAM / 1TB Bandwidth 플랜으로 진행하겠습니다.

자동 백업 옵션을 선택할 수 있습니다. DB를 VPS인스턴스에서 함께 운영할 경우, 이 옵션을 켜는것이 좋습니다. 저는 Mattermost 서버만 VPS에서 구동할 예정이라 자동 백업을 끄고, 작업 전 VPS의 스냅샷을 찍는 방법을 이용하려고 합니다.

부가 기능과 SSH Key는 입맛에 맞게 설정하시면 됩니다. 저는 IPv6 옵션을 껐습니다.

알아볼 수 있는 서버 호스트네임과 라벨을 붙혀줍니다. 저는 mattermost-test 라고 지어줬습니다.

가격을 확인하고 Deploy Now 를 누르면 VPS 인스턴스가 생성됩니다.

Managed PostgreSQL 생성

새 VPS가 생성되는데 약 3분에서 5분정도 시간이 소요됩니다. 그동안 Managed PostgreSQL를 생성하면 됩니다. Mattermost는 대중적으로 널리 사용되는 MySQL 또한 사용할 수 있지만, 검색 기능 관련해서 MySQL에서는 한글 검색이 원활하지 않은 문제가 있습니다. 별도의 설정으로 해결할 수 있지만, 이러한 문제가 없는 PostgreSQL로 진행하는 것을 추천드립니다.

추후 데이터베이스 설정을 위하여 PgAdmin 을 미리 컴퓨터에 받아두세요. – 다운로드

Products 메뉴에서 Databases로 접속합니다.

+ 버튼을 눌러서 Add Managed Database 를 선택합니다.

데이터베이스 엔진으로 PostgreSQL 버전 15를 선택합니다.

Server Configuration 에서 서버 타입과 인스턴스, 복제 노드 수를 선택할 수 있습니다. 상황에 맞게 알맞은 선택을 하시면 됩니다. 저는 Cloud Compute(Regular Performance)에 15달러 플랜, 0개의 복제 노드를 선택하겠습니다. 고가용성이 필요한 팀에서는 설정을 바꿔주세요.

데이터베이스 서버 위치를 선택합니다. 서울로 선택하겠습니다.

식별할 수 있는 라벨을 붙혀주고, 가격을 확인하고, Deploy Now를 눌러서 데이터베이스 서버를 시작합니다.

Users & Databases 메뉴로 들어와서 Add New User 를 눌러 새 유저를 생성하고, Add New Database를 눌러 새 데이터베이스를 생성합니다.

다운로드한 pgAdmin을 엽니다. vultradmin 유저와 비밀번호로 데이터베이스 서버에 접속합니다.

다음 SQL 명령어를 실행해서 새로 생성한 유저에게 데이터베이스 사용 권한을 부여합니다.

GRANT ALL ON DATABASE 데이터베이스이름 TO 데이터베이스유저;
ALTER DATABASE 데이터베이스이름 OWNER TO 데이터베이스유저;
GRANT USAGE, CREATE ON SCHEMA PUBLIC TO 데이터베이스유저;

데이터베이스가 준비되었습니다.

Object Storage 생성

사진과 미디어와 파일들을 저장할 Object Storage를 생성합니다.

Products > Storage – Block / Object > Object Storage 순으로 들어가고, + 버튼을 눌러서 Add Object Storage 를 눌러주세요.

오브젝트 스토리지 위치를 선택하고, 라벨을 지정해주고, Add를 눌러서 Object Storage 플랜을 생성합니다. 기본 5달러에 1000GB의 저장공간과 1TB의 대역폭이 포함되어 있으며, 초과 시 저장공간은 1GB당 0.005달러, 대역폭은 TB당 10달러가 청구됩니다.

오브젝트 스토리지 플랜이 활성화되었으면 들어가서 Buckets 를 눌러줍니다.

Create Bucket를 누릅니다.

버킷 이름을 지어주고 Create Bucket을 눌러줍니다.

SSH 접속 및 VPS 재시동

생성한 VPS 인스턴스에 할당된 IP, 사용자명, 비밀번호로 SSH클라이언트를 이용해서 VPS에 접속하세요. 최초 접속 후 재시동이 필요합니다. 재시동 명령어로 VPS를 재시동해줍니다.

reboot

Vultr의 VPS는 root 권한으로 생성되기 때문에 sudo를 생략했습니다.

도메인 연결

도메인의 A레코드에 VPS IP를 연결해줍니다.

서버를 최신 상태로 만들기

다음 명령어를 통해 서버를 최신 상태로 업데이트합니다.

apt update
apt upgrade

필요한 경우 VPS를 재시동하세요.

Docker 설치

Docker를 사용하는것이 빠르고 편리하게 유지보수할 수 있습니다.

다음 Docker 문서를 참고하여 Docker를 설치합니다.

https://docs.docker.com/engine/install/ubuntu/

Docker 설치가 완료되었으면, Docker Compose도 설치합니다.

apt install docker-compose

Mattermost Docker Git 복사

다음 명령어를 통해 Mattermost의 Docker 설치 Git을 복사합니다.

git clone https://github.com/mattermost/docker
cd docker

다음 명령어를 통해 설정 파일을 활성화합니다.

cp env.example .env

.env 파일 수정

방금 Github에서 내려받은 docker-compose 파일에는 PostgreSQL을 함께 설치하고, 그 설치한 PostgreSQL서버를 이용합니다. 우리는 이걸 이용하지 않고 Vultr Managed PostgreSQL Database를 사용하니 수정이 필요합니다.

Cyberduck 등의 소프트웨어를 사용하여 SFTP를 연결한 후, 다음 파일을 텍스트 편집기로 열어줍니다.

/root/docker/.env

파일이 보이지 않는다면, 숨김 파일까지 보이기를 누르면 보입니다.

.env 파일을 열고 우리가 수정해야 할 부분은 다음과 같습니다.

  • DOMAIN=mm.example.com
    사용할 도메인으로 설정해주세요.
  • MATTERMOST_IMAGE=mattermost-enterprise-edition 을 MATTERMOST_IMAGE=mattermost-team-edition 으로 바꿔줍니다.

다음 값들을 전부 주석처리 합니다.

  • POSTGRES_IMAGE_TAG=13-alpine
  • POSTGRES_DATA_PATH=./volumes/db/var/lib/postgresql/data
  • POSTGRES_USER=mmuser
  • POSTGRES_PASSWORD=mmuser_password
  • POSTGRES_DB=mattermost
  • CERT_PATH=./volumes/web/cert/cert.pem
  • KEY_PATH=./volumes/web/cert/key-no-password.pem

다음 값들을 주석처리 해제합니다.

  • CERT_PATH=
  • KEY_PATH

Vultr 데이터베이스 관리 콘솔에 접속합니다. Connection Details 에서 앞서 생성한 데이터베이스와 유저를 선택합니다. Copy PostgreSQL URL 을 누릅니다. 그러면 다음과 같이 복사됩니다.

postgres://데이터베이스유저:할당된호스트네임.vultrdb.com:포트/데이터베이스

다음 값을 위 URL로 대체합니다.

  • MM_SQLSETTINGS_DATASOURCE

다음 값은 제거합니다.

?sslmode=disable&connect_timeout=10

docker-compose 파일 수정

앞서 말씀드렸듯이 이 docker-compose 파일은 PostgreSQL을 포함합니다. 따라서 제거해줍니다.

docker-compose.yml 파일을 엽니다.

postgres 부분을 제거합니다.

mattermost 부분에도 postgres 부분을 제거해줍니다.

두개 다 삭제하였으면 저장합니다.

필요한 디렉토리 추가

다음 명령어를 실행하여 Mattermost가 필요로 하는 디렉토리를 추가하고 권한을 설정합니다.

mkdir -p ./volumes/app/mattermost/{config,data,logs,plugins,client/plugins,bleve-indexes}
sudo chown -R 2000:2000 ./volumes/app/mattermost

방화벽 오픈

HTTP, HTTPS 포트를 열어줍니다. 이 외에 다른 포트도 필요하면 열어줍니다. Mattermost 가 사용하는 포트는 이 문서에 나와있습니다.

ufw allow 80
ufw allow 443

Mattermost 실행

다음 명령어를 입력하여 Mattermost를 실행합니다

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

인증서 발급

HTTPS 통신을 위해 인증서를 발급합니다.

bash /root/docker/scripts/upgrade-postgres.sh -d 도메인명 -o ${PWD}/certs

이메일 주소를 입력하고 약관에 동의하면 인증서가 발급됩니다.

Mattermost 재시동

다음 명령어를 입력해서 Mattermost를 종료합니다.

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

다음 명령어를 입력해 Mattermost를 재시작합니다.

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

Mattermost 접속 및 계정 생성

이제 브라우저에 도메인을 입력하면 Mattermost에 접속할 수 있습니다.

Mattermost 한국어 설정

계정 생성 후 System Console에 접속합니다.

Localization 에서 한국어를 선택합니다. 로그아웃 후 다시 로그인합니다.

Mattermost Object Storage 설정

Mattermost System Console 에 접속합니다.

ENVIRONMENT 메뉴에서 File Storage를 선택합니다.

File Storage System을 AmazonS3으로 설정합니다.

앞서 생성했던 Vultr Object Storage의 값을 입력합니다.

  • Amazon S3 Bucket: 생성한 버킷 이름
  • Amazon S3 Access Key ID: 엑세스 키
  • Amazon S3 Secret Access Key: 비밀키
  • Amazon S3 Endpoint: S3 호스트네임

다 설정하였으면 저장하고 Test Connection 을 눌러 연결을 테스트합니다. 그리고 Mattermost 도커를 재시작합니다. Object Storage 설정은 Mattermost를 재시작해야 적용됩니다.

다 끝났습니다!


게시됨

카테고리

작성자

태그:

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다