Installare Docker e rilasciare la prima applicazione
Installare Docker e rilasciare la prima applicazione
Per installare Docker ho seguito questa guida (pagina archiviata).
Ci ha messo un po’ di tempo (5-10 minuti) a la CPU al massimo è andata al 50% (controllando netdata).
Quando l’installazione è finita ho creato l’utente non-root ma, al posto di fare come spiegato nell’articolo, ho lanciato dockerd-rootless-setuptool.sh install
come suggerito dall’output dell’installazione (la prima volta ha fallito ma ho semplicemente dovuto installare dei pacchetti mancanti). Poi ho semplicemente aggiunto export DOCKER_HOST=unix:///run/user/1000/docker.sock
al .bashrc
.
Per controllare che tutto funzionasse ho eseguito: docker info
e docker run hello-world
. Se esce questo dovrebbe funzionare:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
7050e35b49f5: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Ora voglio installare anche docker-compose
e ho lanciato questi comandi (presi da questo articolo):
sudo apt-get install libffi-dev libssl-dev
sudo apt install python3-dev
sudo apt-get install -y python3 python3-pip
sudo pip3 install docker-compose
E ora è davvero tutto pronto!
Però prima di installare qualche applicazione voglio attivare il monitoraggio di Docker
da parte di netdata
. Visto che netdata era in funzione già da prima dell’installazione di Docker
, ho dovuto far ripartire il servizio: sudo service netdata restart
.
Ora è davvero tutto pronto per installare il mio RSS reader, miniflux. È uno strumento fantastico che per il momento avevo su una droplet di DigitalOcean. Voglio fare un dump del DB e far partire questa nuova istanza con gli stessi contenuti.
Come prima cosa ho provato a fare il dump del DB usand uno strumento con interfaccia grafica perchè avevo dei problemi a fare SSH alla droplet. Ho provato pgadmin
e pgweb
ma falliti entrambi.
Alla fine son riuscito seguento questa strategia (usando il terminale nel browser che si apre dal pannello di DigitalOcean):
- far partire un terminale nel container di postgres:
docker exec -it DOCKER_ID bash
- lanciare il comando per fare il dump:
pg_dump -U miniflux -d miniflux --column-inserts > 2023-01-25.sql
- spostare il file nella cartella che è attaccata al volume Docker:
mv 2023-01-25.sql /var/lib/postgres/data
- tornare all’host (droplet) e entrare nella cartella dove Docker salva i volumi:
cd /var/lib/docker/volumes
ls
per vedere quali cartelle ci sono e capire qual è quella giusta. Farecd
in quella.- visto che non riuscivo a fare SSH nella droplet non potevo neanche salvare i file nel mio computer. Per farlo ho usato un servizio terzo:
curl -F [email protected] https://file.io
- nel passo precendente viene restituito un URL con la destinazione del file. Aprendo dal browser l’ho scaricato. Dopo lo scaricamento dovrebbe essere cancellato dai loro server (lo spero :)).
Ora ho un dump del DB nel mio computer, devo solamente caricarlo nel Raspberry e fare il ripristino:
- copiare il file nel Raspberry:
scp 2023-01-24.sql [email protected]:/home/alcaprar
- far partire un container docker con volume persistente (docker-compose.yml più avanti)
- spostare il file nella cartella usata per il volume
- iniziare un terminale nel container postgres
- creare un nuovo database:
psql -U postgres
. Thencreate database miniflux;
and exit\q
- ripristinare il DB
psql -U postgres -d miniflux < 2023-01-25.sql
A questo punto il DB dovrebbe essere ripristinato e dovrebbe essere sufficiente far partire anche miniflux. Questo è docker-compose
corrente:
version: '3.4'
services:
miniflux:
image: miniflux/miniflux:2.0.36
ports:
- "8080:8080"
depends_on:
- db
environment:
- DATABASE_URL=postgres://postgres:postgres@db/miniflux?sslmode=disable
db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=postgres
volumes:
- ./data/postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 10s
start_period: 30s
Dopo un docker-compose up -d
miniflux dovrebbe essere partire e si può accedere dalla porta 8080. Tutti i contenuti dovrebbero essere li.
A questo punto voglio poter accedere dall’esterno usando Cloudflare tunnels come ho fatto per netdata.
Per aggiungere un nuovo servizio a Cloudflare tunnels:
- spegnere il servizio cloudflared:
sudo service cloudflared stop
- disinstallare il servizio:
sudo cloudflared service uninstall
- rimuovere il file di configurazione da
/etc/cloudflared/config.yml
:sudo rm /etc/cloudflared/config.yml
- aggiungere il nuovo servizio a
.cloudflared/config.yml
- aggiungere la nuova regola al dns:
cloudflared tunnel route dns pi4 rss.caprar.xyz
- reinstallare il servizio:
sudo cloudflared --config ~/.cloudflared/config.yml service install