데이터베이스에 구성 저장
자체 호스팅 Mattermost 배포가 있는 경우 데이터베이스를 Mattermost 설치의 활성 구성에 대한 단일 신뢰 소스로 사용할 수 있습니다. * High Availability 배포 및 읽기 전용 컨테이너화된 환경에서도 System Console에서 직접 구성 변경을 편리하게 관리할 수 있습니다.
자체 호스팅 Mattermost 배포가 있는 경우 데이터베이스를 Mattermost 설치의 활성 구성에 대한 단일 신뢰 소스로 사용할 수 있습니다. 이를 통해 Mattermost 바이너리가 기본 config.json 파일을 읽는 대신 데이터베이스의 구성 테이블에 저장된 구성 설정을 읽도록 변경됩니다. Mattermost는 기능이 출시된 이후로 커뮤니티 서버 에서 이 옵션을 실행하고 있으며, 고가용성 배포 를 사용하는 경우 이 옵션 사용을 권장합니다.
이 옵션의 이점:
* High Availability 배포 및 읽기 전용 컨테이너화된 환경에서도 System Console에서 직접 구성 변경을 편리하게 관리할 수 있습니다.
* 새 서버가 클러스터에 추가되는 경우에도 High Availability 배포의 모든 서버가 동일한 구성을 유지합니다.
* SAML 인증서 및 키를 클러스터의 모든 서버에 자동으로 배포합니다.
Mattermost 구성 데이터베이스와 Mattermost 애플리케이션 데이터베이스는 2개의 서로 다른 엔티티입니다. Mattermost 구성을 하나의 데이터베이스에 저장하고 Mattermost 데이터를 다른 데이터베이스에 저장하는 것이 가능합니다.
이를 위해 데이터 소스 구성 설정을 새 데이터 소스 이름으로 업데이트해야 하며, 이는 애플리케이션이 실행 중인 상태에서 수행할 수 있습니다. MM_SQLSETTINGS_DATASOURCE 환경 변수를 명시적으로 설정하여 파일이든 데이터베이스든 구성에 정의된 내용을 재정의하면 올바른 데이터 소스 이름이 Mattermost 애플리케이션에 전달됩니다.
구성을 데이터베이스로 마이그레이션하는 방법#
이 지침에서는 Mattermost 구성을 데이터베이스로 마이그레이션하고 데이터베이스에서 로드하도록 systemd 구성을 업데이트하는 방법을 설명합니다.
- 이 지침에서는 Mattermost 서버가
/opt/mattermost에 설치되어 있다고 가정합니다. Mattermost를 다른 디렉토리에서 실행 중인 경우 환경에 맞게 경로를 수정해야 합니다. - High Availability 클러스터 기반 배포에서 Mattermost를 실행 중인 경우 클러스터의 각 서버에서 아래의 모든 단계를 완료해야 합니다.
데이터베이스 연결 문자열 가져오기#
첫 번째 단계는 마스터 데이터베이스 연결 문자열을 가져오는 것입니다. SqlSettings.DataSource 의 값 또는 동등한 환경 변수 MM_SQLSETTINGS_DATASOURCE 의 복사본을 만들기 위해 config.json 파일에 액세스하는 것을 권장합니다.
SqlSettings.DataSource는postgres://또는mysql://로 시작해야 합니다. 그렇지 않으면 사용 중인 데이터베이스를 기반으로 앞에 추가합니다. 예:postgres://mmuser:really_secure_password@localhost:5432/mattermost?sslmode=disable&connect_timeout=10&가 보이면&로 교체합니다. 예:mysql://mmuser:really_secure_password@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s
환경 파일 생성#
/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
로컬 모드 활성화#
config.json 을 편집하여 EnableLocalMode 를 true 로 설정하여 로컬 모드를 활성화합니다. 로컬 모드 활성화 및 사용에 대한 자세한 내용은 로컬 모드 문서를 참조하세요.
Mattermost 재시작#
다음 명령을 실행하여 Mattermost 서버를 재시작하고 구성 변경 사항을 적용합니다:
sudo systemctl restart mattermost
config.json 에서 구성 마이그레이션#
다음 명령을 실행하여 mmctl config migrate 명령으로 구성을 마이그레이션할 수 있습니다:
./bin/mmctl config migrate path/to/config.json "postgres://mmuser:mostest@localhost:5432/mattermost_test?sslmode=disable&connect_timeout=10" --local
- High Availability 클러스터 기반 배포를 사용 중인 경우 이 명령을 한 번만 실행하고 클러스터의 서버 하나에서 구성을 마이그레이션하면 됩니다.
- 구성을 마이그레이션할 때 Mattermost는 현재 셸에 설정된 기존
MM_*환경 변수의 구성을 통합합니다. 자세한 내용은 환경 변수 문서를 참조하세요. - 환경 파일과 마찬가지로 데이터베이스 연결 문자열에서 단일 따옴표를 이스케이프해야 합니다.
- 기존 SAML 인증서도 클러스터의 모든 서버에서 사용할 수 있도록 데이터베이스로 마이그레이션됩니다. 인증서가 만료되면 System Console 또는 mmctl을 사용하여 새 인증서를 업로드할 수 있으며, 이렇게 하면 데이터베이스 업데이트가 트리거됩니다. 인증서 파일을 수동으로 교체하려면 Mattermost 서버를 다시 로드하여 인증서를 다시 가져와야 합니다. 구성 파일은 데이터베이스의
configurationfiles테이블에 저장됩니다.
데이터베이스에서 구성이 활성화되면 구성 변경 사항이 Configurations 및 ConfigurationFiles 테이블에 기록됩니다. 또한 ClusterSettings.ReadOnlyConfig 가 무시되어 System Console을 완전히 사용할 수 있습니다.
서버별로 설정해야 하는 구성 설정이 있는 경우 mattermost.environment 파일에 환경 변수로 추가해야 합니다. 이러한 변수는 각자 한 줄에 있어야 하며 올바르게 이스케이프해야 합니다.
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
구성이 올바르게 마이그레이션되었는지 확인#
구성은 데이터베이스의 Configurations 테이블에 저장됩니다. 다음 쿼리를 실행하여 구성을 성공적으로 마이그레이션했는지 확인합니다:
SELECT * FROM Configurations WHERE Active=true;
정확히 한 줄이 반환되어야 하며 해당 줄의 Value 필드는 config.json 파일과 일치해야 합니다.
systemd 파일 다시 로드 및 Mattermost 재시작#
다음 명령을 실행하여 데몬을 다시 로드하고 새 MM_CONFIG 환경 변수를 사용하여 Mattermost를 재시작합니다.
sudo systemctl daemon-reload
sudo systemctl restart mattermost
데이터베이스에서 구성을 사용하기 시작하면 활성 구성 행을 수동으로 편집해서는 안 됩니다. 다음 방법 중 하나로 구성을 편집하거나 업데이트해야 합니다:
* System Console을 사용하여 구성을 변경합니다.
* mmctl 을 사용하여 구성을 변경합니다.
Mattermost 서버는 활성 구성을 메모리에 유지하고 변경이 있을 때만 데이터베이스에 새 구성을 씁니다. 이렇게 하면 구성 변경 사항을 처리하기 위해 데이터베이스를 폴링하지 않아도 됩니다. 클러스터에 변경 사항을 게시하는 것은 애플리케이션 자체에서 처리됩니다.
롤백#
데이터베이스의 구성에 문제가 발생하면 /opt/mattermost/config/mattermost.environment 의 MM_CONFIG 줄을 주석 처리하고 systemctl restart mattermost 로 Mattermost를 재시작하여 config.json 파일로 롤백할 수 있습니다.
문제 해결#
서버 시작 실패#
파일을 실제로 가리키지 않으면서 --disableconfigwatch 플래그를 제공하면 적절한 오류 메시지와 함께 서버 시작에 실패합니다.
