====== Installazione Server Ejabberd ======
**//ATTENZIONE! Questa guida è la traduzione dell'[[
https://comfy.guide/server/ejabberd/|originale]] di [[https://denshi.org|Denshi]]
e non è stata testata dai traduttori.//**
**[[https://ejabberd.im|Ejabberd]]** è un server per il protocollo XMPP scritto in Erlang. È più scalabile e più facile da impostare di [[https://comfy.guide/server/prosody/|Prosody]] per il fatto che la maggior parte dei suoi moduli sono integrati e preconfigurati in automatico.
===== Prerequisiti =====
Porte richieste: 5000, 5222, 5269, 5280, 5281
===== Sottodomini =====
Ejabberd presuppone che tu abbia già creato tutti i **sottodomini richiesti e opzionali** per il suo uso prima di eseguirlo.
A seconda dell'utilizzo, potresti aver bisogno di alcuni o tutti i seguenti domini per le funzionalità di XMPP:
* **esempio.org** - Il tuo hostname XMPP
* **conference.esempio.org** - Per ''mod_muc'', Multi User Chats (MUC)
* **upload.esempio.org** - Per ''mod_http_upload'', il supporto ai file
* **proxy.esempio.org** - Per ''mod_proxy65'', il supporto al proxy SOCKS5
* **pubsub.esempio.org** - Per ''mod_pubsub'', il supporto a pubblica-sottoscrivi (Un RSS più sofisticato)
Il solo dominio **esempio.org** è richiesto per l'uso di base, di chat privata. Se **non** desideri usare un certo dominio, disabilita semplicemente il modulo associato e ejabberd non avrà problemi quando non riuscirà a trovare il suo certificato associato. Per esempio, se non vuoi il supporto [[https://xmpp.org/extensions/xep-0060.html|Publish-Subscribe]], semplicemente commenta la configurazione ''mod_pubsub'' in ''/opt/ejabberd/ejabberd.yml'':
## mod_pubsub:
## access_createnode: pubsub_createnode
## plugins:
## - flat
## - pep
## force_node_config:
## ## Avoid buggy clients to make their bookmarks public
## storage:bookmarks:
## access_model: whitelist
Questa guida presuppone che **tutti questi sottodomini** siano stati creati.
===== Sottodomini Personalizzati =====
Se vuoi personalizzare qualcuno di questi domini, modifica ''/opt/ejabberd/conf/ejabberd.yml'' e sotto ogni apposito modulo che necessita un sottodominio aggiungi la seguente impostazione:
mod_muc:
host: muc.esempio.org
===== Installazione =====
Per ottenere l'ultima versione di ejabberd, devi prima aggiungere i repository di ejabberd:
curl -o /etc/apt/sources.list.d/ejabberd.list https://repo.process-one.net/ejabberd.list
curl -o /etc/apt/trusted.gpg.d/ejabberd.gpg https://repo.process-one.net/ejabberd.gpg
Quindi aggiorna i repo e installa il pacchetto ''ejabberd'':
apt update
apt install ejabberd
===== Configurazione =====
Il server ejabberd è configurato in ''/opt/ejabberd/conf/ejabberd/ejabberd.yml''. Le modifiche vengono applicate solo riavviando il demone ejabberd in systemd:
systemctl restart ejabberd
===== Hostname =====
L' **hostname XMPP** è specificato nella sezione ''hosts'' di ''ejabberd.yml'':
hosts:
- esempio.org
===== Certificati =====
A differenza di [[https://prosody.im|Prosody]], ejabberd non è equipaggiato di uno script che può automaticamente copiare i relativi certificati in una cartella dove l'utente ejabberd possa leggerli.
Un modo di organizzare i certificati per ejabberd è di averli conservati in ''/opt/ejabberd/certs'', una cartella separata per ogni dominio con sia la chiave privata sia la fullchain.
Prima di continuare, crea la relativa cartella:
mkdir -p /opt/ejabberd/certs
Usando certbot, questo processo può essere facilmente automatizzato con questi comandi:
DOMAIN=esempio.org
# Imposta qui i nomi dominio che vuoi
declare -a subdomains=("" "conference." "proxy." "pubsub." "upload.")
for i in "${subdomains[@]}"; do
certbot --nginx -d $i$DOMAIN certonly
mkdir -p /opt/ejabberd/certs/$i$DOMAIN
cp /etc/letsencrypt/live/$i$DOMAIN/fullchain.pem /opt/ejabberd/certs/$i$DOMAIN/
cp /etc/letsencrypt/live/$i$DOMAIN/privkey.pem /opt/ejabberd/certs/$i$DOMAIN/
done
//Nota: proprio come con Prosody, si può scrivere questo script in un file e impostare un **server/cron|cronjob** per lanciarlo periodicamente. Questo dovrebbe aiutare a prevenire che i certificati scadano.//
Assicurati che tutti i certificati siano leggibili dall'utente ''ejabberd'' :
chown -R ejabberd:ejabberd /opt/ejabberd/certs
Per abilitare l'uso di tutti questi certificati in ejabberd, è necessaria la seguente configurazione :
certfiles:
- "/opt/ejabberd/certs/*/*.pem";
===== Amministratore =====
L' **utente amministratore** può essere specificato in ''ejabberd.yml'' sotto la sezione ''acl'':
acl:
admin:
user: admin
Questo dovrebbe rendere ''**admin@esempio.org**'' l'utente con privilegi di amministratore.
===== Caricare i File =====
Per assicurare la completa conformità agli standard XMPP, aggiungi la seguente configurazione a ''mod_http_upload'':
mod_http_upload:
put_url: https://@HOST@:5443/upload
docroot: /var/www/upload
custom_headers:
"Access-Control-Allow-Origin": "https://@HOST@"
"Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
"Access-Control-Allow-Headers": "Content-Type"
Assicurati di creare e di render proprietario l'utente ''ejabberd'' di ''/var/www/upload'' o di ogni altra cartella che intendi usare per caricare i file:
chown -R ejabberd:ejabberd /var/www/upload
===== Archivio Messaggi =====
Il server ejabberd supporta l'archiviazione dei messaggi attraverso il suo modulo ''mod_mam''. Questo può essere abilitato decommentando le seguenti linee:
mod_mam:
assume_mam_usage: true
default: always
===== Database ======
==== Perché usare un database? ====
Possiamo trovare il seguente commento nella sezione '''mod_mam'' di ''ejabberd.yml'':
mod_mam:
## Mnesia is limited to 2GB, better to use an SQL backend
## For small servers SQLite is a good fit and is very easy
## to configure. Uncomment this when you have SQL configured:
## db_type: sql
Come questi commenti suggeriscono, un **[[https://comfy.guide/server/sql/|SQL backend]]** è fortemente raccomandato se vuoi usare il tuo server ejabberd per qualunque cosa più che un semplice test. Ejabberd supporta **MySQL, SQLite** e **PostgreSQL.** Ai fini dell' efficienza, questa guida utilizzerà **PostgresSQL** perché altri server come ad esempio [[https://comfy.guide/server/matrix/|Matrix]] e [[https://comfy.guide/server/peertube/|PeerTube]] lo supportano.
===== Installare PostgreSQL =====
PostgreSQL è reperibile nei repository Debian:
apt install postgresql
In aggiunta, dovrai installare i **relativi driver per Erlang,** (//headers// nell'originale, N.d.T.) il linguaggio in cui ejabberd è scritto, così puoi effettivamente interagire col server PostgreSQL:
apt install erlang-p1-pgsql
Lancia il demone PostgreSQL per cominciare ad usarlo:
systemctl start postgresql
===== Creare il Database =====
Per creare il database, prima crea un utente PostgreSQL per ejabberd:
su -c "createuser --pwprompt ejabberd" postgres
Quindi, crea il database e rendi ''ejabberd'' il suo proprietario:
su -c "psql -c 'CREATE DATABASE ejabberd OWNER ejabberd;'" postgres
===== Importare lo Schema del Database =====
Ejabberd **non** crea lo schema del database in automatico; Deve essere importato nel database prima di usarlo.
su -c "curl -s https://raw.githubusercontent.com/processone/ejabberd/master/sql/pg.sql | psql ejabberd" postgres
===== Configurare ejabberd per usare PostgreSQL =====
Infine, aggiungi la seguente configurazione a ''ejabberd.yml'':
sql_type: pgsql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd"
sql_password: "psql_password"
default_db: sql
Quella linea alla fine imposta automaticamente che **ogni database del modulo** sia gestito da ''sql'' . Questo include il modulo ''mod_mam'' , quindi tutti i nostri dati saranno salvati con PostgreSQL.
===== Chiamate Voce e Video =====
Ejabberd supporta i protocolli **TURN** e **STUN** per permettere agli utenti internet dietro NAT di eseguire chiamate voce e video con altri utenti XMPP. **Questo è abilitato in automatico con l'uso di [[https://docs.ejabberd.im/admin/configuration/listen#ejabberd-stun-1|ejabberd_stun]].**
**Ad ogni modo,** se hai intenzione di usare ejabberd a fianco di **altre applicazioni** che richiedono TURN e STUN, come ad esempio Matrix, dovrai configurare il tuo server TURN esterno usando Coturn.
====== Configurazione con Coturn e `mod_stun_disco` ======
Innanzitutto, configura un server TURN e STUN con [[https://comfy.guide/coturn/|Coturn]] usando un **segreto per l'identificazione.**
Quindi, modifica ''mod_stun_disco'' in modo che contenga l'informazione apposita per il tuo server TURN:
mod_stun_disco:
secret: "your_auth_secret"
services:
-
host: turn.esempio.org
type: stun
-
host: turn.esempio.org
type: turn
===== Usare ejabberd =====
==== Registrare l'Utente Amministratore ====
Per cominciare ad usare ejabberd, prima di tutto lancia il demone ejabberd:
systemctl restart ejabberd
Quindi, usando ''ejabberdctl'' come utente ejabberd, registra l'utente amministratore impostato in ''ejabberd.yml'':
su -c "ejabberdctl register admin esempio.org password" ejabberd
Questo andrà a creare l'utente **admin@esempio.org**.
==== Usare l'Interfaccia Web ====
Di base, ejabberd ha un'interfaccia web accessibile da **http://esempio.org:5280/admin**. Quando accedi a questa interfaccia, ti vengono chieste le credenziali di amministratore.
Dopo aver eseguito l'accesso con le credenziali di amministratore, sarai in grado di gestire il tuo server ejabberd da questa interfaccia.
==== Configurazioni Ulteriori ====
Per uno sguardo più approfondito a tutti i moduli e opzioni, da' un occhio alla seguente documentazione ejabberd:
* Ejabberd [[https://docs.ejabberd.im/admin/configuration/listen/|Listen Modules]] e [[https://docs.ejabberd.im/admin/configuration/listen-options/|Listen Options]]
* Ejabberd [[https://docs.ejabberd.im/admin/configuration/toplevel/|Top-Level Options]]
* Ejabberd [[https://docs.ejabberd.im/admin/configuration/modules/|Modules’ Options]]
//E con questo, hai configurato con successo il tuo server XMPP ejabberd!//