클라우드프론트를 구성하여 Mattermost 정적 에셋을 호스팅하는 방법

Mattermost의 정적 에셋을 클라우드프론트로 호스팅하면 팀의 지리적으로 분산된 구성원들에게 개선된 캐싱 성능과 더 짧은 로드 시간을 제공할 수 있습니다.

  1. 원하는 도메인을 사용하여 S3 버킷을 생성합니다. 이 예에서는 mattermost.example.com 입니다.

  2. S3 버킷에 정적 호스팅을 활성화합니다.

  3. SiteURL이 하위 경로로 구성된 경우(예: https://example.com/company/mattermost), 업로드 전에 정적 에셋을 다시 작성해야 합니다. 다음 명령을 사용하여 지정된 하위 경로에 대한 에셋을 다시 작성할 수 있습니다:

    mattermost config subpath --path /company/mattermost

  4. Mattermost 배포에서 client 디렉터리를 S3에 업로드하고 static 으로 이름을 변경합니다. client 디렉터리 내부에서 다음 AWS CLI 명령을 사용하여 모든 파일을 S3에 업로드할 수 있습니다. 파일은 public-read 권한으로 공개적으로 읽기 가능해야 합니다.

    aws s3 cp --acl public-read --recursive . s3://static.spinmint.com/static/

  5. Mattermost 앱 서버를 설정하고 원하는 도메인의 서브도메인을 직접 앱 서버로 연결하는 레코드를 만듭니다. 이것은 클라우드프론트를 우회하여 웹소켓을 연결하기 위한 것입니다. 이 예에서는 도메인을 ws.mattermost.example.com 으로 사용합니다. 여러 개의 앱 서버가 있는 경우이 도메인은 ALB나 NGINX와 같은 로드 밸런서/프록시를 가리켜야 합니다.

  6. 다음 구성으로 Web 클라우드프론트 분산을 만듭니다.

    1. Origin Domain Name을 위에서 생성한 S3 버킷으로 설정합니다.

    2. (권장 사항) Viewer Protocol Policy의 Redirect HTTP를 HTTPS 로 설정합니다.

    3. 허용된 HTTP 메소드를 GET, HEAD, OPTIONS, POST, PATCH, DELETE 로 설정합니다.

    4. Forward Cookies를 All 로 설정합니다.

    5. Query string forwarding 및 Caching을 Forward all, cache based on all 로 설정합니다.

    6. Mattermost에 액세스하고자 하는 도메인을 대체 도메인 이름으로 설정합니다. 예: mattermost.example.com.

    7. Custom SSL Certificate 를 선택하고 도메인에 대한 인증서를 설정합니다.

    8. Default Root Object를 /static/root.html 로 설정합니다.

  7. 분산을 만든 후에는 추가 origin을 추가해야 합니다. origin 탭을 선택하고 origin을 만듭니다. origin 도메인 이름을 Mattermost 로드 밸런서로 설정합니다.

  8. 다음으로 behavior를 생성합니다.

    1. Path Pattern을 /api/* 로 설정합니다.

    2. origin을 Mattermost 앱 서버 또는 로드 밸런서로 설정합니다.

    3. 허용된 HTTP 메소드를 GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE 로 설정합니다.

    4. Forward Cookies를 `All`로 설정합니다.

    5. Query string forwarding 및 Caching을 Forward all, cache based on all 로 설정합니다.

  9. 다음으로, 오류 페이지 탭에서 사용자 정의 오류 응답을 설정합니다.

    1. HTTP 오류 코드를 403 으로 설정합니다.

    2. Customize Error Response를 Yes 로 설정합니다.

    3. 응답 페이지 경로를 /static/root.html 로 설정합니다.

    4. HTTP 응답 코드를 200 으로 설정합니다.

    5. HTTP 오류 코드 404에 대해 위의 단계를 반복합니다.

  10. 이제 Mattermost가 제공되는 도메인을 클라우드프론트 분산에 가리키도록 설정할 수 있습니다. 이 도메인을 설정하는 것은 이 안내서의 범위를 벗어납니다.

  11. 마지막으로, 다음과 같이 Mattermost의 config.json 설정을 설정합니다:

    1. SiteURL: https://mattermost.example.com

    2. WebsocketURL: wss://ws.mattermost.example.com

    3. AllowCorsFrom: https://mattermost.example.com

    4. AllowCookiesForSubdomains: true

업그레이드 참고 사항

Mattermost 앱 서버를 업그레이드할 때는 새 클라이언트를 S3 버킷에 다시 업로드해야 합니다(위의 단계 3 및 4 참조).

또한 /static/root.html 에 대해 클라우드프론트 무효화를 실행해야 합니다. 이것은 무효화 탭 아래의 콘솔에서 수행할 수 있습니다.