주의: 개인적인 메모 목적으로 정리한 글입니다.


ejabberd XMPP서버와 Mysql 조합

  1. 필요조건
    1. ejabberd는 FULLTEXT index를 InnoDB엔진과 함께 사용 -> Mysql 5.6 이상이 설치되어야 함
  2. Amazone AWS의 Mysql RDS 지원함


Mysql ejabberd 셋팅
  1. DB 접근 권한 추가
echo "GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'password';" | mysql -h localhost -u root -p

  1. . DB 생성
echo "CREATE DATABASE ejabberd;" | mysql -h localhost -u ejabberd -p

  1. DB 접속 확인
echo "CREATE DATABASE ejabberd;" | mysql -h localhost -u ejabberd -p

  1. Mysql 스키마 적용
cd /opt/ejabberd-19.09.1/lib/ejabberd-19.09.1/priv/sql (예. 설치된 디렉토리 하위의 sql 디렉토리에 스키마 sql들이 존재함)
mysql -h localhost -D ejabberd -u ejabberd -p < mysql.sql

참고: new sql 파일이 존재하는데 여러개의 XMPP도메인 사용할 때인 듯(참고 링크

[참고-생성 결과 테이블 캡쳐]


  1. ejabberd 설정 진행

참고: https://docs.ejabberd.im/admin/databases/mysql/

vi /opt/ejabberd/conf/ejabberd.yml 후 아래 내용 추가

## MySQL server:
##
sql_type: mysql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd"
sql_password: "암호입력"
##
## If you want to specify the port:
sql_port: 3306


#유저 암호를 기본설정인 internal에서 db를 사용한다는 설정 추가
auth_method: sql
auth_password_format: scram

# modules의 기본 저장을 DB로 변경(각 module별로 개별 설정도 가능)
default_db: sql

#유저 세션을 DB에 저장(redis 설정 후 sm_db_type: redis 로 설정하면 redis를 사용). 참고: https://docs.ejabberd.im/admin/configuration/#database-and-ldap-configuration
#Mysql의 경우 sm 테이블에 저장됨
sm_db_type: sql



  1. 참고: 추가 설정이 없으면 유저 암호가 plain text로 저장됨

    1. 아래 설정으로 변경해서 암호화해서 저장되도록 변경
vi /opt/ejabberd/conf/ejabberd.yml 후 아래 내용 추가

auth_password_format: scram

이후 계정 생성해보면 암호화되어서 저장됨
ex) ./ejabberdctl register "test-enc" "localhost" "test-enc" 로 계정 생성 후 DB 조회해봄
      1. 암호화되서 저장된 결과 캡쳐



+ Recent posts