Jun's Blog

Mattermost

Slack+Notion 을 하나로 Mattermost

Mattermost 란?

  • mattermost 는 slack 과 유사한 오픈소스 프로젝트로 채널별로 글을 남기거나 개인 메세지를 보낼 수 있다.
  • 그리고 다양한 plugin을 지원한다. 여기에 focalboard라는 plugin이 있는데 이건 notion과 유사하다.
  • 즉, slack 에서 쓰는 것 처럼 채널을 파서 관련된 프로젝트를 연결하여 문서화 할 수 있다.
  • self-hosting이 가능하여 직접 구축하고 운영 가능하다.

mattermost 설치

  • 간단하게 도커로 배포할 수 있지만 여기서는 실행파일을 직접 받아와서 설치하는 방식으로 해본다.
  • 최신 버전의 mattermost 프로그램 다운로드 + 압축 풀기 + 옮기기 + data 디렉토리 생성
wget https://releases.mattermost.com/9.4.1/mattermost-9.4.1-linux-amd64.tar.gz
tar -xvzf mattermost-9.4.1-linux-amd64.tar.gz
mv mattermost /opt
mkdir /opt/mattermost/data
  • mattermost 유저&그룹 생성 + 권한 부여
useradd --system --user-group mattermost
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost
  • 서비스 등록 (Rocky Linux 기준) /lib/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=network.target

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target
  • 서비스 활성화 및 실행
systemctl daemon-reload
systemctl enable mattermost.service
systemctl start mattermost.service

하지만 여기서 에러가 발생한다. 아직 DB 연결을 안해줘서 그렇다.
그럼 이제 연결할 DB인 PostgreSQL 설치 및 설정으로 넘어가자.

PostgreSQL 설치 및 설정

  • dnf를 이용하여 PostgreSQL 설치
  • DB 초기화
  • DB 서비스 실행
  • DB 접속
dnf install postgresql postgresql-contrib postgresql-server
/usr/bin/postgresql-setup --initdb
sudo --login --user postgres
psql
  • PostgreSQL에서 mattermost용 유저 및 데이터베이스 생성
CREATE USER mmuser PASSWORD 'password';
SELECT * FROM PG_USER; -- 전체 유저 및 유저에 대한 권한 확인
CREATE DATABASE mattermost OWNER mmuser;
SELECT * FROM PG_DATABASE; -- 생성된 데이터베이스 및 부여된 권한 확인
  • 하지만 내가 사용한 PostgreSQL 13버전은 기본적으로 접속 방법이 ident로 되어있다. 이럴 경우 password로 접속이 되지 않는다.
  • pg_hba.conf 파일에서 ident를 md5로 변경한다.
  • DBeaver와 같은 Client 프로그램이나 외부에서 psql로 접속하려고 하는 경우에도 막혀서 안될 수 있다. 원격접속을 허용하기 위해서 postgresql.conf 파일에서 listen_address를 ‘*’ 로 바꿔주거나 ip를 지정해 줘야 한다.

Mattermost와 PostgreSQL 연동

  • /opt/mattermost/config/config.json 파일 수정
  • 자신이 생성한 유저, 패스워트, 데이터베이스를 입력한다.
"sqlSettings": {
  "DriverName": "postgres",
  "DataSource": "postgres://mmuser:password@localhost:5432/mattermost
}
  • PostgreSQL이 실행되기 전에 Mattermost가 실행되어 연결이 안되는 상황을 막기 위해 service에 조건을 걸어준다.
  • 서비스 수정 (Rocky Linux 기준) /lib/systemd/system/mattermost.service
[Unit]
Description=Mattermost
After=postgresql.service
BindsTo=postgresql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

방화벽 설정

  • firewall-cmd를 이용해 기본적으로 전부 막혀있는 Inbound를 원하는 포트만 허용한다.
firewall-cmd --zone=public --permanent --add-port=8065/tcp,5432/tcp
firewall-cmd --reload
firewall-cmd --zone=public --list-all

그리고 URL로 접속하면 다음과 같이 접속이 된다!

mattermost

여기서 ‘계정이 없으십니까?’ 를 누르면 회원가입을 할 수 있는데 처음 가입한 사람은 관리자로 가입 가능하고 그 다음부터는 일반 유저로 가입된다.
그런데 일반 유저는 기본적으로 그냥 URL로 들어가서 접속할 수 없도록 막혀있다. 그러므로 관리자 계정에서 초대링크를 받아 접속해야 한다.

Mattermost에서 Focalboard 사용하기

Focalboard란?

notion과 같이 페이지 단위로 문서를 작성하고 이걸 데이터베이스와 같이 활용 가능한 도구이다. 그래서 프로젝트 협업 툴로 사용하기 좋다.
notion은 비싸기도 하지만 Focalboard는 직접 self-hosting해서 사용할 수 있기 때문에 데이터베이스에 있는 데이터도 직접 접근 가능해서 자동화 프로그램을 개발한다던가 여러가지로 활용하기 좋다.

  • mattermost plugin 활성화

mattermost 메뉴 - 관리자 통합도구 - 플러그인 - 플러그인 관리
로 들어가서 플러그인 활성화 버튼을 누른다. 그리고 플러그인 파일을 업로드해서 설치할 수 있는 듯 보이지만 안돼서 그냥 직접 넣어주었다.

mattermost

  • focalboard plugin 다운로드 + 설치
wget https://github.com/mattermost/focalboard/releases/download/v7.10.6/mattermost-plugin-focalboard.tar.gz # 가장 최신 버전으로 다운로드
tar -xzvf mattermost-plugin-focalboard.tar.gz # 압축풀기
mv ./focalboard /opt/mattermost/plugins/ # plugin 안으로 이동
  • 설치 끝 - mattermost 안에 board 탭 생성

mattermost

사용

  • Focalboard

mattermost

여기 화면을 보면 노션과 매우 유사하게 속성을 설정하고 문서를 작성할 수 있다.

  • Mattermost

Mattermost 에서는 slack과 같이 채널을 생성하고 채널에 글을 남길 수 있다.
Focalboard가 plugin으로 들어가 있기 때문에 특정 프로젝트를 연결하여 채널에 전달사항을 남기고 보드에 문서를 작성하는 방식으로 진행할 수 있다.

mattermost

다음에는 nginx로 proxy 설정을 하고 도메인을 연결하고 https로 바꾸는 작업까지 해보겠다.
그리고나서 안정적으로 운영하기 위해 DB이중화 및 Prometheus와 Grafana를 이용한 서버 모니터링 작업을 진행하겠다.