SlideShare a Scribd company logo
1 of 29
dallo sviluppo alla produzione
Livin' with Docker
abstract per DockerOps 2016[giacomo.spettoli, simone.deponti]@abstract.it /
Indice (Spoiler alert!)
● Introduzione del caso di studio
● Perchè proprio docker?
● Lo sviluppo
● CI / CB / CD
● Deploy
● Produzione
Obiettivi del progetto
● Migrazione portale del cliente verso una
soluzione basata sul cms Plone
● Fornire una soluzione gestionale su
misura con Odoo (aka OpenERP)
Pecularità
● vari strati software da configurare e far
interagire (nginx, elasticsearch,
postgres, haproxy.)
● gruppo di lavoro distribuito e variabile
per numero e componenti
Possibili soluzioni...
● configurazione a mano! (“I’m on a highway to
Hell ♫”)
● sistema di provisioning (chef, puppet, ansible,
#younameit)
● sistema di virtualizzazione (vagrant +
virtualbox, vmware, hyperv, ...)
...docker!
● più leggero e modulare di una VM
● più stabile e scalabile di un sistema di
provisioning
● essendo un cambio di paradigma
bisogna trovare il modo giusto di usarlo
(per il contesto specifico)
la fase di sviluppo
Makefile + Ansible per il bootstrap
(download pacchetti, bower & grunt)
Docker-compose per l’orchestration dei
containers
il testing e le build: Jenkins
1. scarica il codice
2. fa il build delle immagini
3. esegue i test
4. fa il push sul nostro registry
Bonus: Jenkins dentro ad un container
docker che si connette al docker padre
il testing e le build: Jenkins
1. scarica il codice
2. fa il build delle immagini
3. esegue i test
4. fa il push sul nostro registry
Bonus: Jenkins dentro ad un container
docker che si connette al docker padre
il testing e le build: Jenkins
1. scarica il codice
2. fa il build delle immagini
3. esegue i test
4. fa il push sul nostro registry
Bonus: Jenkins dentro ad un container
docker che si connette al docker padre
il testing e le build: Jenkins
1. scarica il codice
2. fa il build delle immagini
3. esegue i test
4. fa il push sul nostro registry
Bonus: Jenkins dentro ad un container
docker che si connette al docker padre
il testing e le build: Jenkins
1. scarica il codice
2. fa il build delle immagini
3. esegue i test
4. fa il push sul nostro registry
Bonus: Jenkins dentro ad un container
docker che si connette al docker padre
l’hosting: CoreOS
● droplet CoreOS su DO
● containers orchestrati con systemd
● config via cloudinit
il deploy: ansible e cloudinit
1. ansible fa il push della config cloudinit
2. viene eseguito il setup cloudinit
3. vengono riavviati i container
il deploy: ansible e cloudinit
name: copy cloud-init
copy:
src: "cloudinit/{{inventory_hostname}}.yml"
dest: /etc/custom-cloud-init
owner: root
sudo: yes
il deploy: ansible e cloudinit
1. ansible fa il push della config cloudinit
2. viene eseguito il setup cloudinit
3. vengono riavviati i container
il deploy: ansible e cloudinit
name: run cloudinit
shell: coreos-cloudinit -from-file=/etc/custom-cloud-init
sudo: yes
il deploy: ansible e cloudinit
#cloud-config
write_files:
- path: /home/core/.docker/config.json
owner: core:core
permissions: 0644
content: |
{
"auths": {
"https://registry.abstract.it": {
"auth": "bWFjaGlu… ",
"email": "xyz@abstract.it"
}
}
}
il deploy: ansible e cloudinit
coreos:
…
units:
- name: "pullimages.service"
content: |
[Unit]
Description=Pulls all required images
After=docker.service
Requires=docker.service
[Service]
User=core
Type=oneshot
ExecStart=/usr/bin/docker pull busybox:latest
ExecStart=/usr/bin/docker pull postgres:9.4
…
il deploy: ansible e cloudinit
- name: "ploneanon02.service"
command: "start"
content: |
[Unit]
Description=Plone (Anonymous)
After=blobdata.service mysql.service postgresplone.service …
Requires=blobdata.service pullimages.service
[Service]
User=core
TimeoutStartSec=0
Restart=on-failure
ExecStartPre=-/usr/bin/docker kill ploneanon02
ExecStartPre=-/usr/bin/docker rm -v ploneanon02
ExecStart=/usr/bin/docker run --name=ploneanon02 --volumes-from=blobdata
-e … registry.abstract.it/teatroit/plone:latest
ExecStop=/usr/bin/docker stop ploneanon02
il deploy: ansible e cloudinit
- name: "backup.service"
content: |
…
[Service]
Type=oneshot
ExecStart=/usr/bin/docker run --rm -v /tmp:/tmp -e ... --
entrypoint=/usr/bin/pg_dump postgres:9.4 -f /tmp/postgresqlusers.dump -F c
…
ExecStart=/usr/bin/curl -XPUT http://localhost:9200/_snapshot/total -d
'{"type":"fs","settings":{"compress":"true","location":"/srv/webapp/var/elastic/"}}'
ExecStart=/usr/bin/bash -c "/usr/bin/curl -XPUT
http://localhost:9200/_snapshot/total/$(date +%Y%m%d%H%M%S)?wait_for_completion=true"
ExecStart=/usr/bin/docker run --rm -v ... --volumes-from=... -e … jerob/docker-
duplicity:latest bash /duplicity
il deploy: ansible e cloudinit
1. ansible fa il push della config cloudinit
2. viene eseguito il setup cloudinit
3. vengono riavviati i container
il deploy: ansible e cloudinit
- name: stop services
service:
name: "{{item}}.service"
state: stopped
with_items:
- nginx
- varnish
…
sudo: yes
- name: start services
service:
name: "{{item}}.service"
state: started
with_items:
- pullimages
- postgresusers
…
Conclusioni
● siamo volutamente partiti “bassi” (niente scheduling)
● entrare mentalmente nel “concetto” di container (stateless)
● certe cose sono difficili da mettere in un container (RDBMS)
Questions?
Thanks!
Giacomo Spettoli
giacomo.spettoli@abstract.it
Simone Deponti
simone.deponti@abstract.it

More Related Content

What's hot

Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
MongoDB
 
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
firenze-gtug
 

What's hot (20)

Introduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.itIntroduzione a docker - DockerTutorial.it
Introduzione a docker - DockerTutorial.it
 
Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017Microservices webinar EMEA Aug. 2017
Microservices webinar EMEA Aug. 2017
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Docker
Docker Docker
Docker
 
Open Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studioOpen Source Day 2015 - DBaaS con Docker: un caso di studio
Open Source Day 2015 - DBaaS con Docker: un caso di studio
 
Docker & DevOps
Docker  & DevOpsDocker  & DevOps
Docker & DevOps
 
Introduzione a docker
Introduzione a dockerIntroduzione a docker
Introduzione a docker
 
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
Git/Continuous Integration/Docker: la terna dello sviluppo moderno.
 
La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioni
 
High specialized vm on open stack cloud
High specialized vm on open stack cloudHigh specialized vm on open stack cloud
High specialized vm on open stack cloud
 
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
Un'Infrastruttura di Sviluppo Web Enterprise Distribuita Basata su Modelli Pa...
 
Alfresco meetup Roma - docker
Alfresco meetup Roma - dockerAlfresco meetup Roma - docker
Alfresco meetup Roma - docker
 
Introduzione DevOps con Ansible
Introduzione DevOps con AnsibleIntroduzione DevOps con Ansible
Introduzione DevOps con Ansible
 
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e KubernetesWorkshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
Workshop ASP.NET Core e Angular in produzione con Docker e Kubernetes
 
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...Con Aruba, a lezione di cloud  #lezione 30 - parte 1: 'GitLab e Cloud Server ...
Con Aruba, a lezione di cloud #lezione 30 - parte 1: 'GitLab e Cloud Server ...
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...
Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...
Usare SQL Server for Linux e Docker per semplificare i processi di testing - ...
 
Maven from dummies
Maven from dummiesMaven from dummies
Maven from dummies
 
Apache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automationApache Maven - Gestione di progetti Java e build automation
Apache Maven - Gestione di progetti Java e build automation
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 

Viewers also liked

Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
Docker, Inc.
 
DockerCon EU 2015: Continuous Integration with Jenkins, Docker and Compose
DockerCon EU 2015: Continuous Integration with Jenkins, Docker and ComposeDockerCon EU 2015: Continuous Integration with Jenkins, Docker and Compose
DockerCon EU 2015: Continuous Integration with Jenkins, Docker and Compose
Docker, Inc.
 
Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad
Docker, Inc.
 

Viewers also liked (19)

Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 
containerd the universal container runtime
containerd the universal container runtimecontainerd the universal container runtime
containerd the universal container runtime
 
Ap Camp 2011
Ap Camp 2011Ap Camp 2011
Ap Camp 2011
 
PostgreSQL : Tuning
PostgreSQL : TuningPostgreSQL : Tuning
PostgreSQL : Tuning
 
Continuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and JenkinsContinuous Delivery Pipeline with Docker and Jenkins
Continuous Delivery Pipeline with Docker and Jenkins
 
Orchestration for the rest of us
Orchestration for the rest of usOrchestration for the rest of us
Orchestration for the rest of us
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Container Orchestration Wars (Micro Edition)
Container Orchestration Wars (Micro Edition)Container Orchestration Wars (Micro Edition)
Container Orchestration Wars (Micro Edition)
 
CI/CD with Docker, DC/OS, and Jenkins
CI/CD with Docker, DC/OS, and JenkinsCI/CD with Docker, DC/OS, and Jenkins
CI/CD with Docker, DC/OS, and Jenkins
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Jenkins Docker
Jenkins DockerJenkins Docker
Jenkins Docker
 
DockerCon EU 2015: Continuous Integration with Jenkins, Docker and Compose
DockerCon EU 2015: Continuous Integration with Jenkins, Docker and ComposeDockerCon EU 2015: Continuous Integration with Jenkins, Docker and Compose
DockerCon EU 2015: Continuous Integration with Jenkins, Docker and Compose
 
A Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things ContainersA Gentle Introduction To Docker And All Things Containers
A Gentle Introduction To Docker And All Things Containers
 
Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad Docker Compose by Aanand Prasad
Docker Compose by Aanand Prasad
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
containerd summit - Deep Dive into containerd
containerd summit - Deep Dive into containerdcontainerd summit - Deep Dive into containerd
containerd summit - Deep Dive into containerd
 
containerd and CRI
containerd and CRIcontainerd and CRI
containerd and CRI
 
Driving containerd operations with gRPC
Driving containerd operations with gRPCDriving containerd operations with gRPC
Driving containerd operations with gRPC
 

Similar to Livin' with Docker - dallo sviluppo alla produzione

Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
Giuliano Latini
 

Similar to Livin' with Docker - dallo sviluppo alla produzione (20)

Idp, passo dopo passo!
Idp, passo dopo passo!Idp, passo dopo passo!
Idp, passo dopo passo!
 
Azure cointainer instances e sql server
Azure cointainer instances e sql serverAzure cointainer instances e sql server
Azure cointainer instances e sql server
 
Distribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradleDistribuire una libreria Java per usarla come dipendenza gradle
Distribuire una libreria Java per usarla come dipendenza gradle
 
Personal Cloud
Personal CloudPersonal Cloud
Personal Cloud
 
Kubernetes e bello, sicuro è meglio!
Kubernetes e bello, sicuro è meglio!Kubernetes e bello, sicuro è meglio!
Kubernetes e bello, sicuro è meglio!
 
VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
Creazione componenti con Vue js
Creazione componenti con Vue jsCreazione componenti con Vue js
Creazione componenti con Vue js
 
Docker vs Virtualizzazioni
Docker vs VirtualizzazioniDocker vs Virtualizzazioni
Docker vs Virtualizzazioni
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
AWS CDK infrastructure is code
AWS CDK infrastructure is codeAWS CDK infrastructure is code
AWS CDK infrastructure is code
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOps
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8
 
Meetup Azure DevOps
Meetup Azure DevOpsMeetup Azure DevOps
Meetup Azure DevOps
 
Infrastructure as Data
Infrastructure as DataInfrastructure as Data
Infrastructure as Data
 
Infrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACSInfrastructure as code: Kubernetes on ACS
Infrastructure as code: Kubernetes on ACS
 
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
Drupal 8: dal download del Core alla pubblicazione in produzione. Cos'è cambi...
 

Livin' with Docker - dallo sviluppo alla produzione

  • 1. dallo sviluppo alla produzione Livin' with Docker abstract per DockerOps 2016[giacomo.spettoli, simone.deponti]@abstract.it /
  • 2. Indice (Spoiler alert!) ● Introduzione del caso di studio ● Perchè proprio docker? ● Lo sviluppo ● CI / CB / CD ● Deploy ● Produzione
  • 3. Obiettivi del progetto ● Migrazione portale del cliente verso una soluzione basata sul cms Plone ● Fornire una soluzione gestionale su misura con Odoo (aka OpenERP)
  • 4. Pecularità ● vari strati software da configurare e far interagire (nginx, elasticsearch, postgres, haproxy.) ● gruppo di lavoro distribuito e variabile per numero e componenti
  • 5. Possibili soluzioni... ● configurazione a mano! (“I’m on a highway to Hell ♫”) ● sistema di provisioning (chef, puppet, ansible, #younameit) ● sistema di virtualizzazione (vagrant + virtualbox, vmware, hyperv, ...)
  • 6. ...docker! ● più leggero e modulare di una VM ● più stabile e scalabile di un sistema di provisioning ● essendo un cambio di paradigma bisogna trovare il modo giusto di usarlo (per il contesto specifico)
  • 7. la fase di sviluppo Makefile + Ansible per il bootstrap (download pacchetti, bower & grunt) Docker-compose per l’orchestration dei containers
  • 8. il testing e le build: Jenkins 1. scarica il codice 2. fa il build delle immagini 3. esegue i test 4. fa il push sul nostro registry Bonus: Jenkins dentro ad un container docker che si connette al docker padre
  • 9.
  • 10. il testing e le build: Jenkins 1. scarica il codice 2. fa il build delle immagini 3. esegue i test 4. fa il push sul nostro registry Bonus: Jenkins dentro ad un container docker che si connette al docker padre
  • 11.
  • 12. il testing e le build: Jenkins 1. scarica il codice 2. fa il build delle immagini 3. esegue i test 4. fa il push sul nostro registry Bonus: Jenkins dentro ad un container docker che si connette al docker padre
  • 13. il testing e le build: Jenkins 1. scarica il codice 2. fa il build delle immagini 3. esegue i test 4. fa il push sul nostro registry Bonus: Jenkins dentro ad un container docker che si connette al docker padre
  • 14.
  • 15. il testing e le build: Jenkins 1. scarica il codice 2. fa il build delle immagini 3. esegue i test 4. fa il push sul nostro registry Bonus: Jenkins dentro ad un container docker che si connette al docker padre
  • 16. l’hosting: CoreOS ● droplet CoreOS su DO ● containers orchestrati con systemd ● config via cloudinit
  • 17. il deploy: ansible e cloudinit 1. ansible fa il push della config cloudinit 2. viene eseguito il setup cloudinit 3. vengono riavviati i container
  • 18. il deploy: ansible e cloudinit name: copy cloud-init copy: src: "cloudinit/{{inventory_hostname}}.yml" dest: /etc/custom-cloud-init owner: root sudo: yes
  • 19. il deploy: ansible e cloudinit 1. ansible fa il push della config cloudinit 2. viene eseguito il setup cloudinit 3. vengono riavviati i container
  • 20. il deploy: ansible e cloudinit name: run cloudinit shell: coreos-cloudinit -from-file=/etc/custom-cloud-init sudo: yes
  • 21. il deploy: ansible e cloudinit #cloud-config write_files: - path: /home/core/.docker/config.json owner: core:core permissions: 0644 content: | { "auths": { "https://registry.abstract.it": { "auth": "bWFjaGlu… ", "email": "xyz@abstract.it" } } }
  • 22. il deploy: ansible e cloudinit coreos: … units: - name: "pullimages.service" content: | [Unit] Description=Pulls all required images After=docker.service Requires=docker.service [Service] User=core Type=oneshot ExecStart=/usr/bin/docker pull busybox:latest ExecStart=/usr/bin/docker pull postgres:9.4 …
  • 23. il deploy: ansible e cloudinit - name: "ploneanon02.service" command: "start" content: | [Unit] Description=Plone (Anonymous) After=blobdata.service mysql.service postgresplone.service … Requires=blobdata.service pullimages.service [Service] User=core TimeoutStartSec=0 Restart=on-failure ExecStartPre=-/usr/bin/docker kill ploneanon02 ExecStartPre=-/usr/bin/docker rm -v ploneanon02 ExecStart=/usr/bin/docker run --name=ploneanon02 --volumes-from=blobdata -e … registry.abstract.it/teatroit/plone:latest ExecStop=/usr/bin/docker stop ploneanon02
  • 24. il deploy: ansible e cloudinit - name: "backup.service" content: | … [Service] Type=oneshot ExecStart=/usr/bin/docker run --rm -v /tmp:/tmp -e ... -- entrypoint=/usr/bin/pg_dump postgres:9.4 -f /tmp/postgresqlusers.dump -F c … ExecStart=/usr/bin/curl -XPUT http://localhost:9200/_snapshot/total -d '{"type":"fs","settings":{"compress":"true","location":"/srv/webapp/var/elastic/"}}' ExecStart=/usr/bin/bash -c "/usr/bin/curl -XPUT http://localhost:9200/_snapshot/total/$(date +%Y%m%d%H%M%S)?wait_for_completion=true" ExecStart=/usr/bin/docker run --rm -v ... --volumes-from=... -e … jerob/docker- duplicity:latest bash /duplicity
  • 25. il deploy: ansible e cloudinit 1. ansible fa il push della config cloudinit 2. viene eseguito il setup cloudinit 3. vengono riavviati i container
  • 26. il deploy: ansible e cloudinit - name: stop services service: name: "{{item}}.service" state: stopped with_items: - nginx - varnish … sudo: yes - name: start services service: name: "{{item}}.service" state: started with_items: - pullimages - postgresusers …
  • 27. Conclusioni ● siamo volutamente partiti “bassi” (niente scheduling) ● entrare mentalmente nel “concetto” di container (stateless) ● certe cose sono difficili da mettere in un container (RDBMS)

Editor's Notes

  1. presentazione speakers ringrazio organizzazione per eventi in zona FE presentazione azienda presentazione talk: no verità assolute o arcani segreti, solo la “my way” (cit. Frank Sinatra) docker come black box, no dettagli tecnici, ma il suo uso in real life
  2. Il caso di studio che vogliamo presentarvi si basa su un progetto sviluppato da Abstract per un sito di promozione culturale sulle opere teatrali. L’obiettivo del progetto era aggiornare il portale attuale del cliente ad una diversa tecnologia, nello specifico una migrazione verso il cms Plone. Si tratta, per chi non lo conoscesse, di un cms opensource, scritto principalmente in python e che ha ormai 14anni di onorato servizio. Come tutti i pezzi di software non banali che raggiungono un certo grado di anzianità, anche Plone ha le sue peculiarità e best practice per funzionare correttamente. A tal proposito vedremo in seguito cos’è il buildout, strumento simile ad Ant per java.
  3. Per un progetto articolato come quello in questione, il solo cms non era sufficiente, perchè serviva anche l’aiuto di elasticsearch per la ricerca geolocalizzata degli eventi teatrali. Servivano anche haproxy per il bilanciamento del cluster applicativo, ovviamente nginx per il reverse proxing. Successivamente, siccome l’appetito si sa vien mangiando, al progetto si è unito anche un gestionale, sviluppato con Odoo. Quindi alla lista dei componenti coinvolti si aggiungevano odoo e postgres per la base dati. A questo punto siamo arrivati a ben 6 diversi componenti software, ogniuno dei quali va installato e configurato correttamente per interagire fra di loro. Ora non saranno i numeri che si possono raggiungere con i microcomponenti, ma è comunque un bel numero da gestire. Fare presente che il gruppo di lavoro era disomogeneo per quanto riguarda il sistema di sviluppo: alcuni su Mac, altri su Ubuntu, uno su Fedora<
  4. perchè è più leggero e agile di vagrant, puoi infatti prendere dal registry parti di software già containerizzati e comporre così l’environment più “sicuro” di un sistema di provisioning, anche se alla fine un sistema di provisioning lo usiamo lo stesso