209 lines
5.8 KiB
Plaintext
209 lines
5.8 KiB
Plaintext
====== 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> |