안녕하세요. 지난 7월, Chatwoot은 Cloud 환경의 API 및 webhook 접근에 대해 유료 플랜($19/agent/month부터)을 도입했습니다. 위젯은 계속 잘 작동했지만, 저희의 API 통합 기능이 403 에러를 반환하기 시작했습니다. 자체 호스팅(self-hosted) 버전은 이 기능을 모두 유지하고 있어, 제가 직접 이전해보고 겪었던 문제점들을 정리해 보았습니다. 단계별 가이드라기보다는 '몰랐던 것들'에 대한 내용입니다.
공식 compose 파일은 chatwoot/chatwoot:latest를 사용하는데, 이 이미지는 엔터프라이즈(enterprise)/ 폴더를 별도의 비-MIT 라이선스로 포함하고 있습니다. -ce 태그들은 MIT 전용입니다. API, webhook, 이메일 및 실시간 채팅 기능은 여전히 여기서 작동합니다.
Postgres는 pgvector가 필요합니다. 4.x 마이그레이션(migrations) 과정에서 벡터 확장(vector extension)을 생성하는데, 일반적인 postgres:16 이미지는 이를 포함하고 있지 않습니다. 대신 pgvector/pgvector:pg16을 사용해야 합니다.
프록시 뒤에 FORCE_SSL=true를 설정하면 헬스 체크(health check)가 HTTPS로 301 리다이렉트되면서 컨테이너가 정상 상태(healthy)가 되지 않습니다. 또한, FRONTEND_URL은 요청에서 읽어오지 않습니다. 이 설정을 변경하지 않으면 위젯이 이전 호스트에서 계속 로드됩니다.
대화 내보내기(conversation export) 기능은 Cloud에서도, 자체 호스팅 환경에서도 지원되지 않습니다. 이 기능에 대한 요청은 지난 11월 비활동으로 인해 마감되었습니다.
무료 플랜에서는 API가 403을 반환하는 동안 /api/v1/profile 경로는 여전히 200을 반환하여, 마치 토큰이 깨진 것처럼 보입니다. 저희는 대시보드의 자체 로그인 요청을 스크립팅하여 56개의 대화를 추출할 수 있었습니다.
자체 호스팅 환경으로 이전하면 pg_dump가 내보내기 기능이 되므로, 이것이 자체 호스팅을 할 가장 좋은 이유 중 하나일 것입니다. 유휴 상태(idle)에서 약 810 MB를 사용하며 (rails 373, sidekiq 381, postgres 44, redis 12), 따라서 최소 2 GB가 적절한 용량입니다.
이 글은 Chatwoot API 통합 기능이 무료 Cloud 플랜에서 작동을 멈춘 사용자나, 그 전에 Cloud를 떠나고 싶은 분들을 위한 것입니다. 여기에는 pgvector와 함께 테스트된 4.18.0-ce의 compose 파일, 순서대로 따라 할 설정 명령어들, Cloud 대 자체 호스팅 비용 비교표, 그리고 라이선스 분할에 대한 상세 내용이 포함되어 있습니다: https://hostim.dev/blog/self-host-chatwoot/
면책 조항: 이 글은 제 회사 블로그에 올라온 것입니다. Docker를 사용하는 모든 환경에서 작동합니다. 감사합니다. /u/hostimdev가 제출했습니다.