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