{"uuid":"262b51cb-f69d-45a4-ac92-4cd9b3bce78c","slug":"ejabberd-service-de-messagerie-jabber-xmpp","title":"ejabberd - service de messagerie Jabber XMPP","author":"cedric@abonnel.fr","published":true,"published_at":"2023-02-10 22:48:50","created_at":"2023-02-10 22:48:50","updated_at":"2023-02-10 22:48:50","revisions":[],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Informatique","content":"# ejabberd - service de messagerie Jabber XMPP\n\n![](20211112-191953.png)\n\nIl est nécessaire d'avoir (pré requis) pour ce tuto :\n- un service Apache - **httpd**\n- un service de base de données - **mariaDb**\n- un système d'exploitation **Linux Debian 10**\n\n## Installer\nPour installer **ejabberd** sous la distribution Linux **Debian**, il suffit de taper en ligne de commandes :\n\n sudo apt install ejabberd\n \n![](20211112-175520.png)\n\nUn 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.\n\n## Installer la base de données\n**ejabberd** est compatible avec plusieurs SGBD. J'aborde l'installation avec **MariaDB**.\n\nCrééer l'utilisateur **ejabberd** avec son mot de passe **password** (à modifier).\n\n echo \"GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'password';\" | mysql -h localhost -u root\n\nCréer la base de données associée à l'utilisateur **ejabberd**\n\n echo \"CREATE DATABASE ejabberd;\" | mysql -h localhost -u ejabberd -p\n\n## Mettre à jour\nVérifier la dernière version disponible à la page de [téléchargement ejabberd](https:*www.process-one.net/en/ejabberd/downloads/)\n\nVérifier les modifications a effectuer sur la page de la [procédure de mise à jour ejabberd](https:*docs.ejabberd.im/admin/upgrade/).\n\n```BASH\nsudo systemctl stop ejabberd\nwget https:*www.process-one.net/downloads/downloads-action.php?file=/21.07/ejabberd_21.07-0_amd64.deb -O ejabberd.deb\nsudo apt install ./ejabberd.deb\nsudo systemctl start ejabberd\n```\n\nCette mise à jour à modifié les chemins de configuation dans `/opt/ejabberd/conf` et les logs dans `/opt/ejabberd/logs`.\n\n## Log\n![](20211113-074341.png)\n\nLes fichiers logs sont présents dans le dossier `/var/log/ejabberd`.\n\nAprès la mise à jour en 21.07, ils se trouvent dans `/opt/ejabberd/logs/`\n\n## Configurer\nLe nom du serveur doit être déclaré dans les DNS et dans le fichiers `/etc/hosts`.\n\nLe fichier de configuration est au format YML. Il doit être déposé dans le chemin `/etc/ejabberd/ejabberd.yml`\nAprès la mise à jour en 21.07, le dossier de configuration s'est trouvé dans `/opt/ejabberd/conf`.\n\nDans l'exemple suivants prenoms les paramètres :\n- nom de serveur retenu pour le service : im.domain.tld, xmpp.domain2.tld\n- adresse ip : 45.54.65.42\n\n## Configurer les champs DNS\nDéclarer les champs DNS suivants :\n\n```\nim IN A 45.54.65.42\n*.im IN A 45.54.65.42\n```\n\n## Configurer le SSL\nJe 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**.\n\n```BASH\nsudo sh -c \"cat /etc/letsencrypt/live/im.domain.tld/privkey.pem /etc/letsencrypt/live/im.domain.tld/fullchain.pem > /opt/ejabberd/conf/server.pem\"\n```\n\n Par conséquence, il est facile d'indiquer à **ejabberd** le certificat à utiliser :\n\n```\ncertfiles:\n1. \"opt/ejabberd/conf/server.pem\"\n```\n\n## Configurer le host\nIl faut définir les hosts sur lesquels ejabberd écoute :\n```\nhosts:\n1. \"im.domain.tld\"\n1. \"xmpp.domain2.tld\"\n```\n\nLe 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`\n\n```\nhost_config:\n im.domain.tld:\n ...\n xmpp.domain2.tld:\n ...\n```\n\n## Configurer le type d'authentification\nOn peut se baser sur une authentification **anonymous**, **pam**, **jwt**, **sql**, **internal** et **ldap**.\n\n```\nhost_config:\n im.domain.tld:\n auth_method: internal\n xmpp.domain2.tld:\n auth_method: sql\n sql_type: odbc\n sql_server: \"DSN=ejabberd;UID=ejabberd;PWD=ejabberd\"\n```\n\n## Configurer les modules\n```\n## Configuration of modules that are common to all vhosts\nmodules:\n mod_roster: {}\n mod_configure: {}\n mod_disco: {}\n mod_private: {}\n mod_time: {}\n mod_last: {}\n mod_version: {}\n\nappend_host_config:\n ## Add some modules to vhost one:\n im.domain.tld:\n modules:\n mod_muc:\n host: conference.im.domain.tld\n mod_ping: {}\n ## Add a module just to vhost two:\n xmpp.domain2.tld:\n modules:\n mod_muc:\n host: conference.xmpp.domain2.tld\n```\n\n## Configurer les options\n```\nlanguage: fr\n```\n\n \n \n ===== Configurer le module audio/vidéo STUN/TURN =====\n \n Le module `mod_stun_disco` est disponible depuis la version 20.04.\n \n ```yamel\nmodules:\n ...\n mod_stun_disco:\n credentials_lifetime: 12h\n services:\n -\n host: 0.0.0.0\n port: 3478\n type: stun\n transport: udp\n restricted: false\n -\n host: 0.0.0.0\n port: 3478\n type: turn\n transport: udp\n restricted: true\n -\n host: im.domain.tdl\n port: 5349\n type: stuns\n transport: tcp\n restricted: false\n -\n host: im.domain.tdl\n port: 5349\n type: turns\n transport: tcp\n restricted: true\n```","featured":false,"tags":[]}