데이터베이스에 구성 저장

Mattermost v11.11번역일: 2026-09-02원본 보기

자체 호스팅 Mattermost 배포를 운영한다면 데이터베이스를 Mattermost 설치본의 활성 구성에 대한 단일 진실 공급원으로 사용할 수 있습니다. 이렇게 하면 Mattermost 바이너리가 기본 config.json 파일을 읽는 대신 데이터베이스의 구성 테이블에 저장된 구성 설정을 읽습니다. Mattermost는 이 기능이 출시된 이후 커뮤니티 서버를 이 방식으로 운영해 왔으며, 고가용성 배포 환경에서는 이 방식을 권장합니다.

이 방식의 장점은 다음과 같습니다.

  • 고가용성 배포나 읽기 전용 컨테이너 환경에서도 시스템 콘솔에서 직접 구성 변경을 편리하게 관리할 수 있습니다.
  • 고가용성 배포의 모든 서버가 동일한 구성을 갖도록 보장하며, 클러스터에 새 서버가 추가될 때에도 마찬가지입니다.
  • SAML 인증서와 키를 클러스터의 모든 서버에 자동으로 배포합니다.
팁

Mattermost 구성 데이터베이스와 Mattermost 애플리케이션 데이터베이스는 서로 다른 대상입니다. Mattermost 구성을 한 데이터베이스에, Mattermost 데이터를 다른 데이터베이스에 저장할 수 있습니다.

그렇게 하려면 Datasource 구성 설정을 새 데이터 소스 이름으로 변경해야 하며, 이 작업은 애플리케이션이 실행 중일 때도 가능합니다. 구성이 데이터베이스에 있든 파일에 있든, MM_SQLSETTINGS_DATASOURCE 환경 변수를 명시적으로 설정해 구성에 정의된 값을 재정의하면 올바른 데이터 소스 이름이 Mattermost 애플리케이션에 전달됩니다.

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

다음 절차는 Mattermost 구성을 데이터베이스로 마이그레이션하고, 데이터베이스에서 구성을 읽도록 systemd 설정을 갱신하는 과정을 다룹니다.

중요
  • 이 절차는 Mattermost 서버가 /opt/mattermost에 설치되어 있다고 가정합니다. 다른 디렉터리에서 Mattermost를 실행 중이라면 환경에 맞게 경로를 수정해야 합니다.
  • 고가용성 클러스터 기반 배포에서 Mattermost를 실행 중이라면 아래 모든 단계를 클러스터의 각 서버에서 완료해야 합니다.

데이터베이스 연결 문자열 확인

첫 단계는 마스터 데이터베이스 연결 문자열을 확인하는 것입니다. config.json 파일에 접근해 SqlSettings.DataSource 값이나 그에 대응하는 환경 변수 MM_SQLSETTINGS_DATASOURCE의 값을 복사해 두는 것을 권장합니다.

중요
  • SqlSettings.DataSource는 반드시 postgres:// 또는 mysql://로 시작해야 합니다. 그렇지 않다면 사용 중인 데이터베이스에 맞춰 맨 앞에 추가하세요. 예: postgres://mmuser:really_secure_password@localhost:5432/mattermost?sslmode=disable&connect_timeout=10
  • \u0026가 보이면 &로 바꾸세요. 예: mysql://mmuser:really_secure_password@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s

환경 파일 생성

MM_CONFIG 환경 변수를 데이터베이스 연결 문자열로 설정하도록 /opt/mattermost/config/mattermost.environment 파일을 생성합니다. 예를 들면 다음과 같습니다.

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
중요
  • 고가용성 클러스터 기반 배포를 사용 중이라면 이 명령은 한 번만 실행하면 되며, 클러스터의 서버 한 대에서만 구성을 마이그레이션하면 됩니다.
  • 구성을 마이그레이션할 때 Mattermost는 현재 셸에 설정된 기존 MM_* 환경 변수의 구성도 반영합니다. 자세한 내용은 환경 변수 문서를 참고하세요.
  • 환경 파일과 마찬가지로, 데이터베이스 연결 문자열에 작은따옴표가 있다면 이스케이프해야 합니다.
  • 기존 SAML 인증서도 함께 데이터베이스로 마이그레이션되어 클러스터의 모든 서버에서 사용할 수 있게 됩니다. 인증서가 만료되면 시스템 콘솔이나 mmctl로 새 인증서를 업로드할 수 있으며, 이때 데이터베이스가 갱신됩니다. 인증서 파일을 수동으로 교체하는 경우에는 Mattermost 서버를 다시 로드해야 인증서를 다시 읽어 들입니다. 구성 파일은 데이터베이스의 configurationfiles 테이블에 저장됩니다.

데이터베이스 구성이 활성화되면 구성 변경 내역이 Configurations와 ConfigurationFiles 테이블에 기록됩니다. 또한 ClusterSettings.ReadOnlyConfig는 무시되어 시스템 콘솔을 온전히 사용할 수 있습니다.

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

Mattermost systemd 파일 수정

다음 명령으로 mattermost.service 파일을 찾습니다.

sudo systemctl status mattermost.service

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

   Loaded: loaded (/etc/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
중요

데이터베이스 구성을 사용하기 시작한 뒤에는 활성 구성 행을 직접 수정해서는 안 됩니다. 구성은 다음 방법 중 하나로 수정하거나 갱신해야 합니다.

  • 시스템 콘솔에서 구성을 변경합니다.
  • mmctl로 구성을 변경합니다.

Mattermost 서버는 활성 구성을 메모리에 유지하고 변경이 있을 때만 새 구성을 데이터베이스에 기록합니다. 이렇게 하면 구성 변경을 감지하기 위해 데이터베이스를 폴링할 필요가 없습니다. 변경 사항을 클러스터에 전파하는 일은 애플리케이션이 직접 처리합니다.

롤백

데이터베이스 구성에서 문제가 발생하면 /opt/mattermost/config/mattermost.environment의 MM_CONFIG 줄을 주석 처리하고 systemctl restart mattermost로 Mattermost를 재시작해 config.json 파일 방식으로 롤백할 수 있습니다.

문제 해결

서버가 시작되지 않음

실제 파일을 가리키지 않는 상태에서 --disableconfigwatch 플래그를 지정하면 서버가 시작되지 않으며 그에 해당하는 오류 메시지가 표시됩니다.