구성 데이터범에 대한 구성

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

deployment-img self-hosted 배포판

Mattermost 설치의 활성 구성을 데이터베이스의 단일 진실의 소스로 사용할 수 있습니다. 이렇게 하면 Mattermost 이진 파일이 기본 config.json 파일을 읽는 대신 데이터베이스의 구성 설정을 읽게 됩니다.

Mattermost는 이 기능이 출시된 이후부터 우리 커뮤니티 서버 에서 이 옵션을 사용하고 있으며, 고가용성 배포 에서 사용할 것을 권장합니다.

이 옵션을 사용하는 이점:

  • 고가용성 배포 및 읽기 전용 컨테이너 환경에서도 시스템 콘솔에서 편리하게 구성 변경을 관리합니다.

  • 고가용성 배포의 모든 서버에 동일한 구성이 있는지 확인하며, 클러스터에 새로운 서버가 추가되더라도 동일한 구성을 유지합니다.

  • SAML 인증서 및 키를 클러스터의 모든 서버에 자동으로 배포합니다.

데이터베이스에서 구성을 사용하기 시작하면 활성 구성 행을 수동으로 편집해서는 안 됩니다. 구성을 다음과 같은 방법 중 하나를 사용하여 편집하거나 업데이트해야 합니다:

  • 시스템 콘솔을 사용하여 구성 변경을 수행합니다.

  • mmctl 을 사용하여 구성 변경을 수행합니다.

  • 실행 중인 mattermost-server 인스턴스 중지하고 활성 구성 행을 직접 Configurations 테이블에서 편집합니다.

Mattermost 서버는 활성 구성을 메모리에 유지하고 새 구성이 발생할 때만 데이터베이스에 쓰기 때문에 데이터베이스를 폴링하여 구성 변경을 처리하는 것을 피합니다. 클러스터에 변경 사항을 배포하는 작업은 응용 프로그램 자체에서 처리합니다.

데이터베이스로 구성 마이그레이션 방법

이 지침은 Mattermost 구성을 데이터베이스로 마이그레이션하고 systemd 구성을 업데이트하는 내용을 다룹니다.

Note

이 지침은 Mattermost 서버가 /opt/mattermost 에 설치되어 있다고 가정합니다. 다른 디렉터리에서 Mattermost를 실행 중이라면 환경에 맞게 경로를 수정해야 합니다.

데이터베이스 연결 문자열 가져오기

첫 번째 단계는 마스터 데이터베이스 연결 문자열을 가져오는 것입니다. SqlSettings.DataSource 의 값을 복사하거나 해당 환경 변수인 MM_SQLSETTINGS_DATASOURCE 에서 가져오기를 권장합니다.

만약 SqlSettings.DataSourcepostgres:// 로 시작하지 않는다면, 사용 중인 데이터베이스를 기반으로 이 줄을 시작에 추가해야 합니다. 또한, \u0026 이 있는 경우에는 & 로 바꿔야 합니다.

다음은 연결 문자열의 예시입니다:

postgres://mmuser:really_secure_password@localhost:5432/mattermost?sslmode=disable&connect_timeout=10

MySQL

mysql://mmuser:really_secure_password@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s

환경 파일 생성하기

Note

고가용성 클러스터에서 Mattermost를 실행 중이라면, 이 단계를 클러스터의 모든 서버에서 수행해야 합니다.

/opt/mattermost/config/mattermost.environment 파일을 만들어 MM_CONFIG 환경 변수를 데이터베이스 연결 문자열로 설정합니다. 예를 들면:

MM_CONFIG='postgres://mmuser:mostest@localhost:5432/mattermost_test?sslmode=disable&connect_timeout=10'

다음 명령을 실행하여 Mattermost 디렉터리의 권한을 확인합니다:

sudo chown -R mattermost:mattermost /opt/mattermost

Mattermost systemd 파일 수정하기

먼저 다음을 사용하여 mattermost.service 파일을 찾습니다:

sudo systemctl status mattermost.service

출력의 두 번째 줄에 실행 중인 mattermost.service 파일의 위치가 표시됩니다.

Loaded: loaded (/lib/systemd/system/mattermost.service; enabled; vendor preset: enabled)

root로 이 파일을 편집하여 ExecStart 로 시작하는 줄 바로 위에 아래 텍스트를 추가합니다:

EnvironmentFile=/opt/mattermost/config/mattermost.environment

다음은 EnvironmentFile 줄이 추가된 완전한 mattermost.service 파일입니다:

[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
Requires=postgresql.service

[Service]
Type=notify
EnvironmentFile=/opt/mattermost/config/mattermost.environment
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=postgresql.service

config.json 에서 구성 마이그레이션하기

mmctl config migrate 명령을 사용하여 구성을 마이그레이션할 수 있습니다.

Note

고가용성 클러스터를 사용 중이라면, 이 작업은 클러스터의 단일 서버에서만 실행해야 합니다.

Warning

구성을 마이그레이션할 때, Mattermost는 현재 셸에서 설정된 기존 MM_* 환경 변수에서 구성을 통합합니다. 환경 변수 를 참조하세요.

환경 파일과 마찬가지로 데이터베이스 연결 문자열에 있는 어떤 단일 인용부호도 이스케이프해야 합니다. 또한, 기존의 SAML 인증서도 클러스터의 모든 서버에서 사용할 수 있도록 데이터베이스로 마이그레이션될 것입니다.

데이터베이스에서 구성이 활성화되면, 구성 변경 사항이 ConfigurationsConfigurationFiles 테이블에 기록됩니다. 또한, ClusterSettings.ReadOnlyConfig 가 무시되어 시스템 콘솔을 완전히 사용할 수 있습니다.

개별 서버별로 설정해야 하는 구성 설정이 있다면, 해당 값을 mattermost.environment 파일에 환경 변수로 추가해야 합니다. 이 값들은 각자의 줄에 있어야 하며, 올바르게 이스케이프해야 합니다.

구성이 올바르게 마이그레이션되었는지 확인하기

구성은 데이터베이스의 Configurations 테이블에 저장됩니다. 구성이 성공적으로 마이그레이션되었는지 확인하려면 다음 쿼리를 실행합니다:

SELECT * FROM Configurations WHERE Active = 1;

정확히 하나의 행이 반환되어야 하며, 해당 행의 Value 필드는 config.json 파일과 일치해야 합니다.

systemd 파일 다시로드 및 Mattermost 재시작

Note

고가용성으로 Mattermost를 실행 중이라면, 이 단계는 클러스터의 모든 서버에서 실행해야 합니다.

마지막으로, 새로운 MM_CONFIG 환경 변수를 사용하여 데몬을 다시로드하고 Mattermost를 재시작하는 명령을 실행합니다.

sudo systemctl daemon-reload
sudo systemctl art mattermost

롤백

데이터베이스에서 구성에 문제가 발생한 경우 /opt/mattermost/config/mattermost.environment 파일의 MM_CONFIG 줄을 주석 처리하고 systemctl art mattermost 로 Mattermost를 다시 시작하여 config.json 파일로 롤백할 수 있습니다.

문제 해결

서버가 시작하지 않음

실제로 파일을 가리키지 않은 상태에서 --disableconfigwatch 플래그를 제공하면 적절한 오류 메시지와 함께 서버를 시작하지 못할 것입니다.