Mattermost를 Ubuntu 16.04에 PostgreSQL 및 Nginx로 설치하기

TL;DR
Mattermost를 자체 호스팅하려면 Ubuntu 16.04에 PostgreSQL을 데이터베이스로, Nginx를 리버스 프록시로 구성합니다. 이 가이드는 Mattermost 3.4.0을 예로 하여 사용자 계정 생성, systemd 서비스 등록, Nginx SSL 설정까지 단계별로 설명합니다. 설치 후에는 서비스 상태, 방화벽, SSL 및 백업 정책을 확인하세요.
핵심 의도 및 관련 검색어
주요 의도: Mattermost 설치 가이드 관련 변형: 자체 호스팅 Mattermost 설치, Ubuntu 16.04 Mattermost, PostgreSQL로 Mattermost 구성, Nginx 리버스 프록시 Mattermost, Mattermost systemd 서비스
사전 준비
- 운영체제: Ubuntu 16.04 64비트
- 루트 권한 또는 sudo 권한
- 고정 도메인 (예: mattermost.mydomain.com)
- 포트 80/443(HTTP/HTTPS) 열려 있어야 함
중요: 이 튜토리얼에서는 예제 파일명과 버전(mattermost-3.4.0)을 사용합니다. 최신 릴리스나 보안 패치가 있을 수 있으므로 실제 배포 시 최신 문서를 확인하세요.
1. PostgreSQL 설치 및 구성
Mattermost는 MySQL과 PostgreSQL을 지원하지만 이 가이드에서는 PostgreSQL을 사용합니다. 서버에 SSH로 접속한 후 리포지토리를 업데이트합니다.
ssh [email protected]
sudo apt-get update
루트(또는 sudo)로 PostgreSQL을 설치합니다.
sudo apt-get install postgresql postgresql-contrib
설치 후 postgres 계정으로 전환하여 psql 셸에 접속합니다.
su - postgres
psql
postgres 계정의 비밀번호를 변경합니다.
\password postgres
Enter new password:
새 데이터베이스와 사용자를 생성합니다. 이 예제에서는 데이터베이스명은 “mattermostdb”, 사용자명은 “matteruser”, 비밀번호는 “matterpassword”를 사용합니다. 실제 배포 시에는 강력한 비밀번호를 사용하세요.
CREATE DATABASE mattermostdb;
CREATE USER matteruser WITH PASSWORD 'matterpassword';
GRANT ALL PRIVILEGES ON DATABASE mattermostdb TO matteruser;
\q
참고: PostgreSQL 설정(인증, pg_hba.conf 등)을 내부 보안 정책에 맞게 추가로 조정하세요.
2. Mattermost 설치 및 기본 설정
Mattermost는 일반 사용자 권한으로 실행할 것을 권장합니다. 여기서는 “matter”라는 시스템 사용자를 만들어 Mattermost를 실행합니다.
useradd -m -s /bin/bash matter
passwd matter
‘matter’ 사용자로 전환하여 최신 릴리스(예제: 3.4.0)를 다운로드합니다.
su - matter
wget https://releases.mattermost.com/3.4.0/mattermost-3.4.0-linux-amd64.tar.gz
압축을 풀고 디렉터리로 이동합니다.
tar -xzvf mattermost-3.4.0-linux-amd64.tar.gz
cd mattermost/
사용자 파일을 저장할 데이터 디렉터리를 만들고 설정 파일을 편집합니다.
mkdir data/
vim config/config.json
Nginx 리버스 프록시 뒤에서 동작시키므로 Mattermost가 로컬에서만 바인딩되도록 ServiceSettings에 로컬 IP를 넣습니다.
"ListenAddress": "127.0.0.1:8065",
SqlSettings에서 PostgreSQL 드라이버와 데이터베이스 연결 문자열을 설정합니다.
"DriverName": "postgres",
"DataSource": "postgres://matteruser:[email protected]:5432/mattermostdb?sslmode=disable&connect_timeout=10",
노트:
- matteruser = PostgreSQL 사용자
- matterpassword = 사용자가 설정한 비밀번호
- mattermostdb = 생성한 데이터베이스
파일 저장 후 bin 디렉터리로 가서 플랫폼을 실행해 동작을 확인합니다.
cd bin/
./platform
서버가 127.0.0.1:8065에서 실행되는 것을 확인할 수 있습니다. 예제를 중단하려면 Ctrl+C를 누릅니다.
중요: 이 가이드의 예시는 Mattermost 포트 8065를 사용합니다. 일부 문서에서 8056 등 다른 포트가 언급될 수 있으니 설정 파일과 Nginx 설정의 포트가 일치하는지 반드시 확인하세요.
3. systemd 서비스로 등록
서버 재부팅 시 Mattermost가 자동으로 시작되도록 systemd 서비스 파일을 생성합니다.
cd /etc/systemd/system/
vim mattermost.service
파일 내용(복사 후 저장):
[Unit]
Description=Mattermost is an open source, self-hosted Slack-alternative
After=syslog.target network.target
[Service]
Type=simple
User=matter
Group=matter
ExecStart=/home/matter/mattermost/bin/platform
PrivateTmp=yes
WorkingDirectory=/home/matter/mattermost
Restart=always
RestartSec=30
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
파일 저장 후 systemd 데몬을 리로드하고 서비스를 시작합니다.
systemctl daemon-reload
systemctl start mattermost
서비스 상태와 포트 리스닝을 확인합니다.
netstat -plntu
systemctl status mattermost
수정 사항 적용 후 자동 시작을 설정하려면:
systemctl enable mattermost
4. Nginx 설치 및 리버스 프록시 구성
Nginx를 설치하고 SSL(자체 서명)을 생성하여 리버스 프록시로 설정합니다.
sudo apt-get install nginx
SSL 폴더 생성 후 자체 서명 인증서를 생성합니다.
cd /etc/nginx/
mkdir ssl/; cd ssl/
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/mattermost.crt -keyout /etc/nginx/ssl/mattermost.key
chmod 400 mattermost.key
가상 호스트 파일을 생성합니다.
cd /etc/nginx/sites-available/
vim mattermost
가상 호스트 예시(도메인명을 실제 도메인으로 교체하세요):
server {
listen 80;
server_name mattermost.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name mattermost.mydomain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/mattermost.crt;
ssl_certificate_key /etc/nginx/ssl/mattermost.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
location / {
gzip off;
proxy_set_header X-Forwarded-Ssl on;
client_max_body_size 50M;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_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 $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://127.0.0.1:8065;
}
}
사이트를 활성화하고 구성을 테스트한 뒤 Nginx를 재시작합니다.
ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx
보안 권장 사항: 실제 운영환경에서는 Let’s Encrypt 또는 공인 인증서를 사용하세요. 자체 서명 인증서는 테스트 목적에만 적합합니다.
5. 웹에서 테스트 및 초기 설정
브라우저에서 https://mattermost.mydomain.com 으로 접속하면 HTTPS로 리다이렉트됩니다. 처음 로그인 시 계정을 생성하고, 팀 및 시스템 콘솔에 접근하여 환경을 설정하세요.
설치가 완료되면 다음 항목을 점검하세요:
- 시스템 콘솔에서 SMTP, 인증(SSO), 파일 업로드 크기 등 환경 설정
- SSL 인증서 유효성 및 체인
- 방화벽(ufw/iptables)에서 80/443 허용
- Mattermost 로그(/var/log 또는 /home/matter/mattermost/log) 확인
문제 해결(트러블슈팅) 체크리스트
- Nginx가 443에서 정상 리스닝하지 않음: nginx -t 로 구문 검사, systemctl status nginx 확인
- Mattermost가 127.0.0.1:8065에서 응답하지 않음: systemctl status mattermost, 로그 파일 확인
- DB 연결 실패: config.json의 DataSource 문자열(사용자/비밀번호/DB명/포트) 확인, pg_hba.conf의 인증 방식 확인
- 업로드 파일 제한: Nginx의 client_max_body_size와 Mattermost 설정에서 허용 크기 일치 여부 확인
보안 강화 제안
- 공개 서비스라면 자체 서명 대신 Let’s Encrypt(무료) 사용 권장
- 방화벽으로 SSH는 특정 IP만 허용, 2단계 인증(가능 시) 사용
- Mattermost 및 OS 정기 업데이트 및 보안 패치 적용
- DB 접근은 내부 네트워크나 소켓으로 제한하고 외부 접속 차단
백업 및 복원
- 데이터베이스 백업: pg_dump 사용
pg_dump -U matteruser -h localhost mattermostdb > mattermostdb-backup.sql
- 파일(업로드) 백업: mattermost/data 디렉터리 동기화
sudo rsync -avz /home/matter/mattermost/data/ /backup/mattermost/data/
정기 백업 스케줄(예: cron)과 백업 유지 정책을 수립하세요.
마이그레이션 및 업그레이드 팁
- Mattermost 버전 업그레이드 시 릴리스 노트를 확인하여 DB 마이그레이션 요구사항을 확인합니다.
- 업그레이드 전 전체 백업(데이터베이스 + 파일)을 반드시 수행합니다.
- 테스트 환경에서 업그레이드를 먼저 실행하여 예상치 못한 문제를 검증하세요.
의사결정 흐름: DB 선택 (간단한 머천트리)
flowchart TD
A[새 Mattermost 인스턴스 구축?] --> B{이미 사용 중인 DB가 있나}
B -- 예 --> C[같은 종류'DB' 사용]
B -- 아니오 --> D{성능/관리 면에서 우수한 DB 선택}
D --> E[PostgreSQL 권장: 복잡한 쿼리와 확장성 유리]
D --> F[MySQL 대체 가능: 기존 스택과 호환될 경우]
C --> G[설치 계속]
E --> G
F --> G
역할 기반 체크리스트
- 운영팀:
- 서버 보안(SSH, 방화벽) 구성
- 자동 백업 및 모니터링 도구 연동
- DBA:
- PostgreSQL 성능 튜닝과 정기 백업
- pg_hba.conf 및 권한 관리
- 애플리케이션 관리자:
- Mattermost 설정 및 플러그인 관리
- 사용자/팀/정책 관리
수락 기준(예시)
- Mattermost 웹 UI가 https://<도메인>으로 접속되고 로그인/팀 생성이 가능할 것
- 게시물 전송 및 파일 업로드(최대 50MB 기준)가 정상 동작할 것
- 서버 재부팅 후 mattermost.service가 자동으로 기동될 것
- PostgreSQL에 사용자/데이터가 정상 저장될 것
간단 용어집
- Mattermost: 오픈 소스 자체 호스팅 팀 메시징 플랫폼
- Nginx: 리버스 프록시 및 웹서버
- PostgreSQL: 오픈 소스 관계형 데이터베이스
FAQ
Q: Mattermost 최신 버전을 설치하려면 어떻게 하나요?
A: releases.mattermost.com 또는 공식 문서의 최신 릴리스 페이지에서 tarball 링크를 확인해 wget으로 다운로드하세요. 버전 업그레이드 시 항상 릴리스 노트를 먼저 확인하고 백업을 수행하세요.
Q: 운영 환경에서 자체 서명 인증서를 써도 되나요?
A: 테스트 용도로만 권장합니다. 운영 환경에서는 공인 인증서(예: Let’s Encrypt)를 사용하세요.
Q: 데이터베이스를 외부에서 호스팅하면 보안상 문제가 없나요?
A: 외부 DB를 사용할 경우 네트워크 경로 암호화, 접근 제어, IP 화이트리스트를 반드시 설정하세요.
Q: Mattermost를 다른 포트로 변경하려면?
A: config/config.json의 ListenAddress 값을 변경하고, Nginx proxy_pass 설정의 포트도 동일하게 맞추세요.
참고 자료
- https://docs.mattermost.com/install/prod-ubuntu.html
- https://docs.mattermost.com/install/prod-debian.html
요약: 이 가이드는 Ubuntu 16.04에서 PostgreSQL과 Nginx를 사용해 Mattermost를 설치하고 운영하는 전체 흐름을 다룹니다. 설치 전후의 보안, 백업, 업그레이드 절차를 반드시 수립하세요.