RHEL 7에 Mattermost 설치하기
CentOS 7, Oracle Linux 7 또는 Scientific Linux 7에도 Mattermost를 설치하는 데이 지침을 사용할 수 있습니다. 설치하는 운영 체제를 제외하고는 프로세스가 동일합니다.
Mattermost의 완전한 설치는 세 가지 주요 구성 요소로 구성됩니다: 프록시 서버, 데이터베이스 서버 및 Mattermost 서버입니다. 모든 구성 요소를 한 대의 기계에 설치할 수도 있고, 각 구성 요소를 독립된 기계에 설치할 수도 있습니다. 두 대의 기계만 있는 경우, 프록시 및 Mattermost 서버를 한 대의 기계에 설치하고 데이터베이스를 다른 기계에 설치하십시오.
데이터베이스는 PostgreSQL 또는 MySQL을 설치할 수 있습니다. 프록시는 NGINX입니다.
Note
Mattermost를 설치하는 데 문제가 있는 경우 문제 해결 가이드 를 참조하거나 Mattermost 사용자 커뮤니티에 참여하여 도움을 받으세요 .
시스템에 사용자를 초대하는 데 도움이 필요한 경우, 팀 멤버 초대 를 참조하거나 다른 시작하기 정보 를 참조하세요.
이 페이지에 개선 사항이나 수정을 제출하려면 페이지 오른쪽 상단의 편집 을 선택하세요.
Install and configure the components in the following order. Note that you need only one database, either PostgreSQL or MySQL.
Red Hat Enterprise Linux 7 설치
구성 요소 중 하나 이상을 호스팅하는 각 머신에 RHEL 7의 64비트 버전을 설치합니다.
RHEL 7 서버 설치
RHEL 7을 설치하려면, RedHat Installation Instructions 를 참조하십시오.
시스템이 설치된 후, 가장 최근의 보안 패치로 업데이트되었는지 확인합니다. 터미널 창을 열고 다음 명령을 입력하세요:
sudo yum update
sudo yum upgrade
시스템이 최신 상태로 업데이트되었으므로, Mattermost 시스템을 구성하는 구성 요소를 설치할 수 있습니다.
Note
mailcap
패키지가 설치되어 있는지 확인하십시오. 이 패키지에는 Mobile 앱이 올바르게 작동하기 위해 필요한 mime.types
파일이 포함되어 있습니다.
PostgreSQL 데이터베이스 설치
데이터베이스를 호스팅할 서버에 로그인하고 터미널 창을 엽니다.
최신 PostgreSQL 리포지터리를 다운로드합니다. 자세한 설치 지침은 여기 를 참조하십시오.
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
PostgreSQL 버전 10 이상을 설치합니다.
{version}
의 내용을 설치하려는 버전으로 바꿉니다.sudo yum install -y postgresql{version}-server
예시:
sudo yum install -y postgresql13-server
데이터베이스를 초기화합니다.
sudo /usr/pgsql-{version}/bin/postgresql-{version}-setup initdb
PostgreSQL을 부팅시작하도록 설정합니다.
sudo systemctl enable postgresql-{version}
PostgreSQL 서버를 시작합니다.
sudo systemctl start postgresql-{version}
설치 중 생성된 postgres 리눅스 사용자 계정으로 전환합니다.
sudo -iu postgres
PostgreSQL 대화형 터미널을 시작합니다.
psql
Mattermost 데이터베이스를 만듭니다.
postgres=# CREATE DATABASE mattermost WITH ENCODING 'UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' TEMPLATE=template0;
Mattermost 사용자 ‘mmuser’를 만듭니다.
postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password';
Note
‘mmuser-password’보다 보안 수준이 높은 암호를 사용하십시오.
사용자에게 Mattermost 데이터베이스에 대한 액세스 권한을 부여합니다.
postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
PostgreSQL 대화형 터미널을 종료합니다.
postgres=# \q
postgres 계정에서 로그아웃합니다.
exit
(선택 사항) 데이터베이스와 Mattermost 앱 서버가 다른 서버를 사용하는 경우 PostgreSQL이 모든 할당된 IP 주소에서 수신하도록 허용할 수 있습니다. 이를 위해 루트로
/var/lib/pgsql/{version}/data/postgresql.conf
파일을 텍스트 편집기로 엽니다. 방화벽을 사용하여 Mattermost 서버만 PostgreSQL 포트에 연결할 수 있도록 하는 것이 좋은 실천 사례입니다.
루트로
/var/lib/pgsql/{version}/data/postgresql.conf
파일을 텍스트 편집기로 엽니다.다음 라인을 찾습니다:
#listen_addresses = 'localhost'
주석 처리된 라인을 찾아
localhost
를*
로 변경합니다:
listen_addresses = '*'
변경 사항이 적용되려면 PostgreSQL을 다시 시작합니다:
sudo systemctl art postgresql-{version}
pg_hba.conf
파일을 수정하여 Mattermost 서버가 데이터베이스와 통신할 수 있도록 합니다.
만약 Mattermost 서버와 데이터베이스가 같은 기기에 있는 경우 :
루트로
/var/lib/pgsql/{version}/data/pg_hba.conf
파일을 텍스트 편집기로 엽니다.다음 라인을 찾습니다:
local all all peer
host all all ::1/128 ident
peer
와ident
를trust
로 변경합니다:
local all all trust
host all all ::1/128 trust
만약 Mattermost 서버와 데이터베이스가 다른 기기에 있는 경우 :
루트로
/var/lib/pgsql/{version}/data/pg_hba.conf
파일을 텍스트 편집기로 엽니다.파일 끝에 아래 라인을 추가합니다. *{mattermost-server-IP}*는 Mattermost 서버를 포함하는 기기의 IP 주소입니다.
host all all {mattermost-server-IP}/32 md5
PostgreSQL을 다시로드합니다:
sudo systemctl reload postgresql-{version}
mmuser 사용자로 연결할 수 있는지 확인합니다.
만약 Mattermost 서버와 데이터베이스가 같은 기기에 있는 경우, 다음 명령을 사용합니다:
psql --dbname=mattermost --username=mmuser --password
Mattermost 서버가 다른 기기에 있는 경우, 해당 기기에 로그인한 후 다음 명령을 사용합니다:
psql --host={postgres-server-IP} --dbname=mattermost --username=mmuser --password
Note
명령을 사용하려면 PostgreSQL 클라이언트 소프트웨어를 설치해야 할 수 있습니다.
PostgreSQL 대화형 터미널이 시작됩니다. PostgreSQL 대화형 터미널을 종료하려면
\q
를 입력하고 Enter 를 누릅니다.
데이터베이스가 설치되고 초기 설정이 완료되면 이제 Mattermost 서버를 설치할 수 있습니다.
MySQL 데이터베이스 서버 설치
Mattermost 서버에서 사용할 데이터베이스를 설치하고 설정합니다. MySQL 또는 PostgreSQL 중 하나를 설치할 수 있습니다.
RHEL 7에 MySQL 5.7 설치
데이터베이스를 호스팅할 서버에 로그인하고 터미널 창을 엽니다.
dev.mysql.com에서 MySQL Yum 저장소를 다운로드합니다.
wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
다운로드한 파일에서 Yum 저장소를 설치합니다.
sudo yum localinstall mysql57-community-release-el7-9.noarch.rpm
MySQL을 설치합니다.
sudo yum install mysql-community-server
MySQL 서버를 시작합니다.
sudo systemctl start mysqld.service
Note
MySQL을 처음 시작할 때 ‘root’@’localhost’ 슈퍼 사용자 계정이 생성되고 임시 암호가 생성됩니다.
또한 MySQL을 처음 시작할 때 ‘validate_password’ 플러그인이 설치됩니다. 이 플러그인은 암호에 대문자, 소문자, 숫자, 특수 문자 각 하나 이상을 포함하고 총 암호 길이가 최소 8자여야 합니다.
처음 MySQL을 시작할 때 생성된 root 암호를 얻습니다.
sudo grep 'temporary password' /var/log/mysqld.log
root 암호를 변경합니다. 이전 단계에서 얻은 암호로 로그인합니다.
mysql -u root -p
암호를 변경합니다. mysql 프롬프트에서 다음 명령을 입력합니다. 반드시
Password42!
를 사용할 암호로 대체하세요.mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Password42!';
시스템이 시작될 때 MySQL이 자동으로 시작하도록 설정합니다.
sudo systemctl enable mysqld
Mattermost 사용자 ‘mmuser’를 생성합니다.
mysql> create user 'mmuser'@'%' identified by 'mmuser-password';
Note
‘mmuser-password’보다 안전한 암호를 사용하세요.
‘%’는 mmuser가 네트워크의 모든 기기에서 연결할 수 있다는 것을 의미합니다. 그러나 Mattermost를 호스팅하는 기기의 IP 주소를 사용하는 것이 더 안전합니다. 예를 들어, IP 주소가 10.10.10.2인 기기에 Mattermost를 설치한다면 다음 명령을 사용하세요.
mysql> create user 'mmuser'@'10.10.10.2' identified by 'mmuser-password';
Mattermost 데이터베이스를 생성합니다.
mysql> create database mattermost;
‘mmuser’ 사용자에게 액세스 권한을 부여합니다.
mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
Note
이 쿼리는 편리를 위해 방금 생성한 MySQL 사용자에게 데이터베이스의 모든 권한을 부여합니다. 더 안전한 필요한 권한만 부여하려면 이 쿼리를 사용하세요.
mysql> GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE, REFERENCES ON mattermost.* TO 'mmuser'@'%';
MySQL에서 로그아웃합니다.
mysql> exit
데이터베이스가 설치되고 초기 설정이 완료되면 Mattermost 서버를 설치할 수 있습니다.
Mattermost 서버 설치
64비트 머신에 Mattermost 서버 설치.
RHEL 7에 Mattermost 서버 설치
Mattermost 서버를 호스팅 할 서버에 로그인하고 터미널 창을 엽니다.
최신 버전의 Mattermost Server 를 다운로드합니다. 다음 명령어에서
X.X.X
를 원하는 버전으로 대체하세요:wget https://releases.mattermost.com/X.X.X/mattermost-X.X.X-linux-amd64.tar.gz
Mattermost 서버 파일을 압축 해제합니다.
tar -xvzf *.gz
압축 해제된 파일을
/opt
디렉터리로 이동합니다.sudo mv mattermost /opt
파일을 위한 저장소 디렉터리를 생성합니다.
sudo mkdir /opt/mattermost/data
Note
저장소 디렉터리에는 사용자가 Mattermost에 올린 모든 파일과 이미지가 포함되므로 예상된 업로드 파일과 이미지의 수용 가능한 크기를 확인해야 합니다.
이 서비스를 실행할 mattermost라는 시스템 사용자와 그룹을 설정하고 소유권 및 권한을 설정합니다.
sudo useradd --system --user-group mattermost
sudo chown -R mattermost:mattermost /opt/mattermost
sudo chmod -R g+w /opt/mattermost
/opt/mattermost/config/config.json
파일에서 데이터베이스 드라이버를 설정합니다. 다음 변경 사항을 만들기 위해 루트로 파일을 텍스트 편집기에서 엽니다:
만약 PostgreSQL을 사용하는 경우:
"DriverName"
을"postgres"
로 설정
"DataSource"
를 다음 값으로 설정하고<mmuser-password>
와<host-name-or-IP>
를 적절한 값으로 대체하세요:
"postgres://mmuser: <mmuser-password>@ <host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10"
.
만약 MySQL을 사용하는 경우:
"DriverName"
을"mysql"
로 설정
"DataSource"
를 다음 값으로 설정하고<mmuser-password>
와<host-name-or-IP>
를 적절한 값으로 대체하세요. 또한 데이터베이스 이름이mattermost_test
가 아닌mattermost
여야 합니다:
"mmuser: <mmuser-password>@tcp( <host-name-or-IP>:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s"
또한
"SiteURL"
를 사이트의 전체 기본 URL로 설정하세요 (예:"https://mattermost.example.com"
).모든 것이 잘 작동하는지 Mattermost 서버를 테스트하세요.
mattermost
디렉터리로 이동하세요:
cd /opt/mattermost
mattermost 사용자로 Mattermost 서버를 시작하세요:
sudo -u mattermost ./bin/mattermost
서버가 시작되면 일부 로그 정보와
Server is listening on :8065
텍스트가 표시됩니다. 서버를 중지하려면 터미널 창에서 Windows 또는 Linux의 경우 :kbd: Ctrl :kbd: C , Mac의 경우 :kbd: ⌘ :kbd: C 를 누르세요.
Mattermost 프로세스를 관리하는 systemd init 데몬을 사용하도록 Mattermost를 설정하세요.
Mattermost 구성 파일을 생성하세요:
sudo touch /etc/systemd/system/mattermost.service
좋아하는 텍스트 편집기에서 구성 파일을 열고 다음 줄을 파일에 복사하세요:
[Unit] Description=Mattermost After=syslog.target network.target postgresql.service [Service] Type=notify WorkingDirectory=/opt/mattermost User=mattermost ExecStart=/opt/mattermost/bin/mattermost PIDFile=/var/spool/mattermost/pid/master.pid TimeoutStartSec=3600 KillMode=mixed LimitNOFILE=49152 [Install] WantedBy=multi-user.targetNote
만약 MySQL을 사용하는 경우,
[unit]
섹션에서postgresql.service
를mysqld.service
로 대체하세요.
서비스 파일 권한을 설정하세요.
sudo chmod 644 /etc/systemd/system/mattermost.service
systemd 서비스를 다시로드하세요.
sudo systemctl daemon-reload
부팅시 Mattermost를 시작하도록 설정하세요.
sudo systemctl enable mattermost
Mattermost 서버를 시작하세요.
sudo systemctl start mattermost
Mattermost가 실행 중인지 확인하세요.
curl http://localhost:8065
Mattermost 서버가 반환한 HTML을 볼 수 있어야 합니다.
이제 Mattermost가 설치되고 실행 중이므로 관리자 사용자를 만들고 Mattermost를 구성할 시간입니다.
Mattermost 서버 구성
시스템 관리자 사용자를 만들고 Mattermost를 일반적으로 사용하기 위해 설정합니다.
브라우저를 열고 Mattermost 인스턴스로 이동합니다. 예를 들어, 만일 Mattermost 서버의 IP 주소가
10.10.10.2
라면 http://10.10.10.2:8065 로 이동합니다.첫 번째 팀과 사용자를 만듭니다. 시스템의 첫 번째 사용자는
system_admin
역할을 가지며, 이를 통해 시스템 콘솔에 액세스할 수 있습니다.시스템 콘솔을 엽니다. 탐색 패널 왼쪽 상단의 제품 메뉴를 선택한 후 System Console 을 선택합니다.
사이트 URL을 설정합니다:
System Console > Environment > Web Server 를 엽니다.
Site URL 필드에서 사용자가 브라우저를 지정하는 URL을 설정합니다. 예를 들어, *https://mattermost.example.com*과 같이 HTTPS를 사용하는 경우, Mattermost 서버나 프록시에서 TLS를 설정했는지 확인하세요.
이메일 알림을 설정합니다.
Site Configuration > Notifications 에서 다음과 같이 변경합니다:
이메일 알림 활성화 를 true 로 설정합니다.
알림 표시 이름 을 No-Reply 로 설정합니다.
발신자 주소 를 {your-domain-name} (예: example.com)으로 설정합니다.
System Console > Environment > SMTP 에서 다음과 같이 변경합니다:
저장 을 선택합니다.
연결 테스트 를 선택합니다.
파일 및 이미지 저장 위치를 설정하기 위해 System Console > Environment > File Storage 를 엽니다.
파일을 로컬에 저장하는 경우, File Storage System 을 Local File System*으로 설정한 후, **로컬 저장소 디렉터리* 를 기본값으로 허용하거나 위치를 입력합니다. 위치는 존재하고 Mattermost 서버에 대한 쓰기 권한이 있는 디렉터리여야 합니다. 절대 경로 또는 상대 경로가 될 수 있습니다. 상대 경로는
mattermost
디렉터리를 기준으로 상대적입니다.파일을 Amazon S3에 저장하는 경우, File Storage System 을 *Amazon S3*로 설정하고 Amazon 계정에 적합한 값을 입력합니다.
Note
사용자가 메시지에 첨부하는 파일 및 이미지는 데이터베이스에 저장되지 않습니다. 그 대신, 로컬 파일 시스템이나 Amazon S3와 같이 지정한 위치에 저장됩니다.
위치에 충분한 여유 공간이 있도록 합니다. 필요한 저장 공간의 양은 사용자 수 및 사용자가 메시지에 첨부하는 파일의 수와 크기에 따라 다릅니다.
구성을 적용하기 위해 저장 을 선택합니다.
적용 가능한 다른 설정을 검토하고 구성합니다.
sudo systemctl art mattermost
를 실행하여 Mattermost를 다시 시작합니다.
Mattermost 서버에 TLS 구성
HTTPS로 사용자가 연결하길 원한다면 두 가지 옵션이 있습니다:
Mattermost 서버에 TLS 설정.
NGINX와 같은 프록시를 설치하고 프록시에 TLS 설정.
가장 쉬운 옵션은 Mattermost 서버에 TLS를 설정하는 것이지만, 200명 이상의 사용자가 예상된다면 성능을 더 향상시키기 위해 프록시를 사용하세요. 프록시 서버는 또한 표준 HTTP 요청 로그를 제공합니다.
Note
도메인 이름을 확인하고 인증서를 발급하기 위해 Let’s Encrypt CA에서 Mattermost 서버에 액세스할 수 있어야 합니다. 방화벽을 열고 역방향 프록시를 구성하여 트래픽을 포트 80과 443으로 전달해야 합니다. 자세한 정보는 Let’s Encrypt 에서 확인할 수 있습니다.
Mattermost 서버에 TLS 구성
시스템 콘솔 > 환경 > 웹 서버 (버전 5.12 이전의 경우 시스템 콘솔 > 일반 > 구성 )
수신 주소 설정을
:443
로 변경하십시오.연결 보안 설정을
TLS
로 변경하십시오.포트 80을 443으로 전달 설정을
true
로 변경하십시오.
Mattermost가 낮은 포트에 바인딩할 수 있도록
CAP_NET_BIND_SERVICE
기능을 활성화하세요.sudo setcap cap_net_bind_service=+ep /opt/mattermost/bin/mattermost
보안 인증서를 설치하세요. Let’s Encrypt 를 사용하여 인증서를 자동으로 설치하고 설정하거나 직접 인증서를 지정할 수 있습니다.
Let’s Encrypt 인증서 사용
인증서는 클라이언트가 Mattermost 서버에 연결을 시도하는 첫 번째 시도에 검색됩니다. 클라이언트가 서버에 접근하려는 모든 호스트 이름에 대해 인증서가 검색됩니다.
Let’s Encrypt 사용 설정을
true
로 변경하세요.이러한 변경 사항이 적용되려면 Mattermost 서버를 재시작하세요.
Note
Let’s Encrypt가 활성화된 경우 Forward80To443 의 config.json
설정을 true
로 변경하여 Let’s Encrypt 인증을 완료하기 위해 방화벽을 통해 포트 80을 전달하세요.
자체 인증서 사용
Let’s Encrypt 사용 설정을
false
로 변경하세요.TLS 인증서 파일 설정을 인증서 파일의 위치로 변경하세요.
TLS 키 파일 설정을 개인 키 파일의 위치로 변경하세요.
이러한 변경 사항이 적용되려면 Mattermost 서버를 재시작하세요.
Note
암호로 보호된 인증서는 지원되지 않습니다.
NGINX에서 TLS 사용 (프록시로)
Note
NGINX에 대해 TLS를 설정하기 전에 Mattermost에 대해 설정하지 마십시오. TLS는 NGINX가 Mattermost 서버와의 통신을 성공적으로 하는 것을 방해합니다.
NGINX는 클라이언트와 Mattermost 서버 간의 트래픽을 암호화하기 위한 전달 프록시로 작동합니다. SSL 인증서를 설치한 후에 들어오는 트래픽은 인터넷에 노출된 포트 443에서 NGINX를 통해 처리되고, 포트 80에서 Mattermost 서버로 프록시됩니다.
(선택 사항) NGINX에서 Mattermost 서버로의 상류 암호화가 허용됩니다.
기타 유용한 자료:
NGINX 서버 설치
프로덕션 환경에서는 Mattermost의 보안과 성능을 높이기 위해 프록시 서버를 사용하세요:
SSL 종료
HTTP에서 HTTPS로 리디렉션
포트 매핑
:80
에서:8065
로표준 요청 로그
프록시를 호스팅할 서버에 로그인하고 터미널 창을 엽니다.
다음 명령을 실행하여 파일
/etc/yum.repos.d/nginx.repo
를 생성하세요:sudo touch /etc/yum.repos.d/nginx.repo
.
RHEL 8에서는 단계 4. NGINX 설치 로 건너뛸 수 있습니다.
다음 콘텐츠를 추가하여 파일을 루트*로 텍스트 편집기에서 열고, *{version}*이 RHEL 7의 경우 **7* 인 다음 내용을 추가하세요:
[nginx] name=nginx repo baseurl=https://nginx.org/packages/rhel/{version}/$basearch/ gpgcheck=0 enabled=1
sudo yum install nginx.x86_64
를 실행하여 NGINX를 설치하세요.- 설치가 완료되면
sudo systemctl start nginx
를 실행하여 NGINX를 시작하세요. RHEL 6에서:
- 설치가 완료되면
선택 사항 시스템 부팅 시 NGINX를 시작하도록 설정하려면
sudo systemctl enable nginx
를 실행하세요.curl http://localhost
를 실행하여 NGINX가 실행 중인지 확인하세요.
NGINX가 실행 중인 경우 다음 출력이 표시됩니다:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> . . . <p><em>Thank you for using nginx.</em></p> </body> </html>다음 작업
DNS 서버/서비스에서
mattermost.example.com
과 같은 완전한 도메인 이름(FQDN)을 NGINX 서버를 가리키도록 매핑하세요.NGINX를 구성하여 인터넷에서 Mattermost 서버로의 프록시 연결을 설정하세요.
Mattermost 서버를 프록시로 구성하려면 NGINX 구성
NGINX는 /etc/nginx/sites-available
디렉터리에 있는 파일을 사용하여 구성됩니다. 파일을 생성한 다음 활성화해야 합니다. 파일을 생성할 때 Mattermost 서버의 IP 주소와 Mattermost 웹 사이트의 완전히 정규화된 도메인 이름(FQDN)이 필요합니다.
NGINX를 호스트하는 서버에 로그인하고 터미널 창을 엽니다.
Ubuntu에서는 다음 명령을 실행하여 Mattermost를 위한 구성 파일을 만듭니다.
sudo touch /etc/nginx/sites-available/mattermost
RHEL 8에서는 다음 명령을 실행하여 Mattermost를 위한 구성 파일을 만듭니다.
sudo touch /etc/nginx/conf.d/mattermost
텍스트 편집기에서
/etc/nginx/sites-available/mattermost
(Ubuntu) 또는/etc/nginx/conf.d/mattermost
(RHEL 8) 파일을 루트 사용자로 열고, 다음 줄로 파일의 내용(있는 경우)을 대체합니다. *server_name*에 자체 값 사용 여부를 확인하세요.
제공된 구성 예제에서 SSL 및 HTTP/2 및 서버 푸시가 활성화되어 있습니다.
Note
SSL 인증서를 관리하기 위해 Let’s Encrypt를 사용할 예정인 경우 SSL 구성 단계 3에서 중지하고 NGINX HTTP/2 및 SSL 제품 설명서 를 참조하세요.
NGINX가 SSL 인증서를 올바르게 매핑하려면 유효한 SSL 인증서가 필요합니다. 추가로 브라우저가 해당 인증서를 유효한 CA 인증서로 수락할 수 있는 권한이 있어야 합니다.
이 설명서의 예제에 포함된 IP 주소가 네트워크 구성과 일치하지 않을 수 있음을 참고하세요.
NGINX를 Mattermost와 같은 기계에서 실행하고 NGINX가
localhost
를 두 개 이상의 IP 주소(IPv4 또는 IPv6)로 해석하는 경우,localhost
대신127.0.0.1
을 사용하는 것을 권장합니다.upstream backend { server 10.10.10.2:8065; keepalive 32; } proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off; server { listen 80 default_server; server_name mattermost.example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name mattermost.example.com; http2_push_preload on; # HTTP/2 Server Push 활성화 ssl on; ssl_certificate /etc/letsencrypt/live/{domain-name}/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/{domain-name}/privkey.pem; ssl_session_timeout 1d; # TLS 버전 활성화(TLSv1.3은 곧 등장하는 HTTP/3 QUIC에 필요합니다). ssl_protocols TLSv1.2 TLSv1.3; # TLSv1.3의 0-RTT 활성화. 재생 공격을 방지하기 위해 역방향 프록시하는 경우 $ssl_early_data 사용. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; # HSTS(ngx_http_headers_module이 필요함)(15768000초 = 6개월) add_header Strict-Transport-Security max-age=15768000; # OCSP 스테이플링 --- # ssl_certificate의 URL에서 OCSP 레코드를 가져와 캐시 ssl_stapling on; ssl_stapling_verify on; add_header X-Early-Data $tls1_3_early_data; location ~ /api/v[0-9]+/(users/)?websocket$ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 50M; 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_buffers 256 16k; proxy_buffer_size 16k; client_body_timeout 60; send_timeout 300; lingering_timeout 5; proxy_connect_timeout 90; proxy_send_timeout 300; proxy_read_timeout 90s; proxy_http_version 1.1; proxy_pass http://backend; } location / { client_max_body_size 50M; proxy_set_header Connection ""; 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_buffers 256 16k; proxy_buffer_size 16k; proxy_read_timeout 600s; proxy_cache mattermost_cache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale timeout; proxy_cache_lock on; proxy_http_version 1.1; proxy_pass http://backend; } } # TLS v1.3를 디버깅하는 데 유용한 이 블록은 자유롭게 제거하고 직접 NGINX에서 노출되는 `$ssl_early_data` 변수를 사용할 수 있습니다. map $ssl_early_data $tls1_3_early_data { "~." $ssl_early_data; default ""; }
기존의 default sites-enabled 파일을 삭제하려면 Ubuntu에서
sudo rm /etc/nginx/sites-enabled/default
또는 RHEL 8에서sudo rm /etc/nginx/conf.d/default
를 실행합니다.Mattermost 구성을 활성화하려면 Ubuntu에서
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
또는 RHEL 8에서sudo ln -s /etc/nginx/conf.d/mattermost /etc/nginx/conf.d/default.conf
를 실행합니다.sudo systemctl art nginx
를 실행하여 NGINX를 다시 시작합니다.curl https://localhost
를 실행하여 프록시를 통해 Mattermost를 볼 수 있는지 확인하세요.
모든 것이 작동한다면, Mattermost 가입 페이지의 HTML이 표시됩니다.
포트 8065에 대한 액세스 제한.
기본적으로 Mattermost 서버는 네트워크의 모든 기계에서 포트 8065로 연결을 허용합니다. NGINX를 호스트하는 기계와 Mattermost 서버를 관리하는 기계를 제외한 모든 기계에서 포트 8065로의 연결을 방화벽을 사용하여 거부하세요. Amazon Web Services에 설치하는 경우 보안 그룹을 사용하여 액세스를 제한할 수 있습니다.
이제 NGINX가 설치되고 실행 중이므로 SSL을 사용하도록 구성하여 HTTPS 연결 및 HTTP/2 프로토콜을 사용할 수 있습니다.
NGINX를 SSL 및 HTTP/2로 구성
NGINX는 /etc/nginx/sites-available
디렉터리에 있는 파일을 사용하여 구성됩니다. 파일을 만들고 활성화해야 합니다. 파일을 만들 때 Mattermost 서버의 IP 주소와 Mattermost 웹사이트의 완전한 도메인 이름(FQDN)이 필요합니다.
SSL을 사용하면 Mattermost 클라이언트와 Mattermost 서버 간의 통신이 암호화되어 보안이 강화됩니다. 또한 NGINX를 HTTP/2 프로토콜을 사용하도록 구성할 수 있습니다.
SSL 없이도 HTTP/2를 구성할 수 있지만, Firefox와 Chrome 브라우저는 안전한 연결에서만 HTTP/2를 지원합니다.
원하는 인증서를 사용할 수 있지만, 이 지침은 무료 인증 기관 Let’s Encrypt 에서 인증서를 다운로드하고 설치하는 방법을 안내합니다.
Note
Let’s Encrypt이 활성화된 경우에는 Forward80To443 “config.json” 설정을 true
로 설정하여 Let’s Encrypt 인증을 완료하기 위해 방화벽을 통해 포트 80을 전달해야 합니다. 자세한 내용은 Let’s Encrypt/Certbot documentation 을 참조하십시오.
NGINX를 호스팅하는 서버에 로그인하고 터미널 창을 엽니다.
텍스트 편집기로 Mattermost
nginx.conf
파일을 *root*로 열고,upstream backend
의{ip}
주소를 Mattermost(예:127.0.0.1:8065
)로,server_name
을 Mattermost의 도메인으로 업데이트합니다.
Note
Ubuntu에서 이 파일은
/etc/nginx/sites-available/
에 있습니다. 이 파일이 없는 경우sudo touch /etc/nginx/sites-available/mattermost
를 실행합니다.CentOS/RHEL에서 이 파일은
/etc/nginx/conf.d/
에 있습니다. 이 파일이 없는 경우sudo touch /etc/nginx/conf.d/mattermost
를 실행합니다.이 설명서의 예제에 포함된 IP 주소가 네트워크 구성과 일치하지 않을 수 있습니다.
만약 NGINX를 Mattermost와 동일한 머신에서 실행하고 NGINX가
localhost
를 하나 이상의 IP 주소 (IPv4 또는 IPv6)로 해석하는 경우,localhost
대신에127.0.0.1
을 사용하는 것을 권장합니다.upstream backend { server {ip}:8065; keepalive 32; } proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off; server { listen 80 default_server; server_name mattermost.example.com; location ~ /api/v[0-9]+/(users/)?websocket$ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 50M; 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_buffers 256 16k; proxy_buffer_size 16k; client_body_timeout 60; send_timeout 300; lingering_timeout 5; proxy_connect_timeout 90; proxy_send_timeout 300; proxy_read_timeout 90s; proxy_pass http://backend; } location / { client_max_body_size 50M; proxy_set_header Connection ""; 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_buffers 256 16k; proxy_buffer_size 16k; proxy_read_timeout 600s; proxy_cache mattermost_cache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale timeout; proxy_cache_lock on; proxy_http_version 1.1; proxy_pass http://backend; } }
기존의 기본 sites-enabled 파일을 제거하려면
sudo rm /etc/nginx/sites-enabled/default
(Ubuntu) 또는sudo rm /etc/nginx/conf.d/default
(RHEL 8)을 실행합니다.Mattermost 구성을 활성화하려면
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
(Ubuntu) 또는sudo ln -s /etc/nginx/conf.d/mattermost /etc/nginx/conf.d/default.conf
(RHEL 8)을 실행합니다.구성이 올바르게 완료되었는지 확인하려면
sudo nginx -t
를 실행합니다. 오류가 발생하면 NGINX 구성을 검토하고/etc/nginx/sites-available/mattermost
파일을 수정해야 합니다.sudo systemctl start nginx
를 실행하여 NGINX를 다시 시작합니다.curl http://localhost
를 실행하여 프록시를 통해 Mattermost를 확인합니다.
모든 것이 정상적으로 작동하면 Mattermost 가입 페이지의 HTML을 볼 수 있습니다. IP 또는 localhost로 액세스할 때 유효하지 않은 인증서가 표시됩니다. SSL 인증서가 올바르게 고정되었고 유효한지 확인하려면 완전한 FQDN 도메인을 사용하십시오.
sudo snap install core; sudo snap refresh core
를 실행하여 Snap을 설치하고 업데이트합니다.sudo snap install --classic certbot
을 실행하여 Certbot 패키지를 설치합니다.Certbot이 실행될 수 있도록 심볼릭 링크를 추가하려면
sudo ln -s /snap/bin/certbot /usr/bin/certbot
을 실행합니다.DNS가 올바르게 구성되었는지 Dry-run을 실행하여 Let’s Encrypt 설치기가 정상적으로 실행되는지 확인하려면
sudo certbot certonly --dry-run
을 실행합니다.
이 작업은 이메일 주소를 입력하고 TOS를 수락하고 이메일을 공유하며 certbot을 활성화하는 도메인을 선택하라는 메시지가 표시됩니다. 이를 통해 DNS가 이 서버를 올바르게 가리키고 인증서를 성공적으로 생성할 수 있는지 확인합니다. 이 작업이 성공하면 단계 12로 진행하십시오.
sudo certbot
을 실행하여 Let’s Encrypt 설치기를 실행합니다. 이 작업은 certbot을 실행하고 선택한 사이트의 NGINX 구성 파일을 자동으로 수정합니다.SSL이 올바르게 구성되었는지 확인하려면
curl https://{your domain here}
을 실행합니다.마지막으로, SSL 보안 설정을 기본 Let’s Encrypt 이상으로 수정하도록 config 파일을 편집하는 것을 권장합니다. 이는 위의 단계 2에서 사용한 파일과 동일합니다.
upstream backend { server {ip}:8065; keepalive 32; } proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off; server { server_name mattermost.example.com; location ~ /api/v[0-9]+/(users/)?websocket$ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 50M; 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_buffers 256 16k; proxy_buffer_size 16k; client_body_timeout 60; send_timeout 300; lingering_timeout 5; proxy_connect_timeout 90; proxy_send_timeout 300; proxy_read_timeout 90s; proxy_http_version 1.1; proxy_pass http://backend; } location / { client_max_body_size 50M; proxy_set_header Connection ""; 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_buffers 256 16k; proxy_buffer_size 16k; proxy_read_timeout 600s; proxy_cache mattermost_cache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale timeout; proxy_cache_lock on; proxy_http_version 1.1; proxy_pass http://backend; } listen 443 ssl http2; # managed by Certbot ssl_certificate /etc/letsencrypt/live/mattermost.example.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mattermost.example.com/privkey.pem; # managed by Certbot # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot ssl_session_timeout 1d; # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC). ssl_protocols TLSv1.2 TLSv1.3; # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to # prevent replay attacks. # # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data ssl_early_data on; ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; # HSTS (ngx_http_headers_module is required) (15768000 seconds = six months) add_header Strict-Transport-Security max-age=15768000; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; } server { if ($host = mattermost.example.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80 default_server; server_name mattermost.example.com; return 404; # managed by Certbot }
SSL 인증서가 올바르게 설정되었는지 확인하세요.
SSL 인증서를 https://www.ssllabs.com/ssltest/index.html 와 같은 사이트를 방문하여 테스트하세요.
빈 곳이나 인증서 경로에 대한 오류가 있는 경우 중간 인증서가 누락된 것으로 포함해야 합니다.
NGINX 구성 FAQ
웹소켓 연결이 403 오류를 반환하는 이유는 무엇인가요?
이는 크로스-오리진 검사에 실패한 것으로 보입니다. 웹소켓 코드에서 Origin
헤더가 호스트 헤더와 동일한지 확인하는 검사가 적용됩니다. 동일하지 않은 경우 403 오류가 반환됩니다. 루트로 텍스트 편집기에서 /etc/nginx/sites-available/mattermost
파일을 열고 프록시에서 설정되는 호스트 헤더가 동적인지 확인하세요.
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_pass http://backend;
(...)
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
그런 다음 config.json
에서 AllowCorsFrom
설정을 클라이언트가 사용하는 도메인과 일치하도록 설정하세요. 클라이언트가 보낼 수있는 호스트 이름의 변형을 추가해야 할 수도 있습니다. 문제를 진단하는 데 NGINX 로그가 도움이 될 것입니다.
"EnableUserAccessTokens": false,
"AllowCorsFrom": "domain.com domain.com:443 im.domain.com",
"SessionLengthWebInDays": 30,
웹소켓 오류에 대한 기타 문제 해결 팁은 여기에서 확인하세요 .
Mattermost Docker 설치를 사용한 NGINX 프록시를 어떻게 설정하나요?
Mattermost 네트워크의 이름을 찾고 NGINX 프록시에 연결합니다.
docker network ls
# "mymattermost_default"와 같은 Mattermost 네트워크의 이름을 찾습니다.
docker network connect mymattermost_default nginx-proxy
Mattermost Docker 컨테이너를 다시 시작합니다.
docker-compose stop app
docker-compose start app
Tip
NGINX 프록시가 들어오는 요청을 허용하기 때문에 ‘web’ 컨테이너를 실행할 필요가 없습니다.
docker-compose.yml
파일을 업데이트하여VIRTUAL_HOST
와expose
지시문을 추가하세요.
environment:
# db 자격 증명 및 데이터베이스 이름과 동일하게 설정
- MM_USERNAME=mmuser
- MM_PASSWORD=mmuser-password
- MM_DBNAME=mattermost
- VIRTUAL_HOST=mymattermost.tld
expose:
- "80"
- "443"
Azure에서 Gitlab CE와 Mattermost를 함께 설치할 때 NGINX가 실패하는 이유는 무엇인가요?
Mattermost의 응용 프로그램 항목의 콜백 URL을 업데이트해야 할 수 있습니다.
관리자로서 GitLab 인스턴스에 로그인합니다.
Admin > Applications 으로 이동합니다.
GitLab-Mattermost에서 편집 을 선택합니다.
새 도메인/URL로 콜백 URL을 업데이트합니다.
변경사항을 저장합니다.
/etc/gitlab/gitlab.rb
구성 파일에서 GitLab 및 Mattermost의 외부 URL을 업데이트합니다.
Certbot가 http-01 도전에 실패하는 이유는 무엇인가요?
yourdomain.com에 대한 인증서를 요청 중
다음 도전 수행 중:
yourdomain.com에 대한 http-01 도전
확인을 기다리는 중...
도메인 yourdomain.com에 대한 도전 실패
yourdomain.com에 대한 http-01 도전
도전 정리 중
일부 도전에 실패했습니다.
위의 오류가 표시된다면 대개 Certbot이 포트 80에 액세스할 수 없었기 때문입니다. 이는 방화벽 또는 다른 DNS 구성으로 인할 수 있습니다. A/AAAA 레코드가이 서버를 가리키도록하고 NGINX 구성 내의 server_name
이 리디렉션되지 않았는지 확인하십시오.
Note
Cloudflare을 사용하는 경우 force traffic to https
를 해제해야 합니다.
Certbot 속도 제한
만약 독립적으로 certbot을 실행 중이라면 다음과 같은 오류가 표시됩니다:
example.com에 대한 Let's Encrypt SSL/TLS 인증서를 발급할 수 없습니다.
example.com에 대해 Let's Encrypt 속도 제한 중 하나가 초과되었습니다.
자세한 내용은 관련 지식 베이스 문서를 참조하십시오.
세부 정보
https://acme-v02.api.letsencrypt.org/acme/new-order에서 유효하지 않은 응답입니다.
세부 정보:
유형: urn:ietf:params:acme:error:rateLimited
상태: 429
자세한 내용: 새 주문 생성 오류 :: 최근에 실패한 인증이 너무 많습니다: https://letsencrypt.org/docs/rate-limits/
만약 Mattermost 내에서 Let’s Encrypt를 실행 중이라면 다음과 같은 오류가 표시됩니다:
{"level":"error","ts":1609092001.752515,"caller":"http/server.go:3088","msg":"http: TLS handshake error from ip:port: 429 urn:ietf:params:acme:error:rateLimited: Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/","source":"httpserver"}
이는 인증서를 생성하려는 시도가 너무 많았음을 의미합니다. 자세한 내용은 여기 에서 찾을 수 있습니다.