Esistono vari modi per rappresentare un impianto dati, anatomicamente parlando. Dal punto di vista testuale mi piace docker compose, una funzionalità di docker che permette di attaccare vari servizi assieme come i LEGO. Chiaramente non sempre conviene avere tutte le componenti dell’impianto dati aziendale tramite docker.
Vedrai l’esempio di n8n, una alternativa a Zapier, quindi non direttamente collegato alla statistica ma più alla informatica, perché permette ad esempio di far scambiare dati tra varie applicazioni. Questo semplice esempio contiene una base di dati, non strettamente necessaria, e l’applicazione n8n dove poter progettare ed eseguire le proprie automazioni, che ovviamente vengono memorizzate.
version: '3.8'
volumes:
db_storage:
n8n_storage:
services:
postgres:
image: postgres:16
restart: always
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
# impostazioni di sicurezza
volumes:
- db_storage:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
# altra impostazione di sicurezza
n8n:
image: docker.n8n.io/n8nio/n8n
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
# configurazione per accedere a postgresql
ports:
- 5678:5678
# come possiamo consumare il servizio internamente. Andrà collegato ad un dominio
# ad esempio da localhost:5678->n8n.aziendarossi.it
links:
- postgres
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
# sicurezza
Volumi significa magazzino o memoria, chiaramente la metafora della base di dati come magazzino per il servizio può generare confusione. Osservi che come base di dati abbiamo postgre, citato già in articolo e in altre occasioni.
Ti porto anche un esempio molto particolare di shiny che si collega ad una base di dati MySQL. Di solito lo si fa dal codice R che ha shiny anziché dal codice dell’impianto, ossia il docker-compose.yml
version: '3.8'
services:
shiny:
image: rocker/shiny
# servizio di cruscotto dati basato su R
ports:
- "3838:3838"
volumes:
- ./shiny_app:/srv/shiny-server
depends_on: #dipende da
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: shinydb
MYSQL_USER: user
MYSQL_PASSWORD: userpassword
# esiste un modo più furbo per conservare questi segreti
volumes:
- mysql_data:/var/lib/mysql
Ecco un esempio di CRM a codice sorgente aperto, Odoo. Capirai pià direttamente perché chiamo i CRM basi di dati particolari. In passato ho citato altri CRM aperti, come vTiger e Mautic.
version: '3.1'
services:
web:
image: odoo:17.0
depends_on:
- mydb
ports:
- "8069:8069"
environment:
- HOST=mydb
- USER=odoo
- PASSWORD=myodoo
mydb:
image: postgres:15
#ecco qua la nostra base di dati
environment:
- POSTGRES_DB=postgres
- POSTGRES_PASSWORD=myodoo
- POSTGRES_USER=odoo
L’occhio attento ha osservato che ogni immagine ha un nome e una versione. Che si fa per aggiornare l’impianto alle rispettive ultime versione delle componenti? Si installa un altro container (guarda primo articolo menzionato), di nome watchtower, che automatizza questa procedura piuttosto delicata.
Nella realtà, ovviamente, un impianto dati aziendale risulta molto più articolato dei file docker-compose.yaml che ti ho riportato. E non per tutte le componenti si trovano soluzioni aperte. Ad esempio delle aziende, per la visualizzazione dati, preferiscono Tableau o MicroStrategy, o qualcosa di gratuito ma non docker-izabile tipo Google Looker.
E la tua azienda quale impianto ha in piedi? Rivediamolo insieme in una prima chiamata gratuita. Magari alcune sue componenti potrebbero costare meno. O magari mancano dei componenti che aiutano il tuo fatturato.
