ejabberd - service de messagerie Jabber XMPP
Il est nécessaire d'avoir (pré requis) pour ce tuto :
- un service Apache - httpd
- un service de base de données - mariaDb
- un système d'exploitation Linux Debian 10
Installer
Pour installer ejabberd sous la distribution Linux Debian, il suffit de taper en ligne de commandes :
sudo apt install ejabberd
Un service /lib/systemd/system/epmd.service
est créé. Un service /lib/systemd/system/ejabberd.service
est créé et un fichier de configuration par défaut est déployé dans /etc/ejabberd/ejabberd.yml
. Ce dernier point est traité ci-dessous.
Installer la base de données
ejabberd est compatible avec plusieurs SGBD. J'aborde l'installation avec MariaDB.
— https://docs.ejabberd.im/tutorials/mysql/
Crééer l'utilisateur ejabberd avec son mot de passe password (à modifier).
echo "GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'password';" | mysql -h localhost -u root
Créer la base de données associée à l'utilisateur ejabberd
echo "CREATE DATABASE ejabberd;" | mysql -h localhost -u ejabberd -p
Mettre à jour
Vérifier la dernière version disponible à la page de téléchargement ejabberd
Vérifier les modifications a effectuer sur la page de la procédure de mise à jour ejabberd.
sudo systemctl stop ejabberd wget https://www.process-one.net/downloads/downloads-action.php?file=/21.07/ejabberd_21.07-0_amd64.deb -O ejabberd.deb sudo apt install ./ejabberd.deb sudo systemctl start ejabberd
/opt/ejabberd/conf
et les logs dans /opt/ejabberd/logs
.
Log
Les fichiers logs sont présents dans le dossier /var/log/ejabberd
.
Après la mise à jour en 21.07, ils se trouvent dans /opt/ejabberd/logs/
Configurer
Le nom du serveur doit être déclaré dans les DNS et dans le fichiers /etc/hosts
.
Le fichier de configuration est au format YML. Il doit être déposé dans le chemin /etc/ejabberd/ejabberd.yml
Après la mise à jour en 21.07, le dossier de configuration s'est trouvé dans /opt/ejabberd/conf
.
Dans l'exemple suivants prenoms les paramètres :
- nom de serveur retenu pour le service : im.domain.tld, xmpp.domain2.tld
- adresse ip : 45.54.65.42
Configurer les champs DNS
Déclarer les champs DNS suivants :
im IN A 45.54.65.42 *.im IN A 45.54.65.42
Configurer le SSL
Je vous conseille d'associer un serveur http au nom de domaine im.domain.tld de votre service. Cela permettra de faire une page d'accueil web avec des services associés. Par la même occasion, effectuer une demande SSL. Les certificats seront générés dans le dossier /etc/letsencrypt/live
. Il faudra copier la clé et le certificat dans le dossier de config de ejabberd.
sudo sh -c "cat /etc/letsencrypt/live/im.domain.tld/privkey.pem /etc/letsencrypt/live/im.domain.tld/fullchain.pem > /opt/ejabberd/conf/server.pem"
Par conséquence, il est facile d'indiquer à ejabberd le certificat à utiliser :
certfiles: - "opt/ejabberd/conf/server.pem"
Configurer le host
Il faut définir les hosts sur lesquels ejabberd écoute :
hosts: - "im.domain.tld" - "xmpp.domain2.tld"
Le fichier peut prendre en compte autant de domaine que l'on souhaite avec des cas de configuration distinct. C'est le principe du virtual hosting
host_config: im.domain.tld: ... xmpp.domain2.tld: ...
Configurer le type d'authentification
On peut se baser sur une authentification anonymous, pam, jwt, sql, internal et ldap.
— https://docs.ejabberd.im/admin/configuration/authentication/
host_config: im.domain.tld: auth_method: internal xmpp.domain2.tld: auth_method: sql sql_type: odbc sql_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
Configurer les modules
## Configuration of modules that are common to all vhosts modules: mod_roster: {} mod_configure: {} mod_disco: {} mod_private: {} mod_time: {} mod_last: {} mod_version: {} append_host_config: ## Add some modules to vhost one: im.domain.tld: modules: mod_muc: host: conference.im.domain.tld mod_ping: {} ## Add a module just to vhost two: xmpp.domain2.tld: modules: mod_muc: host: conference.xmpp.domain2.tld
Configurer les options
language: fr
Configurer le module audio/vidéo STUN/TURN
Le module mod_stun_disco
est disponible depuis la version 20.04.
- ejabberd.yml
modules: ... mod_stun_disco: credentials_lifetime: 12h services: - host: 0.0.0.0 port: 3478 type: stun transport: udp restricted: false - host: 0.0.0.0 port: 3478 type: turn transport: udp restricted: true - host: im.domain.tdl port: 5349 type: stuns transport: tcp restricted: false - host: im.domain.tdl port: 5349 type: turns transport: tcp restricted: true