265 lines
9.6 KiB
Markdown
265 lines
9.6 KiB
Markdown
|
# Snikket
|
|||
|
|
|||
|
Si tratta di un progetto che, tramite l'utilizzo di container Docker, permette di installare un servizio su un server fisico o virtuale per configurarlo in modo da riuscire a gestire autonomamente la messaggistica tramite il protocollo XMPP.
|
|||
|
|
|||
|
## DNS
|
|||
|
|
|||
|
```bash
|
|||
|
# 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.
|
|||
|
```
|
|||
|
|
|||
|
## Docker
|
|||
|
|
|||
|
```bash
|
|||
|
apt update && apt upgrade
|
|||
|
```
|
|||
|
Per Debian, seguire le istruzioni alla pagina [ufficiale](https://docs.docker.com/install/linux/docker-ce/debian/). In particolare:
|
|||
|
|
|||
|
|
|||
|
```bash
|
|||
|
# Add Docker's official GPG key:
|
|||
|
sudo apt-get update
|
|||
|
sudo apt-get install ca-certificates curl gnupg
|
|||
|
sudo install -m 0755 -d /etc/apt/keyrings
|
|||
|
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
|||
|
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
|||
|
|
|||
|
# Add the repository to Apt sources:
|
|||
|
echo \
|
|||
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
|
|||
|
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
|||
|
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|||
|
|
|||
|
sudo apt-get update
|
|||
|
|
|||
|
# To install the latest version, run:
|
|||
|
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|||
|
|
|||
|
# Verify that the installation is successful by running the hello-world image:
|
|||
|
sudo docker run hello-world
|
|||
|
```
|
|||
|
|
|||
|
## Installazione di Snikket
|
|||
|
|
|||
|
```bash
|
|||
|
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:
|
|||
|
|
|||
|
```bash
|
|||
|
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
|
|||
|
|
|||
|
```bash
|
|||
|
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:
|
|||
|
|
|||
|
```bash
|
|||
|
> 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
|
|||
|
[12] 1222/tcp (v6) ALLOW IN Anywhere (v6)
|
|||
|
[13] 80/tcp (v6) ALLOW IN Anywhere (v6)
|
|||
|
[14] 443/tcp (v6) ALLOW IN Anywhere (v6)
|
|||
|
[15] 5222/tcp (v6) ALLOW IN Anywhere (v6)
|
|||
|
[16] 5269/tcp (v6) ALLOW IN Anywhere (v6)
|
|||
|
[17] 5000/tcp (v6) ALLOW IN Anywhere (v6)
|
|||
|
[18] 3478 (v6) ALLOW IN Anywhere (v6)
|
|||
|
[19] 3479 (v6) ALLOW IN Anywhere (v6)
|
|||
|
[20] 5349 (v6) ALLOW IN Anywhere (v6)
|
|||
|
[21] 5350 (v6) ALLOW IN Anywhere (v6)
|
|||
|
[22] 49152:65535/udp (v6) ALLOW IN Anywhere (v6)
|
|||
|
```
|
|||
|
|
|||
|
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:
|
|||
|
|
|||
|
```bash
|
|||
|
docker compose up -d
|
|||
|
```
|
|||
|
|
|||
|
### Creazione utente admin
|
|||
|
|
|||
|
```bash
|
|||
|
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
|
|||
|
|
|||
|
[https://snikket.org/service/help/setup/troubleshooting/](https://snikket.org/service/help/setup/troubleshooting/)
|
|||
|
|
|||
|
```bash
|
|||
|
# 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
|
|||
|
|
|||
|
```bash
|
|||
|
> cat /etc/snikket/docker-compose.yml
|
|||
|
|
|||
|
version: "3.3"
|
|||
|
|
|||
|
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:
|
|||
|
```
|
|||
|
|
|||
|
### cli dei volumi
|
|||
|
|
|||
|
```bash
|
|||
|
> docker volume help
|
|||
|
|
|||
|
Usage: docker volume COMMAND
|
|||
|
|
|||
|
Manage volumes
|
|||
|
|
|||
|
Commands:
|
|||
|
create Create a volume
|
|||
|
inspect Display detailed information on one or more volumes
|
|||
|
ls List volumes
|
|||
|
prune Remove all unused local volumes
|
|||
|
rm Remove one or more volumes
|
|||
|
```
|
|||
|
|
|||
|
## Comandi docker compose (in riferimento ai volumi)
|
|||
|
|
|||
|
Docker Compose fornisce diversi comandi che aiutano a gestire in modo efficace l’applicazione e le sue risorse. Nel dettaglio questi comandi e il loro rapporto con i volumi:
|
|||
|
|
|||
|
- `docker compose up`: crea e avvia l’applicazione, compresi i servizi, le reti e i volumi. Se si definisce un volume denominato nel file docker-compose.yml prima che esista, questo comando lo creerà automaticamente.
|
|||
|
- `docker compose down`: arresta e rimuove i servizi e le reti dell’applicazione. Per impostazione predefinita, non rimuove i volumi denominati. Per rimuovere i volumi denominati, usare il flag `--volumes` o `-v`.
|
|||
|
- `docker compose ps`: elenca i container e il loro stato attuale, comprese le informazioni relative ai volumi.
|
|||
|
- `docker compose config`: convalida e visualizza la configurazione effettiva generata dal file docker-compose.yml, comprese le definizioni dei volumi.
|
|||
|
|
|||
|
## Update Snikket
|
|||
|
|
|||
|
```bash
|
|||
|
cd /etc/snikket
|
|||
|
docker compose down
|
|||
|
docker compose pull
|
|||
|
docker compose up -d
|
|||
|
```
|
|||
|
|
|||
|
Per maggiori dettagli: [https://snikket.org/service/help/setup/upgrading/](https://snikket.org/service/help/setup/upgrading/)
|
|||
|
|
|||
|
## Collegamenti
|
|||
|
|
|||
|
- [https://clarintuxmail.eu.org/articles/server3.html](https://clarintuxmail.eu.org/articles/server3.html)
|
|||
|
- [https://snikket.org/service/quickstart/](https://snikket.org/service/quickstart/)
|
|||
|
- [https://docs.lugbz.org/install-snikket.html](https://docs.lugbz.org/install-snikket.html)
|
|||
|
- [https://wiki.xmpp-it.net/index.php/Installazione_di_un_server_Snikket](https://wiki.xmpp-it.net/index.php/Installazione_di_un_server_Snikket)
|
|||
|
- [https://snikket.org/service/help/advanced/firewall/](https://snikket.org/service/help/advanced/firewall/)
|
|||
|
- [https://snikket.org/](https://snikket.org/)
|