데비안 버스터에 Mattermost 설치하기

plans-img 모든 플랜 에서 사용 가능

deployment-img self-hosted 배포판

최대 세 대의 머신에 생산 준비가 된 Mattermost 시스템을 설치합니다.

Mattermost의 완전한 설치는 세 가지 주요 구성 요소로 구성됩니다: 프록시 서버, 데이터베이스 서버 및 Mattermost 서버입니다. 모든 구성 요소를 한 대의 기계에 설치할 수도 있고, 각 구성 요소를 독립된 기계에 설치할 수도 있습니다. 두 대의 기계만 있는 경우, 프록시 및 Mattermost 서버를 한 대의 기계에 설치하고 데이터베이스를 다른 기계에 설치하십시오.

데이터베이스는 PostgreSQL 또는 MySQL을 설치할 수 있습니다. 프록시는 NGINX입니다.

Note

Mattermost를 설치하는 데 문제가 있는 경우 문제 해결 가이드 를 참조하거나 Mattermost 사용자 커뮤니티에 참여하여 도움을 받으세요 .

시스템에 사용자를 초대하는 데 도움이 필요한 경우, 팀 멤버 초대 를 참조하거나 다른 시작하기 정보 를 참조하세요.

이 페이지에 개선 사항이나 수정을 제출하려면 페이지 오른쪽 상단의 편집 을 선택하세요.

Mattermost Server의 tarball을 사용하여 설치하기

최소 시스템 요구 사항:

  • 하드웨어: 1 vCPU/core 및 2GB RAM (최대 1,000명의 사용자 지원)
  • 데이터베이스: PostgreSQL v11+
  • 네트워크:
    • 응용 프로그램 80/443, TLS, TCP Inbound
    • 관리자 콘솔 8065, TLS, TCP Inbound
    • SMTP 포트 10025, TCP/UDP Outbound

64비트 Linux 시스템에서 tarball을 사용하여 Mattermost 서버를 설치할 수 있습니다. 이는 가장 유연한 설치 방법이지만, 일반적으로 숙련된 시스템 관리자들이 선호하는 노력이 많이 필요한 방법입니다.

Mattermost Academy Learn about deploying Mattermost using a tarball

Tip

Mattermost 서버와 데이터베이스를 단일 시스템에서 실행 중인 경우, 업데이트를 위해 Mattermost Omnibus 설치 방법 을 권장합니다. 이는 설정 및 지속적인 유지보수를 크게 줄이고 Mattermost PPA를 사용하여 업데이트를 수행합니다. Mattermost Helm Chart나 Kubernetes Operator와 같은 더 현대적인 설치 방법도 이용할 수 있으며 강력히 권장합니다.

Note

PostgreSQL 데이터베이스가 필요합니다. 전제 조건에 대한 자세한 내용은 데이터베이스 준비 문서를 참조하세요.

Mattermost 배포는 다음 3단계로 진행됩니다: 다운로드 , 설치 , 그리고 설정 .

다운로드

터미널 창에서 Mattermost 서버를 호스팅 할 시스템에 ssh로 로그인하세요.

wget 을 사용하여 설치하려는 Mattermost 서버 릴리스를 다운로드하세요.

wget https://releases.mattermost.com/9.6.0/mattermost-9.6.0-linux-amd64.tar.gz 클립보드로 복사됨

설치

Mattermost 서버를 tarball을 풀고, 사용자 및 그룹을 생성하고, 파일/폴더 권한을 설정하여 설치합니다.

먼저 tarball을 푸세요:

  tar -xvzf mattermost*.gz

이제 전체 폴더를 /opt 디렉터리(또는 원하는 경로)로 이동하세요:

  sudo mv mattermost /opt

Note

사용자 정의 경로를 선택하는 경우, 나머지 단계에서 이 대안 경로를 사용해야 합니다.

기본적으로 Mattermost Server는 파일을 위한 폴더로 /opt/mattermost/data 를 사용합니다. 시스템 콘솔에서 설정 중에 이를 변경할 수 있습니다 (S3와 같은 대체 저장소 사용도 가능). 기본 저장소 폴더를 만드세요:

  sudo mkdir /opt/mattermost/data

이제 mattermost 라는 사용자 및 그룹을 설정하세요:

  sudo useradd --system --user-group mattermost

Note

사용자 및 그룹 이름을 사용자 정의하는 경우, 나머지 단계에서 이를 사용해야 합니다.

설치에 대한 파일 및 폴더 권한을 설정하세요:

  sudo chown -R mattermost:mattermost /opt/mattermost

mattermost 그룹에 애플리케이션 폴더에 대한 쓰기 권한을 부여하세요:

  sudo chmod -R g+w /opt/mattermost

이제 시스템에 최신 Mattermost Server 버전이 설치되었습니다. Mattermost Server를 시작하거나 중지하려면, systemd 를 사용하세요. systemd unit 파일을 만드세요:

  sudo touch /lib/systemd/system/mattermost.service

루트로, systemd unit 파일을 편집하여 다음 줄을 추가하세요:

  [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

파일을 저장하고, sudo systemctl daemon-reload 를 사용하여 systemd를 다시로드하세요. Mattermost Server가 이제 설치되어 설정할 준비가 되었습니다.

Note

만약 데이터베이스와 같은 시스템에 Mattermost 서버를 설치하는 경우, [Unit] 섹션에 After=postgresql.serviceBindsTo=postgresql.service 를 추가하는 것이 좋습니다.

설정

Mattermost 서버를 시작하기 전에 구성 파일을 편집해야합니다. 기본 구성 파일은 /opt/mattermost/config/config.json 에 있습니다.

변경 사항을 가하기 전에 기본 구성 파일을 백업하는 것을 권장합니다:

  sudo cp /opt/mattermost/config/config.json /opt/mattermost/config/config.defaults.json

이 파일에서 다음 속성을 구성하세요:

  • DriverName"postgres" 로 설정합니다. 이는 모든 Mattermost 설치에 대한 기본 및 권장되는 데이터베이스입니다.

  • DataSource"postgres://mmuser: <mmuser-password>@ <host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10" 로 설정하고 mmuser , <mmuser-password> , <host-name-or-IP> , 그리고 mattermost 를 귀하의 데이터베이스 이름으로 대체합니다.

  • "SiteURL" 을 설정합니다: Mattermost 애플리케이션의 도메인 이름 (예: https://mattermost.example.com ).

config.json 구성 파일을 수정한 후에 Mattermost 서버를 시작할 수 있습니다:

  sudo systemctl start mattermost

Mattermost가 실행 중인지 확인하세요: curl http://localhost:8065 . Mattermost 서버에서 반환된 HTML을 볼 수 있어야 합니다.

최종 단계는 귀하의 요구 사항에 따라, Mattermost가 시스템 부팅 시 시작하도록 sudo systemctl enable mattermost.service 를 실행하는 것입니다.

업데이트

tarball을 사용하여 Mattermost 서버 설치를 업데이트하려면 수동으로 여러 단계를 수행해야 합니다. 자세한 내용은 Mattermost 서버 업그레이드 문서를 참조하세요.

Mattermost 제거

어떠한 이유로든 Mattermost 서버를 제거하고자 하는 경우, Mattermost 서버를 중지하고 모든 중요한 파일을 백업한 후 다음 명령을 실행해야 합니다.

 sudo rm /opt/mattermost

Note

구성, 로그, 플러그인, 클라이언트/플러그인 및 데이터와 같은 /opt/mattermost 의 여러 중요한 폴더가 있을 수 있습니다. rm 명령을 실행하기 전에 이러한 위치를 꼭 백업하는 것을 강력히 권장합니다.

또한 응용 프로그램을 실행하는 데 생성된 Mattermost systemd 단위 파일 및 사용자/그룹을 제거할 수 있습니다.

자주 묻는 질문

Mattermost가 시스템 부팅 시 시작되지 않는 이유는 무엇인가요?

Mattermost 서버를 시스템 부팅 시 시작하려면, systemd 유닛 파일을 활성화해야 합니다. 다음 명령을 실행하세요:

  sudo systemctl enable mattermost.service

Mattermost가 시스템 부팅 시 시작하지 못하는 이유는 무엇인가요?

만약 데이터베이스가 Mattermost 서버와 동일한 시스템에 있다면, /lib/systemd/system/mattermost.service systemd 유닛 파일을 편집하여 [Unit] 섹션에 After=postgresql.serviceBindsTo=postgresql.service 를 추가하는 것을 권장합니다.

프록시 없이 Mattermost를 실행할 수 있나요?

네. Mattermost는 8065 대신 443에 바인딩됩니다. 이를 위해 올바른 권한이있는 Mattermost 이진 파일이 필요합니다. 다음 명령을 실행하여 포트가 1024보다 낮은 값에 바인딩하도록 CAP_NET_BIND_SERVICE 기능을 활성화해야 합니다:

  sudo setcap cap_net_bind_service=+ep ./mattermost/bin/mattermost

Note

  • 200명 이하의 동시 사용자에 대해서는 Mattermost 서버 앞에 프록시를 사용하는 것을 강력히 권장합니다. 200명 이하의 동시 사용자가 있는 경우, TLS 설정 을 할 수 있습니다. 200명을 초과하는 동시 사용자가 있는 경우, 트래픽을 관리하기 위해 NGINX와 같은 프록시 가 필요합니다.

데이터베이스 설치

Note

PostgreSQL 또는 MySQL 중 하나의 데이터베이스만 필요합니다. 데이터베이스 버전 지원에 대한 자세한 정보는 데이터베이스 소프트웨어 문서를 참조하십시오.

Mattermost 서버에서 사용할 PostgreSQL 데이터베이스를 설치하고 설정합니다. 다음 지침은 이 서버의 IP 주소가 10.10.10.1 인 것으로 가정합니다.

  1. 데이터베이스를 호스팅할 서버에 로그인하고 PostgreSQL을 설치합니다. 자세한 내용은 PostgreSQL 문서를 참조하십시오. 설치가 완료되면 PostgreSQL 서버가 실행되고 *postgres*라는 Linux 사용자 계정이 생성됩니다.

  2. sudo --login --user postgres 명령을 실행하여 postgres 계정에 로그인합니다.

  3. psql 명령을 실행하여 PostgreSQL 대화형 터미널을 시작합니다.

  4. 다음을 실행하여 Mattermost 데이터베이스를 생성합니다: postgres=# CREATE DATABASE mattermost; .

  5. 다음을 실행하여 Mattermost 사용자 ‘mmuser’를 생성합니다: postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password'; .

Note

mmuser-password 보다 안전한 암호를 사용하십시오.

  1. 다음을 실행하여 사용자에게 Mattermost 데이터베이스에 대한 액세스 권한을 부여합니다: postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser; .

  2. postgres=# \q 명령을 실행하여 PostgreSQL 대화형 터미널을 종료합니다.

  3. exit 명령을 실행하여 postgres 계정에서 로그아웃합니다.

  4. (선택 사항) 데이터베이스와 Mattermost 앱 서버를 별도의 서버에서 사용하는 경우 PostgreSQL이 모든 할당된 IP 주소에서 수신하도록 할 수 있습니다. 이를 위해 현재 실행 중인 PostgreSQL 버전으로 /etc/postgresql/{version}/main/postgresql.conf 파일을 *root*로 텍스트 편집기에서 열고 다음을 수행하십시오. bewbest practice라서 모든 Mattermost 서버만 방화벽을 사용하여 PostgreSQL 포트에 연결할 수 있도록 합니다.

  1. 다음 라인을 찾습니다: #listen_addresses = 'localhost' .

  2. 주석 처리된 라인을 찾아 localhost* 로 변경합니다: listen_addresses = '*' .

  3. 변경 사항이 적용되도록 PostgreSQL을 다시 시작합니다: sudo systemctl art postgresql .

  1. Mattermost 서버가 데이터베이스와 같은 머신에 있는 경우 파일을 수정하여 Mattermost 서버가 데이터베이스와 통신할 수 있도록합니다 pg_hba.conf :

Mattermost 서버와 데이터베이스가 동일한 머신에있는 경우 :

  1. 다음 라인을 편집합니다:

    local   all             all                        peer

    host    all             all         ::1/128        ident

  2. peeridenttrust 로 변경합니다:

local   all             all                        trust

host    all             all         ::1/128        trust

Mattermost 서버와 데이터베이스가 다른 머신에있는 경우 :

  1. 다음을 파일 끝에 추가하고 {mattermost-server-IP} 를 Mattermost 서버를 포함한 머신의 IP 주소로 바꿉니다: host all all {mattermost-server-IP}/32 md5 .

  1. sudo systemctl reload postgresql 명령을 실행하여 PostgreSQL을 다시로드합니다.

  2. mmuser 사용자로 연결할 수 있는지 확인합니다.

  1. Mattermost 서버와 데이터베이스가 동일한 머신에 있는 경우 다음 명령을 사용합니다: psql --dbname=mattermost --username=mmuser --password

  2. Mattermost 서버가 다른 머신에 있는 경우 해당 머신에 로그인하고 다음 명령을 사용합니다: psql --host={postgres-server-IP} --dbname=mattermost --username=mmuser --password

Note

명령을 사용할 수 있도록 PostgreSQL 클라이언트 소프트웨어를 설치해야 할 수 있습니다.

PostgreSQL 대화형 터미널이 시작됩니다. PostgreSQL 대화형 터미널을 종료하려면 Windows 또는 Linux에서는 \q 를 입력한 후 :kbd: Enter 를 누르고 Mac에서는 :kbd: 를 누릅니다.

데이터베이스를 설치하고 초기 설정을 완료했으므로 이제 Mattermost 서버를 설치할 수 있습니다.

  1. MySQL에서 로그아웃하려면 mysql> exit 을 실행하십시오. 데이터베이스가 설치되고 초기 설정이 완료되면 Mattermost 서버를 설치할 수 있습니다.

Mattermost 서버 구성

시스템 관리자 사용자를 만들고 Mattermost를 일반적으로 사용하기 위해 설정합니다.

  1. 브라우저를 열고 Mattermost 인스턴스로 이동합니다. 예를 들어, 만일 Mattermost 서버의 IP 주소가 10.10.10.2 라면 http://10.10.10.2:8065 로 이동합니다.

  2. 첫 번째 팀과 사용자를 만듭니다. 시스템의 첫 번째 사용자는 system_admin 역할을 가지며, 이를 통해 시스템 콘솔에 액세스할 수 있습니다.

  3. 시스템 콘솔을 엽니다. 탐색 패널 왼쪽 상단의 제품 메뉴를 선택한 후 System Console 을 선택합니다.

  4. 사이트 URL을 설정합니다:

  • System Console > Environment > Web Server 를 엽니다.

  • Site URL 필드에서 사용자가 브라우저를 지정하는 URL을 설정합니다. 예를 들어, *https://mattermost.example.com*과 같이 HTTPS를 사용하는 경우, Mattermost 서버나 프록시에서 TLS를 설정했는지 확인하세요.

  1. 이메일 알림을 설정합니다.

  • Site Configuration > Notifications 에서 다음과 같이 변경합니다:

  • 이메일 알림 활성화true 로 설정합니다.

  • 알림 표시 이름No-Reply 로 설정합니다.

  • 발신자 주소{your-domain-name} (예: example.com)으로 설정합니다.

  • System Console > Environment > SMTP 에서 다음과 같이 변경합니다:

  • SMTP 서버 사용자 이름{SMTP-username} (예: admin@example.com)으로 설정합니다.

  • SMTP 서버 비밀번호*{SMTP-password}*로 설정합니다.

  • SMTP 서버{SMTP-server} (예: mail.example.com)로 설정합니다.

  • SMTP 서버 포트*465*로 설정합니다.

  • 연결 보안 을 SMTP 서버가 허용하는 TLS 또는 *STARTTLS*로 설정합니다.

  • 저장 을 선택합니다.

  • 연결 테스트 를 선택합니다.

  1. 파일 및 이미지 저장 위치를 설정하기 위해 System Console > Environment > File Storage 를 엽니다.

  • 파일을 로컬에 저장하는 경우, File Storage SystemLocal File System*으로 설정한 후, **로컬 저장소 디렉터리* 를 기본값으로 허용하거나 위치를 입력합니다. 위치는 존재하고 Mattermost 서버에 대한 쓰기 권한이 있는 디렉터리여야 합니다. 절대 경로 또는 상대 경로가 될 수 있습니다. 상대 경로는 mattermost 디렉터리를 기준으로 상대적입니다.

  • 파일을 Amazon S3에 저장하는 경우, File Storage System*Amazon S3*로 설정하고 Amazon 계정에 적합한 값을 입력합니다.

Note

  • 사용자가 메시지에 첨부하는 파일 및 이미지는 데이터베이스에 저장되지 않습니다. 그 대신, 로컬 파일 시스템이나 Amazon S3와 같이 지정한 위치에 저장됩니다.

  • 위치에 충분한 여유 공간이 있도록 합니다. 필요한 저장 공간의 양은 사용자 수 및 사용자가 메시지에 첨부하는 파일의 수와 크기에 따라 다릅니다.

  1. 구성을 적용하기 위해 저장 을 선택합니다.

  2. 적용 가능한 다른 설정을 검토하고 구성합니다.

  3. sudo systemctl art mattermost 를 실행하여 Mattermost를 다시 시작합니다.

Mattermost 서버에 TLS 구성

HTTPS로 사용자가 연결하길 원한다면 두 가지 옵션이 있습니다:

  1. Mattermost 서버에 TLS 설정.

  2. NGINX와 같은 프록시를 설치하고 프록시에 TLS 설정.

가장 쉬운 옵션은 Mattermost 서버에 TLS를 설정하는 것이지만, 200명 이상의 사용자가 예상된다면 성능을 더 향상시키기 위해 프록시를 사용하세요. 프록시 서버는 또한 표준 HTTP 요청 로그를 제공합니다.

Note

도메인 이름을 확인하고 인증서를 발급하기 위해 Let’s Encrypt CA에서 Mattermost 서버에 액세스할 수 있어야 합니다. 방화벽을 열고 역방향 프록시를 구성하여 트래픽을 포트 80과 443으로 전달해야 합니다. 자세한 정보는 Let’s Encrypt 에서 확인할 수 있습니다.

Mattermost 서버에 TLS 구성

  1. 시스템 콘솔 > 환경 > 웹 서버 (버전 5.12 이전의 경우 시스템 콘솔 > 일반 > 구성 )

  1. 수신 주소 설정을 :443 로 변경하십시오.

  2. 연결 보안 설정을 TLS 로 변경하십시오.

  3. 포트 80을 443으로 전달 설정을 true 로 변경하십시오.

  1. Mattermost가 낮은 포트에 바인딩할 수 있도록 CAP_NET_BIND_SERVICE 기능을 활성화하세요.

    sudo setcap cap_net_bind_service=+ep /opt/mattermost/bin/mattermost

  2. 보안 인증서를 설치하세요. Let’s Encrypt 를 사용하여 인증서를 자동으로 설치하고 설정하거나 직접 인증서를 지정할 수 있습니다.

Let’s Encrypt 인증서 사용

인증서는 클라이언트가 Mattermost 서버에 연결을 시도하는 첫 번째 시도에 검색됩니다. 클라이언트가 서버에 접근하려는 모든 호스트 이름에 대해 인증서가 검색됩니다.

  1. Let’s Encrypt 사용 설정을 true 로 변경하세요.

  2. 이러한 변경 사항이 적용되려면 Mattermost 서버를 재시작하세요.

Note

Let’s Encrypt가 활성화된 경우 Forward80To443config.json 설정을 true 로 변경하여 Let’s Encrypt 인증을 완료하기 위해 방화벽을 통해 포트 80을 전달하세요.

자체 인증서 사용

  1. Let’s Encrypt 사용 설정을 false 로 변경하세요.

  2. TLS 인증서 파일 설정을 인증서 파일의 위치로 변경하세요.

  3. TLS 키 파일 설정을 개인 키 파일의 위치로 변경하세요.

  4. 이러한 변경 사항이 적용되려면 Mattermost 서버를 재시작하세요.

Note

암호로 보호된 인증서는 지원되지 않습니다.

NGINX에서 TLS 사용 (프록시로)

Note

NGINX에 대해 TLS를 설정하기 전에 Mattermost에 대해 설정하지 마십시오. TLS는 NGINX가 Mattermost 서버와의 통신을 성공적으로 하는 것을 방해합니다.

  • NGINX는 클라이언트와 Mattermost 서버 간의 트래픽을 암호화하기 위한 전달 프록시로 작동합니다. SSL 인증서를 설치한 후에 들어오는 트래픽은 인터넷에 노출된 포트 443에서 NGINX를 통해 처리되고, 포트 80에서 Mattermost 서버로 프록시됩니다.

  • (선택 사항) NGINX에서 Mattermost 서버로의 상류 암호화가 허용됩니다.

  • NGINX의 TCP 상류 서버에 대한 SSL 종료 설정 안내서 를 따르세요.

기타 유용한 자료:

NGINX 서버 설치

NGINX는 인터넷 상에서 가장 크고 높은 트래픽을 가진 사이트들을 호스팅하는 역할을 맡은 인기 있는 웹 서버입니다. 대부분의 경우에 Apache보다 자원을 효율적으로 활용하며, 웹 서버 또는 리버스 프록시로 사용할 수 있습니다.

운영 환경에서는 Mattermost의 보안과 성능을 더욱 강화하기 위해 프록시 서버를 사용하는 것을 권장합니다.

  • SSL 종료

  • HTTP에서 HTTPS로 리디렉션

  • 포트 매핑 :80 에서 :8065

  • 표준 요청 로그

Ubuntu 서버에 NGINX 설치

  1. 프록시 호스트가 될 서버에 로그인하고 터미널 창을 엽니다.

  2. NGINX를 설치합니다.

NGINX는 Ubuntu의 기본 저장소에서 이용 가능하기 때문에 apt 패키지 시스템을 사용하여 이 저장소에서 설치할 수 있습니다. 먼저, 최신 패키지 목록에 액세스하기 위해 로컬 apt 패키지 색인을 업데이트합니다. 그런 다음, nginx 를 설치합니다:

sudo apt update

sudo apt install nginx

절차를 수락한 후, apt 는 NGINX와 서버에 필요한 의존성을 모두 설치할 것입니다.

  1. 설치를 완료한 뒤에는 이미 필요한 것 모두가 설치되어 있습니다. 브라우저를 서버 IP 주소로 지정하여 엽니다. 기본 NGINX 랜딩 페이지가 표시되어야 합니다:

기본 NGINX 랜딩 페이지 예시.

이 페이지가 보인다면, 웹 서버에 NGINX가 성공적으로 설치된 것입니다. 이 페이지는 NGINX와 함께 제공되어 서버가 올바르게 실행 중인지 보여주는 역할을 합니다.

또는 curl http://localhost 명령을 실행하여 확인할 수도 있습니다.

만약 NGINX가 실행 중이라면, 다음 출력이 표시됩니다:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx! </title>
.
.
.
*Thank you for using nginx.*

</body>
</html>

NGINX 프로세스 관리

이제 웹 서버가 실행 중이므로 몇 가지 기본 관리 명령을 확인해봅시다. 이러한 명령은 모두 명령 줄 인터페이스에서 실행됩니다.

웹 서버를 중지하려면 다음을 사용하세요: sudo systemctl stop nginx

중지된 웹 서버를 시작하려면 다음을 사용하세요: sudo systemctl start nginx

서비스를 중지한 다음 다시 시작하려면 다음을 사용하세요: sudo systemctl art nginx

구성 변경을 수행 중인 경우에는, 연결을 끊지 않고도 NGINX를 다시로드하는 경우가 많습니다. 이를 위해서는 다음을 사용하세요: sudo systemctl reload nginx

기본적으로 NGINX는 서버 부팅 시 자동으로 시작하도록 구성되어 있습니다. 이를 원하지 않는 경우, 다음을 사용하여 이 동작을 비활성화할 수 있습니다: sudo systemctl disable nginx

부팅 시 서비스를 다시 활성화하려면, 다음을 사용하세요: sudo systemctl enable nginx

다음 작업

  1. mattermost.example.com 과 같은 완전히 정규화된 도메인 이름(FQDN)을 DNS 서버/서비스에 매핑하여 NGINX 서버를 가리킵니다.

  2. 인터넷에서 Mattermost 서버로의 프록시 연결을 구성합니다.

Mattermost 서버를 프록시로 구성하려면 NGINX 구성

NGINX는 /etc/nginx/sites-available 디렉터리에 있는 파일을 사용하여 구성됩니다. 파일을 생성한 다음 활성화해야 합니다. 파일을 생성할 때 Mattermost 서버의 IP 주소와 Mattermost 웹 사이트의 완전히 정규화된 도메인 이름(FQDN)이 필요합니다.

  1. NGINX를 호스트하는 서버에 로그인하고 터미널 창을 엽니다.

  2. Ubuntu에서는 다음 명령을 실행하여 Mattermost를 위한 구성 파일을 만듭니다.

    sudo touch /etc/nginx/sites-available/mattermost

RHEL 8에서는 다음 명령을 실행하여 Mattermost를 위한 구성 파일을 만듭니다.

sudo touch /etc/nginx/conf.d/mattermost

  1. 텍스트 편집기에서 /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 "";
}
  1. 기존의 default sites-enabled 파일을 삭제하려면 Ubuntu에서 sudo rm /etc/nginx/sites-enabled/default 또는 RHEL 8에서 sudo rm /etc/nginx/conf.d/default 를 실행합니다.

  2. 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 를 실행합니다.

  3. sudo systemctl art nginx 를 실행하여 NGINX를 다시 시작합니다.

  4. curl https://localhost 를 실행하여 프록시를 통해 Mattermost를 볼 수 있는지 확인하세요.

모든 것이 작동한다면, Mattermost 가입 페이지의 HTML이 표시됩니다.

  1. 포트 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 을 참조하십시오.

  1. NGINX를 호스팅하는 서버에 로그인하고 터미널 창을 엽니다.

  2. 텍스트 편집기로 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;
    }
}
  1. 기존의 기본 sites-enabled 파일을 제거하려면 sudo rm /etc/nginx/sites-enabled/default (Ubuntu) 또는 sudo rm /etc/nginx/conf.d/default (RHEL 8)을 실행합니다.

  2. 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)을 실행합니다.

  3. 구성이 올바르게 완료되었는지 확인하려면 sudo nginx -t 를 실행합니다. 오류가 발생하면 NGINX 구성을 검토하고 /etc/nginx/sites-available/mattermost 파일을 수정해야 합니다.

  4. sudo systemctl start nginx 를 실행하여 NGINX를 다시 시작합니다.

  5. curl http://localhost 를 실행하여 프록시를 통해 Mattermost를 확인합니다.

모든 것이 정상적으로 작동하면 Mattermost 가입 페이지의 HTML을 볼 수 있습니다. IP 또는 localhost로 액세스할 때 유효하지 않은 인증서가 표시됩니다. SSL 인증서가 올바르게 고정되었고 유효한지 확인하려면 완전한 FQDN 도메인을 사용하십시오.

  1. sudo snap install core; sudo snap refresh core 를 실행하여 Snap을 설치하고 업데이트합니다.

  2. sudo snap install --classic certbot 을 실행하여 Certbot 패키지를 설치합니다.

  3. Certbot이 실행될 수 있도록 심볼릭 링크를 추가하려면 sudo ln -s /snap/bin/certbot /usr/bin/certbot 을 실행합니다.

  4. DNS가 올바르게 구성되었는지 Dry-run을 실행하여 Let’s Encrypt 설치기가 정상적으로 실행되는지 확인하려면 sudo certbot certonly --dry-run 을 실행합니다.

이 작업은 이메일 주소를 입력하고 TOS를 수락하고 이메일을 공유하며 certbot을 활성화하는 도메인을 선택하라는 메시지가 표시됩니다. 이를 통해 DNS가 이 서버를 올바르게 가리키고 인증서를 성공적으로 생성할 수 있는지 확인합니다. 이 작업이 성공하면 단계 12로 진행하십시오.

  1. sudo certbot 을 실행하여 Let’s Encrypt 설치기를 실행합니다. 이 작업은 certbot을 실행하고 선택한 사이트의 NGINX 구성 파일을 자동으로 수정합니다.

  2. SSL이 올바르게 구성되었는지 확인하려면 curl https://{your domain here} 을 실행합니다.

  3. 마지막으로, 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

}
  1. 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 프록시를 어떻게 설정하나요?

  1. Mattermost 네트워크의 이름을 찾고 NGINX 프록시에 연결합니다.

docker network ls
# "mymattermost_default"와 같은 Mattermost 네트워크의 이름을 찾습니다.
docker network connect mymattermost_default nginx-proxy
  1. Mattermost Docker 컨테이너를 다시 시작합니다.

docker-compose stop app
docker-compose start app

Tip

NGINX 프록시가 들어오는 요청을 허용하기 때문에 ‘web’ 컨테이너를 실행할 필요가 없습니다.

  1. docker-compose.yml 파일을 업데이트하여 VIRTUAL_HOSTexpose 지시문을 추가하세요.

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을 업데이트해야 할 수 있습니다.

  1. 관리자로서 GitLab 인스턴스에 로그인합니다.

  2. Admin > Applications 으로 이동합니다.

  3. GitLab-Mattermost에서 편집 을 선택합니다.

  4. 새 도메인/URL로 콜백 URL을 업데이트합니다.

  5. 변경사항을 저장합니다.

  6. /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"}

이는 인증서를 생성하려는 시도가 너무 많았음을 의미합니다. 자세한 내용은 여기 에서 찾을 수 있습니다.