{"id":1977,"date":"2025-02-24T13:15:26","date_gmt":"2025-02-24T13:15:26","guid":{"rendered":"https:\/\/staticalmo.com\/?p=1977"},"modified":"2024-10-29T13:32:43","modified_gmt":"2024-10-29T13:32:43","slug":"anatomia-impianto-dati","status":"publish","type":"post","link":"https:\/\/staticalmo.com\/en\/anatomia-impianto-dati\/","title":{"rendered":"Anatomia impianto dati"},"content":{"rendered":"<p>Esistono vari modi per rappresentare un impianto dati, anatomicamente parlando. Dal punto di vista testuale mi piace docker compose, una funzionalit\u00e0 di <a href=\"https:\/\/staticalmo.com\/servizi-statistici-da-cucina-o-da-4-salti-in-padella\/\">docker <\/a>che permette di attaccare vari servizi assieme come i LEGO. Chiaramente non sempre conviene avere tutte le componenti dell\u2019impianto dati aziendale tramite docker.<\/p>\n<p>&nbsp;<\/p>\n<p>Vedrai l\u2019esempio di n8n, una alternativa a Zapier, quindi non direttamente collegato alla statistica ma pi\u00f9 alla informatica, perch\u00e9 permette ad esempio di far scambiare dati tra varie applicazioni. Questo semplice esempio contiene una base di dati, non strettamente necessaria, e l\u2019applicazione n8n dove poter progettare ed eseguire le proprie automazioni, che ovviamente vengono memorizzate.<\/p>\n<p>&nbsp;<\/p>\n<pre><code class=\"language-yaml\">version: &#039;3.8&#039;\n\nvolumes:\n  db_storage:\n  n8n_storage:\n\nservices:\n  postgres:\n    image: postgres:16\n    restart: always\n    environment:\n      - POSTGRES_USER\n      - POSTGRES_PASSWORD\n      - POSTGRES_DB\n      - POSTGRES_NON_ROOT_USER\n      - POSTGRES_NON_ROOT_PASSWORD\n      # impostazioni di sicurezza\n    volumes:\n      - db_storage:\/var\/lib\/postgresql\/data\n    healthcheck:\n      test: [&#039;CMD-SHELL&#039;, &#039;pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}&#039;]\n      interval: 5s\n      timeout: 5s\n      retries: 10\n      # altra impostazione di sicurezza\n\n  n8n:\n    image: docker.n8n.io\/n8nio\/n8n\n    restart: always\n    environment:\n      - DB_TYPE=postgresdb\n      - DB_POSTGRESDB_HOST=postgres\n      - DB_POSTGRESDB_PORT=5432\n      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}\n      - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}\n      - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}\n      # configurazione per accedere a postgresql\n    ports:\n      - 5678:5678\n      # come possiamo consumare il servizio internamente. Andr\u00e0 collegato ad un dominio\n      # ad esempio da localhost:5678-&gt;n8n.aziendarossi.it\n    links:\n      - postgres\n    volumes:\n      - n8n_storage:\/home\/node\/.n8n\n    depends_on:\n      postgres:\n        condition: service_healthy\n        # sicurezza\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.youtube.com\/@staticalmo\/search?query=volumes\">Volumi <\/a>significa magazzino o memoria, chiaramente la metafora della base di dati come magazzino per il servizio pu\u00f2 generare confusione. Osservi che come base di dati abbiamo postgre, citato gi\u00e0 in <a href=\"https:\/\/staticalmo.com\/come-creare-una-base-di-dati-se-hai-gia-un-sito-aziendale\/\">articolo <\/a>e in <a href=\"https:\/\/www.youtube.com\/@staticalmo\/search?query=sql\">altre occasioni<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>Ti porto anche un esempio <b>molto <\/b>particolare di <a href=\"https:\/\/www.youtube.com\/@staticalmo\/search?query=shiny\">shiny <\/a>che si collega ad una base di dati MySQL. Di solito lo si fa dal <a href=\"https:\/\/staticalmo.com\/r-potter-e-la-pietra-filosofale\/\">codice R<\/a> che ha shiny anzich\u00e9 dal <i>codice <\/i>dell\u2019impianto, ossia il docker-compose.<a href=\"https:\/\/www.youtube.com\/@staticalmo\/search?query=yaml\">yml<\/a><\/p>\n<p>&nbsp;<\/p>\n<pre><code class=\"language-yaml\">version: &#039;3.8&#039;\n\nservices:\n\u00a0\u00a0shiny:\n\u00a0\u00a0\u00a0\u00a0image: rocker\/shiny\n\u00a0\u00a0\u00a0\u00a0# servizio di cruscotto dati basato su R\n\u00a0\u00a0\u00a0\u00a0ports:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- &quot;3838:3838&quot;\n\u00a0\u00a0\u00a0\u00a0volumes:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- .\/shiny_app:\/srv\/shiny-server\n\u00a0\u00a0\u00a0\u00a0depends_on: #dipende da\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- db\n\n\u00a0\u00a0db:\n\u00a0\u00a0\u00a0\u00a0image: mysql:5.7\n\u00a0\u00a0\u00a0\u00a0environment:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_ROOT_PASSWORD: rootpassword\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_DATABASE: shinydb\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_USER: user\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MYSQL_PASSWORD: userpassword\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# esiste un modo pi\u00f9 furbo per conservare questi segreti\n\n\u00a0\u00a0\u00a0\u00a0volumes:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0- mysql_data:\/var\/lib\/mysql\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>Ecco un esempio di CRM a codice sorgente aperto, Odoo. Capirai pi\u00e0 direttamente perch\u00e9 chiamo i <a href=\"https:\/\/staticalmo.com\/significato-aziendale-del-crm-una-dorsale-dei-dati\/\">CRM basi di dati particolari<\/a>. In passato ho citato altri CRM aperti, come vTiger e Mautic.<\/p>\n<p>&nbsp;<\/p>\n<pre><code class=\"language-yaml\">version: &#039;3.1&#039;\nservices:\n  web:\n\timage: odoo:17.0\n\tdepends_on:\n  \t- mydb\n\tports:\n  \t- &quot;8069:8069&quot;\n\tenvironment:\n\t- HOST=mydb\n\t- USER=odoo\n\t- PASSWORD=myodoo\n  mydb:\n\timage: postgres:15 \n\t#ecco qua la nostra base di dati\n\tenvironment:\n  \t- POSTGRES_DB=postgres\n  \t- POSTGRES_PASSWORD=myodoo\n  \t- POSTGRES_USER=odoo\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>L\u2019occhio attento ha osservato che ogni immagine ha un nome e una versione. Che si fa per aggiornare l\u2019impianto alle rispettive ultime versione delle componenti? Si installa un altro container (guarda primo articolo menzionato), di nome watchtower, che automatizza questa procedura piuttosto delicata.<\/p>\n<p>&nbsp;<\/p>\n<p>Nella realt\u00e0, ovviamente, un impianto dati aziendale risulta molto pi\u00f9 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.<\/p>\n<p>&nbsp;<\/p>\n<p>E la tua azienda quale impianto ha in piedi? Rivediamolo insieme <a href=\"https:\/\/enterprisestatistics.com\/contact\/\">in una prima chiamata gratuita.<\/a> Magari alcune sue componenti potrebbero costare meno. O magari mancano dei componenti che aiutano il tuo fatturato.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Esistono vari modi per rappresentare un impianto dati, anatomicamente parlando. Dal punto di vista testuale mi piace docker compose, una funzionalit\u00e0 di docker che permette di attaccare vari servizi assieme come i LEGO. Chiaramente non sempre conviene avere tutte le componenti dell\u2019impianto dati aziendale tramite docker. &nbsp; Vedrai l\u2019esempio di n8n, una alternativa a Zapier, &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/staticalmo.com\/en\/anatomia-impianto-dati\/\"> <span class=\"screen-reader-text\">Anatomia impianto dati<\/span> Read More &raquo;<\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","_themeisle_gutenberg_block_has_review":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1977","post","type-post","status-publish","format-standard","hentry","category-senza-categoria"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts\/1977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/comments?post=1977"}],"version-history":[{"count":4,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts\/1977\/revisions"}],"predecessor-version":[{"id":1982,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/posts\/1977\/revisions\/1982"}],"wp:attachment":[{"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/media?parent=1977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/categories?post=1977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/staticalmo.com\/en\/wp-json\/wp\/v2\/tags?post=1977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}