====== ejabberd - service de messagerie Jabber XMPP ======

{{ informatique:applications:pasted:20211112-191953.png?175}}

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
  
{{informatique:applications:pasted:20211112-175520.png}}

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 [[https://www.process-one.net/en/ejabberd/downloads/|téléchargement ejabberd]]

Vérifier les modifications a effectuer sur la page de la [[https://docs.ejabberd.im/admin/upgrade/|procédure de mise à jour ejabberd]].

<code BASH>
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
</code>

<note important>Cette mise à jour à modifié les chemins de configuation dans ''/opt/ejabberd/conf'' et les logs dans ''/opt/ejabberd/logs''.</note>

===== Log =====

{{ informatique:applications:pasted:20211113-074341.png}}

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/''

<WRAP clear/>



===== 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 :

<code>
im                        IN A      45.54.65.42
*.im                      IN A      45.54.65.42
</code>

===== 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**.

<code BASH>
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"
</code>

 Par conséquence, il est facile d'indiquer à **ejabberd** le certificat à utiliser :

<code>
certfiles:
  - "opt/ejabberd/conf/server.pem"
</code>

===== Configurer le host =====

Il faut définir les hosts sur lesquels ejabberd écoute :
<code>
hosts:
  - "im.domain.tld"
  - "xmpp.domain2.tld"
</code>


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''

<code>
host_config:
  im.domain.tld:
    ...
  xmpp.domain2.tld:
    ...
</code>

===== 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/ //

<code>
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" 
</code>

===== Configurer les modules =====

<code>
## 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
</code>

===== Configurer les options =====

<code>
language: fr

</code>


 
 
 ===== Configurer le module audio/vidéo STUN/TURN =====
 
 Le module ''mod_stun_disco'' est disponible depuis la version 20.04.
 
 <code yamel 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
           
</code>