본문 바로가기

공부/컴퓨터

docker로 Mattermost 설치시 let's encrypt 이용해 tls 적용하는 방법

slack을 쓰다가...

  • 팀에서 Slack을 잘 사용하고 있었다.
  • 어느날 무료로 높은 등급을 준다고 해서 잘 썼는데... 시간이 지났더니.. 그게 끝났다.
  • 아, 이제 검색이 안되네? ㅎ.
  • 유료로 사용하긴 비싸고... 역시 설치형인가.. 흠..

Rocket.chat/Mattermost 를 대충 써 보니..

  • Rocket.chat 과 Mattermost가 설치형으로 사용할 수 있다.
  • 둘 다 설치해 봤는데, Rocket.chat이 사용이 좀 더 불편해서 Mattermost 를 설치하는것으로 결정.

Mattermost 설치하기

  • 역시나 docker로 설치하면 편하다.
  • 멀티노드로 실행하려면 다음의 링크를 타고 가자 : https://docs.mattermost.com/install/prod-docker.html
  • 나는 싱글노드(컴퓨터 1대)에 설치할거라 걍 쉬운 방법으로 : https://docs.mattermost.com/install/docker-local-machine.html
  • 여기서 알려주는 명령어는 아래와 같다. ( 이거 쓰면 안되니깐 우선 먼저 내용을 읽자. )
    • docker run --name mattermost-preview -d --publish 8065:8065 --add-host dockerhost:127.0.0.1 mattermost/mattermost-preview
  • 하지만, Let's Encrypt를 이용한 TLS 설정도 할 거면 좀 바꿔야 한다.
  • 우선 설명을 먼저하고 제대로 된 명령어는 저 아래에 적어 두겠다.

DNS 설정부터

  • 나는 Let's Encrypt 를 사용해서 무료로 제공하는 TLS를 사용할 거다.
  • Let's Encrypt를 사용하려면 먼저 IP와 FQDN(도메인)을 맵핑해야 한다. 즉, DNS 서버에 A Record를 먼저 설정해야 한다.
  • 이 설명에서는 서버의 IP를 101.101.111.222라고 가정하고, FQDN은 mattermost.somedomain.com라고 가정하겠다.
  • DNS에 A Record를 설정한 후에는 업데이트 되기까지 짧으면 2~3분, 길면 24시간이 걸리는 경우도 있다.
  • 이 작업을 완료한 뒤, Mattermost가 설치될 서버에서 ping mattermost.somedomain.com 명령어로 IP가 잘 연결 되었는지 확인 후 아래를 진행한다.

Mattermost 에서 TLS 설정

  • 위에 알려준 docker 명령을 실행하면, Mattermost가 8065번 port로 뜬다. ( 아래 제대로 된 명령어가 나오니, 우선 읽자. )
  • 그럼 http://101.101.111.222:8065/ 로 접근하면, admin 계정을 만들게 되고, 이후 System Console 혹은 Admin console에서 각종 설정을 할 수 있다.
  • 접속 주소는 http://101.101.111.222:8065/admin_console 이다.
  • TLS를 설정하려면 System Console에서 ENVIRONMENT 부분에 Web Server 부분을 수정해야 한다.

System Console에서 Web Server부분을 다시 설정하자.

  • 아래의 설정을 입력해 보자.
    • Site URL은 아직 TLS 설정이 되지 않았지만, 그냥 https://mattermost.somedomain.com 으로 적어 줘야 한다. ( 중간에 있는 Test Live URL은 눌러봤자 동작안한다. 아직 https 서버가 안 떴기 때문이다. )
    • Listen Address:443으로 적어 준다.
    • Forward port 80 to 443true를 선택해 준다.
    • Connection SecurityTLS를 골라 준다.
    • Use Let's Encrypttrue를 선택해 준다.
    • 화면 아래에 있는 Save 버튼을 누른다.
  • 그림으로 보면 아래와 같다.

  • 위와 같이 설정했다는것은, 80번 http로 접근하면 443으로 포워딩하겠다는거다. 그리고 Let's Encrypt로 443에 대한 TLS 설정을 하겠다는것이다.
  • 즉, 우리가 만들어야 하는 docker container는 총 3개의 port를 오픈해야 한다.
    • 8065 : 최초 Mattermost를 띄우고 접근해서 각종 설정을 하는 port.
    • 80 : 일반 http 접속을 받아줄 port. 이곳으로 접근하면 443 port로 보내 https로 동작하도록 한다.
    • 443 : Let's Encrypt 에서 TLS 설정까지 해 준 https port.
  • 위 작업이 완료되면 docker container를 restart 시켜야 한다. 위에서 이야기한 docker 명령어를 먼저 쳤으면 당연히 제대로 동작하지 않을것이다. 그 명령은 8065만 연결해 뒀기 때문이다.

다시 Mattermost 설치하기, TLS 설정하기, 재시작하기, https로 접속하기

  • 아래의 명령어를 이용해 docker로 Mattermost를 설치하자. ( 중간에 있는 -e MATTERMOST_ENABLE_SSL=true는 제거해도 된다.)
  • docker run --name mattermost-preview --restart=always -d -p 80:80 --publish 8065:8065 -p 443:443 -e MATTERMOST_ENABLE_SSL=true --add-host dockerhost:127.0.0.1 mattermost/mattermost-preview
  • 이제 다시 위로 올라가서, TLS 설정을 진행하자.
  • TLS 설정을 완료하고 SAVE 버튼을 눌러 저장 한 뒤에 docker container를 재시작하자.
  • docker restart mattermost-preview
  • Mattermost가 제대로 실행될 수 있도록 30초~60초정도 기다 린뒤에 웹브라우져로 https://mattermost.somedomain.com으로 접근해 보면 TLS가 잘 동작하는것을 볼 수 있다.