Self-hosting con docker-compose

Allora, partiamo dalle basi: come c'è scritto direttamente nella testata del blog, io sono pigro. Ma non pigro poco, pigro tanto. Quindi tutto questo è la soluzione meno sbatta e più plug and play che sono riuscito a costruirmi per hostarmi roba generica. Se volete meno libertà di riconfigurazione o meno servizi c'è quasi certamente di meglio.

Requisiti

Vi serve un server su cui giri docker e che sia raggiungibile da dove volete raggiungerlo. Io uso quattro macchine:

I due server domestici si parlano via VPN per tenere dei backup incrociati della roba importante, ma alla fine della fiera si può arrangiarsi anche con meno (la cosa importante è che i servizi accessibili all'esterno stiano fuori dalla VPN).

Tutte le macchine montano Ubuntu Server LTS senza snapd, che ho rimosso a mano perché faceva casino sui dischi. Quindi docker e docker-compose vanno installati alla vecchia maniera.

Le immagini

Ho deciso di pescare tutto da linuxserver.io per quattro motivi:

  1. Tutte le immagini hanno una base comune, il che riduce occupazione e download;
  2. Tutte le immagini hanno gli stessi manutentori, con le stesse logiche di fix e rilascio;
  3. Molte delle configurazioni sono comuni o almeno simili, il che riduce di molto lo sbattimento;
  4. La loro raccolta è grossa e variegata, quindi difficilmente avrò bisogno di staccarmi da loro;

Si tratta, in un certo senso, di vendor lock in, ma, come dicevo sopra, il mio obiettivo è quello di avere un sistema “plug and play”, che mi permetta di aggiungere o togliere servizi con uno sbattimento minimale.

Configurazione

Come dicevo sopra, le immagini di linuxserver hanno diversi campi in comune nella configurazione, quindi possiamo usare le estensioni per semplificare il nostro file:

version: '3.7'

x-linuxserver-conf: &linuxserver-conf
  PUID: 1000
  GUID: 1000
  TZ: Europe/Rome

services:
        grocy:
                image: ghcr.io/linuxserver/grocy
                container_name: grocy
                restart: unless-stopped
                environment:
                      <<: *linuxserver-conf
                expose:
                        - 9283
                volumes:
                        - "/root/library/grocy:/config"
        booksonic:
                image: ghcr.io/linuxserver/booksonic
                container_name: booksonic
                restart: unless-stopped
                environment:
                        <<: *linuxserver-conf
                expose:
                        - 4040
                volumes:
                        - "/root/library/booksonic/config:/config"
                        - "/root/library/booksonic/audiobooks:/audiobooks"
                        - "/root/library/booksonic/podcasts:/podcasts"
                        - "/root/library/booksonic/othermedia:/othermedia"

SWAG

Se esponete più di un servizio per macchina e volete usare anche HTTPS, c'è un'utilissima immagine di linuxserver, swag, che fa da reverse proxy e aggiunge i certificati. Swag è già attrezzato con i default per tutti i servizi di linuxserver, basta abilitarli, più un'altra manciata:

(no, non vi metto i link servizio per servizio, l'ho detto all'inizio di essere pigro!)

A questo punto, una volta configurati i DNS (SWAG supporta anche quelli dinamici) dovreste essere a cavallo.

Backup

Al momento il solo backup configurato è per i file di nextcloud, con un rsync cronnato due volte alla settimana (una volta per macchina), ma sto studiando anche un modo per tenere una seconda copia su Tarsnap. Siccome sono pigro, non credo che passerò anche questo su docker compose, ma mi limiterò a mettere tutto su cron.