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


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. 암호화되서 저장된 결과 캡쳐



XMPP프로토콜의 ejabberd 채팅 서버 셋팅 2 - client 설치 후 실제 채팅 진행해보기


  1. windows 클라이언트 spark를 설치 후 채팅을 진행해봄
    1. ejabberd와 함께 많이 쓰는 java기반의 openfire의 client를 사용
    2. 설정 샘플(로컬 virtualbox에 ejabberd설치되어 있음)


    3. virtual box 포트 포워딩 후 PC 1대 노트북 1대로 채팅을 진행해봄


    4. 로컬 개발PC 윈도우의 방화벽 5222 포트를 허용해야 될 수 있음

  1. ejabberd 서버설치
RPM 패키지로 설치
참고: https://www.process-one.net/en/ejabberd/downloads/ 사이트에서 RPM 패키지 URL확인 가능

예)
wget 'https://www.process-one.net/downloads/downloads-action.php?file=/ejabberd/19.09.1/ejabberd-19.09.1-0.x86_64.rpm' -O ejabberd.rpm
rpm -ivh ejabberd.rpm


#서비스로 시작하기 위해서 복사
cp /opt/ejabberd-18.12.1/bin/ejabberd.service /etc/systemd/system/

#systemctl enable(서버 재 시작시 ejabberd도 시작됨)
systemctl enable ejabberd

#서비스 시작
systemctl start ejabberd

#확인
systemctl status ejabberd

  1. 설치된 서버 확인
    1. 리슨포트 확인
      1. netstat -anp | grep 'LISTEN' 명령어로 확인
        1. 5222포트는 메신저용, 5280은 admin web용


  2. 자주 쓰는 명령어
cd /opt/ejabberd-19.09.1/bin 후(설치한 버전에 따라서 다름)


-- 등록된 계정 리스트 조회
./ejabberdctl registered_users 호스트(ex. localhost)


-- 신규 계정 등록
./ejabberdctl register ID입력 서버 호스트(ex. localhost) 암호


-- 설정변경(ex. admin 계정)
vi /opt/ejabberd/conf/ejabberd.yml



+ Recent posts