데이터 및 데이터베이스 관리

이 문서에서는 WhatsApp Business API 클라이언트와 관련된 여러 다양한 유형의 데이터와 데이터베이스를 관리하는 방법을 설명합니다.

볼륨

볼륨은 Docker 컨테이너에서 생성 및 사용하는 데이터의 지속성을 위해 선호되는 메커니즘입니다. WhatsApp Business API 클라이언트는 미디어에 Docker 볼륨 하나가 필요합니다. 이 볼륨은 설치 중에 docker-compose 명령을 실행할 때 자동으로 생성됩니다.

Docker 볼륨은 원격 호스트 또는 클라우드 제공업체에 볼륨을 저장하도록 지원합니다. 기존 데이터 센터 파일 공유 솔루션에도 미디어 볼륨을 설정할 수 있습니다. 모든 Webapp과 Coreapp 컨테이너에 볼륨에 대한 읽기/쓰기 권한이 있는지 확인해야 합니다. 볼륨 경로를 보거나 편집하려면 docker-compose.yml 파일을 편집하세요.

이름설명

미디어 볼륨

  • 수신 및 발신 미디어 파일을 저장합니다.
  • 컨테이너 내 /usr/local/wamedia/에 기본값으로 마운트됩니다.

환경 변수

WhatsApp Business API 클라이언트는 MySQL 또는 PostgreSQL을 사용해 데이터를 저장할 수 있습니다.

WhatsApp Business API 클라이언트를 설치할 때 db.env 파일에서 다음의 환경 변수를 설정하여 데이터베이스 설정을 구성할 수 있습니다. 이러한 환경 변수는 Coreapp과 Webapp이 데이터베이스와 연결할 때 사용합니다.

데이터베이스 설정 환경 변수

database_engine

WA_DB_ENGINE

hostname

WA_DB_HOSTNAME

port

WA_DB_PORT

username

WA_DB_USERNAME

password

WA_DB_PASSWORD

database_name_prefix

WA_DB_NAME_PREFIX

connection_idle_timeout

WA_DB_CONNECTION_IDLE_TIMEOUT

  • WA_DB_NAME_PREFIX — WhatsApp Business API 클라이언트가 설치된 경우 생성된 모든 데이터베이스에 접두사를 지정할 때 사용할 수 있습니다. 동일한 데이터베이스 호스트의 여러 WhatsApp Business API 데이터베이스 집합을 실행하는 데 사용할 수도 있습니다.
  • WA_DB_CONNECTION_IDLE_TIMEOUT(MySQL에서만 지원) — Coreapp을 시작할 때 이 환경 변수(ms 기준)를 설정하면 MySQL 데이터베이스에 대한 유휴 시간 제한을 설정할 수 있습니다. 그러면 MySQL 서버가 설정된 시간에 유휴 상태인 데이터베이스 연결을 닫습니다.

데이터베이스 관리

WhatsApp Business API 클라이언트와 연결된 데이터베이스를 관리하기 위한 권장 사항입니다.

우려 사항권장 사항

대형 데이터베이스로 업그레이드

대형 데이터베이스는 messages 테이블에 행이 200만 개 이상인 데이터베이스를 의미합니다.
업그레이드를 진행하는 동안 데이터베이스 안정성을 유지할 수 있도록 /services/message/gc 엔드포인트를 사용할 때 아래의 권장 사항을 따르세요.

API 호출 기반 가비지 컬렉션

  • 데이터베이스 정리를 통합에 종속되게 만들며 대부분의 비즈니스에서는 사용하지 않는 것이 좋습니다.
  • WhatsApp Business API로 데이터베이스 가비지 컬렉션을 수행하는 비즈니스에 권장합니다.
    • 적극적인 정리를 활성화하기 위해 API 요청을 보내기 전에 수신 메시지를 읽음으로 표시합니다.
    • 가동 중지 시간(즉, 외부로 발송하는 메시지 볼륨이 낮을 때)에 24시간마다 한 번씩 /services/message/gc 엔드포인트를 사용하는 것이 좋습니다.
    • 행이 1,000만 개를 초과하는 messages 테이블의 경우 API 요청을 여러 번 실행하여 콜백 알림이 오류 없이 반환되도록 해야 할 수 있습니다.

자세한 내용은 서비스 문서를 참조하세요.

로그 로테이션

로그 로테이션 스크립트는 Coreapp과 Webapp 컨테이너에 패키징되어 있습니다.

Webapp

Webapp 컨테이너 내 로그 로테이션 스크립트:

  • logrotate 유틸리티를 사용합니다.
  • 웹, 액세스, 오류 로그의 마지막 30개 파일을 유지합니다.
  • 크기가 20MB보다 큰 경우에만 로테이션됩니다.
  • 로테이션된 로그 파일을 압축합니다.
  • 이전 로그 파일을 /var/log/whatsapp/archive에 아카이브합니다.

Coreapp

Coreapp 컨테이너 내 로그 로테이션 스크립트:

  • 내부 스크립트를 사용합니다.
  • 마지막 30개 파일을 유지합니다.
  • 크기가 15MB보다 크면 자동으로 로테이션합니다.
  • 로테이션된 로그 파일을 압축합니다.
  • 이전 로그 파일을 /var/log/whatsapp/archive에 아카이브합니다.

Coreapp에서 신규 로그 파일은 로그 파일당 크기가 15MB를 초과할 때만 생성됩니다. 이전 로그 파일은 자동으로 삭제되지 않습니다.

스크립트 정리 권장 사항

주기적(매일)으로 아래 스크립트 정리를 실행하여 전체 Webapp, Coreapp, 마스터(다중 연결 설정의 경우) 컨테이너에 로그 로테이션을 수행할 것을 권장합니다. 호스트에 크론잡을 구성하여 실행 중인 모든 WhatsApp Business API 컨테이너에 수행하고 한산한 시간에 실행되도록 하는 것이 가장 좋습니다. 정리 스크립트를 정기적으로 호출하면 로그 파일이 소비하는 디스크 공간을 관리할 수 있습니다.

docker exec your-container-name /opt/whatsapp/bin/cleanup.sh