Configurazione di un server XMPP
2024-05-04
Snikket
Si tratta di un progetto che, tramite l’utilizzo di container Docker, permette di installare un server XMPP per la messaggistica istantanea.
DNS
Aggiungere i seguenti record DNS:
# Domain TTL Class Type Target
chat.example.com. 300 IN A 203.0.113.123
groups.chat.example.com 300 IN CNAME chat.example.com.
share.chat.example.com 300 IN CNAME chat.example.com.
Installare docker
Per Debian, seguire le istruzioni alla pagina ufficiale.
Installazione di Snikket
mkdir /etc/snikket
cd /etc/snikket
# And then download our docker-compose.yml file:
curl -o docker-compose.yml https://snikket.org/service/resources/docker-compose
Quindi creare il file di configurazione di Snikket:
vim /etc/snikket
# The primary domain of your Snikket instance
SNIKKET_DOMAIN=chat.example.com
# An email address where the admin can be contacted
# (also used to register your Let's Encrypt account to obtain certificates)
SNIKKET_ADMIN_EMAIL=you@example.com
Firewall
ufw default allow outgoing && ufw default deny incoming
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 5222/tcp
ufw allow 5269/tcp
ufw allow 5000/tcp
ufw allow 3478
ufw allow 3479
ufw allow 5349
ufw allow 5350
ufw allow 49152:65535/udp
Questo il risultato:
> ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 5222/tcp ALLOW IN Anywhere
[ 5] 5269/tcp ALLOW IN Anywhere
[ 6] 5000/tcp ALLOW IN Anywhere
[ 7] 3478 ALLOW IN Anywhere
[ 8] 3479 ALLOW IN Anywhere
[ 9] 5349 ALLOW IN Anywhere
[10] 5350 ALLOW IN Anywhere
[11] 49152:65535/udp ALLOW IN Anywhere
In particolare:
TCP only
80/443 | Web Interface And Group File Sharing Service (HTTP(S)) |
5222 | Client App Connections (Client to Server) (XMPP-c2s) |
5269 | Federation With Other Snikket Servers (Server to Server) (XMPP-s2s) |
5000 | File Transfer Proxy (proxy65) |
TCP and UDP
3478/3479 | Audio/Video Data Proxy Negotiation and IP discovery (STUN/TURN) |
5349/5350 | Audio/Video Data Proxy Negotiations and IP Discovery over TLS (STUN/TURN over TLS) |
UDP only
49152-65535 | Audio/Video Data Proxy (Turn Data, see below) |
Avviare il servizio col comando:
docker compose up -d
Creazione utente admin
docker exec snikket create-invite --admin --group default
Viene generato un link utilizzabile una sola volta. Tutti gli altri utenti possono essere creati dal pannello di controllo una volta eseguito l’accesso.
Troubleshooting
# Checking for errors
cd /etc/snikket
docker-compose exec snikket_certs cat /var/log/letsencrypt/errors.log
# Force the renewal of certificates
cd /etc/snikket
docker-compose exec snikket_certs su letsencrypt -- -c "certbot renew --config-dir /snikket/letsencrypt --cert-path /etc/ssl/certbot --force-renew"
Analisi docker-compose.yml
> cat /etc/snikket/docker-compose.yml
services:
# nome del servizio
snikket_proxy:
container_name: snikket-proxy
image: snikket/snikket-web-proxy:beta
# file con le variabili
env_file: snikket.conf
# Se si usa la modalità di rete host per un container, lo stack di rete del container non è isolato dall'host e al container non viene assegnato un proprio indirizzo IP. Per esempio, se si esegue un container che si lega alla porta 80 e si usa la rete host, l'applicazione del container è disponibile sulla porta 80 dell'indirizzo IP dell'host.
network_mode: host
# I volumi memorizzano e gestiscono i dati persistenti generati dai container effimeri. Consentono la persistenza dei dati anche dopo la rimozione o l’aggiornamento di un container.
volumes:
# Il volume snikket_data viene montato nella directory /snikket del container snikket_proxy
- snikket_data:/snikket
- acme_challenges:/var/www/html/.well-known/acme-challenge
# La clausola restart: "unless-stopped" indica il comportamento di riavvio del servizio in caso di interruzione o arresto.
# Nel caso di restart: "unless-stopped", Docker riavvierà automaticamente il container a meno che non venga esplicitamente arrestato dall'utente. Questa opzione è utile per garantire che il servizio torni in esecuzione automaticamente dopo eventuali problemi o riavvii del sistema. Tuttavia, se l'utente decide di arrestare manualmente il container, questa istruzione impedisce il riavvio automatico.
restart: "unless-stopped"
snikket_certs:
container_name: snikket-certs
image: snikket/snikket-cert-manager:beta
env_file: snikket.conf
volumes:
- snikket_data:/snikket
- acme_challenges:/var/www/.well-known/acme-challenge
restart: "unless-stopped"
snikket_portal:
container_name: snikket-portal
image: snikket/snikket-web-portal:beta
network_mode: host
env_file: snikket.conf
restart: "unless-stopped"
snikket_server:
container_name: snikket
image: snikket/snikket-server:beta
network_mode: host
volumes:
- snikket_data:/snikket
env_file: snikket.conf
restart: "unless-stopped"
volumes:
acme_challenges:
snikket_data:
Update Snikket
cd /etc/snikket
docker compose down
docker compose pull
docker compose up -d
Per maggiori dettagli: upgrading
Applicazioni
Per Android, un’ottima applicazione é monocles chat. Per GNU/Linux invece consigliamo Dino