SlideShare a Scribd company logo
LONG LIFE TO VAGRANT…
VAGRANT IS DEAD
federico.panini@fazland.com - CTO
Development boxes and modern software
lifecycle development techniques.
How our development
team grew up and how we evolved
our development stack.
federico.panini@fazland.com - CTO
Federico Panini
CTO @Fazland.com
Team Manager of 8 people
PHP Developer with lots of
years of experience ….
Ops @Fazland.com
federico.panini@fazland.com - CTO
Maya
CHO @Fazland.com
Chief Happiness Officier
Spreading love all over the
company :)
federico.panini@fazland.com - CTO
Fazland is a marketplace where customers
find the right professional for all their daily
projects and smart professionals find new
clients, while promoting quality, merit and
transparency
How many of you use Vagrant ?
federico.panini@fazland.com - CTO
How many of you don’t use Vagrant ?
federico.panini@fazland.com - CTO
federico.panini@fazland.com - CTO
Martin Fawler
“…This kind of delivery thinking has long been a forgotten corner
of software development, falling into a hole between developers
and operations teams. So it’s no surprise that the techniques in this
book rest upon bringing these teams together—a harbinger of the
nascent but growing DevOps movement.”
Foreword by Martin Fawler in 

Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. 

by David Farley; Jez Humble
federico.panini@fazland.com - CTO
Continuous Integration:
Improving Software Quality and
Reducing Risk.
by Andrew Glover , Steve
Matyas , Paul M. Duvall
Publisher: Addison-Wesley
Professional Published: June
2007
federico.panini@fazland.com - CTO
Continuous Delivery: Reliable
Software Releases through
Build, Test, and Deployment
Automation.



by David Farley; Jez Humble



Published by Addison-Wesley
Professional, 2010
federico.panini@fazland.com - CTO
What is this talk about
Development Workstations
federico.panini@fazland.com - CTO
Federico Panini
federico.panini@fazland.com - CTO
Development Workstations
https://raygun.com/blog/developer-workstations/
https://nickcraver.com/desktop-build/
(StackOverflow)
federico.panini@fazland.com - CTO
Development TEAMS
Operation TEAMS
federico.panini@fazland.com - CTO
REALLY ?!?!?
Software Development Lifecycle
federico.panini@fazland.com - CTO
Software Development Lifecycle
federico.panini@fazland.com - CTO
Our Experience with Vagrant
Ranting against Vagrant
federico.panini@fazland.com - CTO
What is not this talk about
Vagrant configuration
federico.panini@fazland.com - CTO
What is not this talk about
Vagrant provisioning
federico.panini@fazland.com - CTO
What is not this talk about
Docker, LXC, Ansible
federico.panini@fazland.com - CTO
What is not this talk about
let’s Begin!
federico.panini@fazland.com - CTO
federico.panini@fazland.com - CTO
Virtual Machines
federico.panini@fazland.com - CTO
Virtual Machines
Type 1 hypervisor: hypervisors run directly on the system
hardware. A “bare metal” embedded hypervisor
Type 2 hypervisor: hypervisors run on a host operating system
that provides virtualisation services, such as I/O device support
and memory management.
Vagrant is responsible for managing and build efficiently Virtual
Machines from the CLI. This is has been for years the most used tools
for DEVELOPERS to create consistent development environments.
federico.panini@fazland.com - CTO
What is Vagrant ?
Dependencies and Configuration Isolation
federico.panini@fazland.com - CTO
What is Vagrant ? (DEVS PofV)
All the dependencies and all the configurations files are
isolated from the host OS.
Single Disposable Environment
federico.panini@fazland.com - CTO
VM’s are managed in a single place by a single scripting file
What is Vagrant ? (DEVS PofV)
Consistent Environment
federico.panini@fazland.com - CTO
The guest environment could be recreated with ease by a bunch of
scripting files
What is Vagrant ? (DEVS PofV)
Testing Management Infrastructure
Scripts of your Consistent Workflows
federico.panini@fazland.com - CTO
What is Vagrant ? (OPS PofV)
You could test your infrastructure script with a solid, efficient
environment, you can tests your chef or puppet scripts. You can also
tests the same stuff on the cloud, AWS or other providers, which have
the same workflow.
VAGRANT
federico.panini@fazland.com - CTO
Recap #1
federico.panini@fazland.com - CTO
Recap #1
Vm’s and Vagrant
federico.panini@fazland.com - CTO
FAZLAND … the story so far
Fazland was born 6 years ago.
I joined Fazland 5 years ago.
F
A
Z
L
A
N
D
2
0
1
3
federico.panini@fazland.com - CTO
No source control repo
source files managed in a folder backed up with ZIP files
F
A
Z
L
A
N
D
2
0
1
3
FAZLAND … the story so far
federico.panini@fazland.com - CTO
No development environment
the very first source files were from another developer
F
A
Z
L
A
N
D
2
0
1
3
FAZLAND … the story so far
federico.panini@fazland.com - CTO
1 developer, 1 CTO, 1 ops, 1 ….
just me!
F
A
Z
L
A
N
D
2
0
1
3
no need to change this stack….
FAZLAND … the story so far
wrong
federico.panini@fazland.com - CTO
A little bit of history
federico.panini@fazland.com - CTO
how to manage source files ?
how to manage development environment ?
what about server configuration ?
what about application library dependencies ?
how can I remember all the configurations lost ?
what about if my development MAC will crash ?
what about the time and cost of restoring all the environment ?
F
A
Z
L
A
N
D
2
0
1
3
FAZLAND … the story so far
what about if my development MAC will
crash ?
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
3
federico.panini@fazland.com - CTO
immediately I implemented git as source control and a
virtual machine based on VirtualBox
F
A
Z
L
A
N
D
2
0
1
3
FAZLAND … the story so far
federico.panini@fazland.com - CTO
I started managing source code consistently.
I started managing development environment consistently and
isolated…. A black box with all the “secrets” about configuration
& co. hidden to the developer. A solid env with clear
dependencies and configuration.
F
A
Z
L
A
N
D
2
0
1
3
FAZLAND … the story so far
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
3
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
3
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.
config.vm.box = “ubuntu/precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.network :forwarded_port, guest: 80, host: 8383
config.vm.network :forwarded_port, guest: 3306, host: 3306
config.vm.network :forwarded_port, guest: 27017, host: 27017
config.vm.network :private_network, ip: "192.168.0.10"
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
end
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "puppet/manifests"
end
end
application in 2013 — Monolith development stack and application
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
3
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
5
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.ssh.forward_agent = true
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.base_mac="0800271AB2AC"
config.vm.provider "virtualbox" do |vb|
# vb.gui = true
vb.customize ["modifyvm", :id, "--memory", “8192"]
vb.customize ["modifyvm", :id, "--cpus", "4"]
end
config.vm.provision :ansible do |ansible|
ansible.playbook = "provision/mainVagrant.yml"
ansible.verbose = "vvvv"
end
end
application in 2015 — Monolith + first micro services
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
5
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
6
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
config.vm.box = “ubuntu/xenial64”
config.ssh.forward_agent = true
config.vm.network "private_network", ip: "192.168.33.50"
config.vm.base_mac="0800271AB2AC"
config.vm.synced_folder "./", "/vagrant", :nfs => true
config.vm.provider "virtualbox" do |vb|
# vb.gui = true
vb.customize ["modifyvm", :id, "--memory", "4096"]
vb.customize ["modifyvm", :id, "--cpus", "4"]
end
config.vm.provision :ansible do |ansible|
ansible.playbook = "provision/mainVagrant.yml"
ansible.verbose = "vvvv"
end
end
application in 2016 —- monolith + microservices + DOCKER AS R&D project
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
6
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
2
0
1
6
federico.panini@fazland.com - CTO
NFS problems during 2016
F
A
Z
L
A
N
D
2
0
1
6
federico.panini@fazland.com - CTO
FAZLAND … the story so far
F
A
Z
L
A
N
D
N
O
W
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = “ubuntu/xenial64"
config.ssh.forward_agent = true
config.ssh.forward_x11 = true
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.base_mac="0800271AB2AC"
config.vm.synced_folder "./", "/vagrant", :nfs => true
config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048"]
vb.customize ["modifyvm", :id, "--cpus", "2"]
end
config.vm.provision :ansible do |ansible|
ansible.playbook = "provision/mainVagrant.yml"
ansible.verbose = "vvvv"
end
config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s /
usr/share/zoneinfo/Europe/Rome /etc/localtime", run: "always"
config.vm.provision "shell", run: "always" do |s|
s.inline = '
sudo mount -t ramfs none /opt/sycache -o "mode=0777" ;
sudo service nginx restart
'
end
end
application in 2018 - monolith + microservices
federico.panini@fazland.com - CTO
F
A
Z
L
A
N
D
N
O
W
https://github.com/hashicorp/vagrant/issues/8788
federico.panini@fazland.com - CTO
NFS problems during 2017
F
A
Z
L
A
N
D
N
O
W
https://github.com/hashicorp/vagrant/issues/8957
federico.panini@fazland.com - CTO
NFS problems during 2017
F
A
Z
L
A
N
D
N
O
W
https://blog.docksal.io/do-not-update-to-macos-high-sierra-if-you-use-docksal-or-vagrant-3ea461805169
federico.panini@fazland.com - CTO
NFS problems during 2017
F
A
Z
L
A
N
D
N
O
W
federico.panini@fazland.com - CTO
FAZLAND … the story so far quick recap
federico.panini@fazland.com - CTO
VAGRANT AND DOCKER
F
A
Z
L
A
N
D
N
O
W
Vagrant Docker
Virtualization Virtual machine Linux container
Resource isolation Strong Weak (shared kernel)
Startup time Minutes Seconds
Image build time 10+ minutes mins
Size 1GB+ 100MB+
Sharing Vagrant Cloud Docker Hub
• run on top of VM (hypervisor type 2)
• vagrant manage VM’s
• has complete ISOLATION, guest VM
• kernel separated from HOST VM
• it needs some GB of space
• turn on env in minutes
• Linux, Windows, OSX
federico.panini@fazland.com - CTO
VAGRANT AND DOCKER
F
A
Z
L
A
N
D
N
O
W
• uses containers, similar to LXC
• Docker manage container
• less isolation, process isolation
• shared kernel model
• lightweight environment
• turn on env in minutes
• Linux, OSX (slow),
federico.panini@fazland.com - CTO
Recap #2
Vagrant - FazlandVm’s and Vagrant
federico.panini@fazland.com - CTO
Deployment Pipeline
What is a deployment Pipeline ?
federico.panini@fazland.com - CTO
Deployment Pipeline
ANY IDEAS ?
federico.panini@fazland.com - CTO
Deployment Pipeline
“It is the process for getting software
from version control
into the hands of your users.”
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. 

by David Farley; Jez Humble
federico.panini@fazland.com - CTO
Deployment Pipeline
federico.panini@fazland.com - CTO
Deployment Pipeline
federico.panini@fazland.com - CTO
Recap #3
Deployment Pipeline
Vm’s and Vagrant Vagrant - Fazland
What we have to do ?
federico.panini@fazland.com - CTO
The end :)
federico.panini@fazland.com - CTO
federico.panini@fazland.com - CTO
THANK YOU !
• Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment
Automation. by David Farley; Jez Humble

Published by Addison-Wesley Professional, 2010
• Continuous Integration: Improving Software Quality and Reducing Risk. by Andrew Glover
, Steve Matyas , Paul M. Duvall Publisher: Addison-Wesley Professional Published: June
2007
• https://www.vagrantup.com/intro/index.html
• https://en.wikipedia.org/wiki/Virtual_machine
• https://github.com/hashicorp/vagrant/issues/8788
• https://groups.google.com/forum/#!topic/vagrant-up/UgINc-ppptU
• http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines
• https://hackernoon.com/how-to-create-consistent-development-environments-that-just-
work-55be5417341b
• https://martinfowler.com/bliki/MicroservicePrerequisites.html
• https://martinfowler.com/bliki/MonolithFirst.html
federico.panini@fazland.com - CTO
References
federico.panini@fazland.com - CTO
FAZLAND current Deployment Pipeline
Legacy NG + Api
2 different stacks living together
federico.panini@fazland.com - CTO
FAZLAND current Deployment Pipeline
Legacy NG + Api
2 different stacks living together
both environments uses micro services for sending email,
manage notifications to browser or mobile app… etc
federico.panini@fazland.com - CTO
FAZLAND current Deployment Pipeline
1. developers works on features tickets
2. developers tests their tickets
3. developers merge the feature tickets on develop branch.
4. Before merge a git pre-commit hook will be invoked and re-
executes all tests.
D
E
V
E
L
O
P
M
E
N
T
federico.panini@fazland.com - CTO
FAZLAND current Deployment Pipeline
If tests fails the branch will not be merged.
D
E
V
E
L
O
P
M
E
N
T
if test succeed the feature branch will be merged on develop.
federico.panini@fazland.com - CTO
FAZLAND current Deployment Pipeline
1. when features branches are merged on develop a web hook is invoked
and a stage environment on AWS will fetch the updates and re-create the
environment updated with the latests stuff.
2. during deployment on stage tests (unit, functional and integrations) are
executed
3. if the process succeed a new fresh Stage environment is ready to be
tested by our Product Team
4. When the Product team Validate the tickets a new release will be created,
the master branch will be updated with new stuff and a new tag is created.
S
T
A
G
E
federico.panini@fazland.com - CTO
FAZLAND current Deployment Pipeline
1. every time a new Tag is pushed on remote, a web hook against AWS is
called. And through AWS CodePipeline we start to deploy on production the
new features.
2. the same thing happen with our legacy environment with the difference that
the deploy is done with Capistrano, on pure EC2 instances.if the process
succeed a new fresh Stage environment is ready to be tested by our Product
Team
3. AWS CodePipeline will fetch the new release, make the build (in fact re-
execute tests) and if they succeed update our AWS ECS, draining old images
and creating new ones.
P
R
O
D
U
C
T
I
O
N

More Related Content

What's hot

Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009
Andy d
 
symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)
Fabien Potencier
 

What's hot (12)

Continuous Development and Deployment: Workflows and Patterns
Continuous Development and Deployment: Workflows and PatternsContinuous Development and Deployment: Workflows and Patterns
Continuous Development and Deployment: Workflows and Patterns
 
jsDay - Javascript as a programming language
jsDay - Javascript as a programming languagejsDay - Javascript as a programming language
jsDay - Javascript as a programming language
 
How to Build a Pure Evil Magento Module
How to Build a Pure Evil Magento ModuleHow to Build a Pure Evil Magento Module
How to Build a Pure Evil Magento Module
 
Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009Containerize vs Virtualize? NGDC 2009
Containerize vs Virtualize? NGDC 2009
 
Web (dis)assembly
Web (dis)assemblyWeb (dis)assembly
Web (dis)assembly
 
Filip Rakowski "Web Performance in modern JavaScript world"
Filip Rakowski "Web Performance in modern JavaScript world"Filip Rakowski "Web Performance in modern JavaScript world"
Filip Rakowski "Web Performance in modern JavaScript world"
 
徒手打造自己的粉專客服機器人
徒手打造自己的粉專客服機器人 徒手打造自己的粉專客服機器人
徒手打造自己的粉專客服機器人
 
Magento Testing on all fronts
Magento Testing on all frontsMagento Testing on all fronts
Magento Testing on all fronts
 
Svelte the future of frontend development
Svelte   the future of frontend developmentSvelte   the future of frontend development
Svelte the future of frontend development
 
20 Wireframing Tools
20 Wireframing Tools20 Wireframing Tools
20 Wireframing Tools
 
symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)
 
Frontend Performance: Beginner to Expert to Crazy Person
Frontend Performance: Beginner to Expert to Crazy PersonFrontend Performance: Beginner to Expert to Crazy Person
Frontend Performance: Beginner to Expert to Crazy Person
 

Similar to Long life to vagrant… Vagrant is dead

Similar to Long life to vagrant… Vagrant is dead (20)

OpenStack Murano introduction
OpenStack Murano introductionOpenStack Murano introduction
OpenStack Murano introduction
 
Why we choose Symfony2
Why we choose Symfony2Why we choose Symfony2
Why we choose Symfony2
 
Virtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On DemandVirtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On Demand
 
Rock-solid Magento Deployments (and Development)
Rock-solid Magento Deployments (and Development)Rock-solid Magento Deployments (and Development)
Rock-solid Magento Deployments (and Development)
 
Building frameworks: from concept to completion
Building frameworks: from concept to completionBuilding frameworks: from concept to completion
Building frameworks: from concept to completion
 
Dart on Arm - Flutter Bangalore June 2021
Dart on Arm - Flutter Bangalore June 2021Dart on Arm - Flutter Bangalore June 2021
Dart on Arm - Flutter Bangalore June 2021
 
Chicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyChicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - Mediafly
 
Enjoying the full stack - Frontend 2010
Enjoying the full stack - Frontend 2010Enjoying the full stack - Frontend 2010
Enjoying the full stack - Frontend 2010
 
Cfgmgmt Challenges aren't technical anymore
Cfgmgmt Challenges aren't technical anymoreCfgmgmt Challenges aren't technical anymore
Cfgmgmt Challenges aren't technical anymore
 
Install MariaDB on IBM i - Tips, troubleshooting, and more
Install MariaDB on IBM i - Tips, troubleshooting, and moreInstall MariaDB on IBM i - Tips, troubleshooting, and more
Install MariaDB on IBM i - Tips, troubleshooting, and more
 
Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...
Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...
Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...
 
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
JsDay - It's not you, It's me (or how to avoid being coupled with a Javascrip...
 
Scale your Magento app with Elastic Beanstalk
Scale your Magento app with Elastic BeanstalkScale your Magento app with Elastic Beanstalk
Scale your Magento app with Elastic Beanstalk
 
X by orange; una telco en la nube
X by orange;   una telco en la nubeX by orange;   una telco en la nube
X by orange; una telco en la nube
 
Vagrant - Team Development made easy
Vagrant - Team Development made easyVagrant - Team Development made easy
Vagrant - Team Development made easy
 
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
Spring Boot & Spring Cloud on PAS- Nate Schutta (1/2)
 
Trying and evaluating the new features of GlusterFS 3.5
Trying and evaluating the new features of GlusterFS 3.5Trying and evaluating the new features of GlusterFS 3.5
Trying and evaluating the new features of GlusterFS 3.5
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
 
Introduction Into Docker Ecosystem
Introduction Into Docker EcosystemIntroduction Into Docker Ecosystem
Introduction Into Docker Ecosystem
 
Magento 2: New and Innovative? - php[world] 2015
Magento 2: New and Innovative? - php[world] 2015Magento 2: New and Innovative? - php[world] 2015
Magento 2: New and Innovative? - php[world] 2015
 

More from Federico Panini

More from Federico Panini (8)

Machine Learning: strategie di collaborative filtering nelle piattaforme onli...
Machine Learning: strategie di collaborative filtering nelle piattaforme onli...Machine Learning: strategie di collaborative filtering nelle piattaforme onli...
Machine Learning: strategie di collaborative filtering nelle piattaforme onli...
 
Vagrant boxes with x, export display, chrome headless
Vagrant boxes with x, export display, chrome headlessVagrant boxes with x, export display, chrome headless
Vagrant boxes with x, export display, chrome headless
 
Aws vpc : addressing cidr
Aws vpc : addressing cidrAws vpc : addressing cidr
Aws vpc : addressing cidr
 
Git in pills : git stash
Git in pills : git stashGit in pills : git stash
Git in pills : git stash
 
Symfony & Mailcatcher
Symfony & MailcatcherSymfony & Mailcatcher
Symfony & Mailcatcher
 
Elasticsearch quick Intro (English)
Elasticsearch quick Intro (English)Elasticsearch quick Intro (English)
Elasticsearch quick Intro (English)
 
Elasticsearch a quick introduction
Elasticsearch a quick introductionElasticsearch a quick introduction
Elasticsearch a quick introduction
 
Elk - Elasticsearch Logstash Kibana stack explained
Elk - Elasticsearch Logstash Kibana stack explainedElk - Elasticsearch Logstash Kibana stack explained
Elk - Elasticsearch Logstash Kibana stack explained
 

Recently uploaded

一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
aagad
 
Article writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptxArticle writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptx
abhinandnam9997
 

Recently uploaded (12)

ER(Entity Relationship) Diagram for online shopping - TAE
ER(Entity Relationship) Diagram for online shopping - TAEER(Entity Relationship) Diagram for online shopping - TAE
ER(Entity Relationship) Diagram for online shopping - TAE
 
The Use of AI in Indonesia Election 2024: A Case Study
The Use of AI in Indonesia Election 2024: A Case StudyThe Use of AI in Indonesia Election 2024: A Case Study
The Use of AI in Indonesia Election 2024: A Case Study
 
Multi-cluster Kubernetes Networking- Patterns, Projects and Guidelines
Multi-cluster Kubernetes Networking- Patterns, Projects and GuidelinesMulti-cluster Kubernetes Networking- Patterns, Projects and Guidelines
Multi-cluster Kubernetes Networking- Patterns, Projects and Guidelines
 
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
 
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shopHistory+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
 
The AI Powered Organization-Intro to AI-LAN.pdf
The AI Powered Organization-Intro to AI-LAN.pdfThe AI Powered Organization-Intro to AI-LAN.pdf
The AI Powered Organization-Intro to AI-LAN.pdf
 
How Do I Begin the Linksys Velop Setup Process?
How Do I Begin the Linksys Velop Setup Process?How Do I Begin the Linksys Velop Setup Process?
How Do I Begin the Linksys Velop Setup Process?
 
Pvtaan Social media marketing proposal.pdf
Pvtaan Social media marketing proposal.pdfPvtaan Social media marketing proposal.pdf
Pvtaan Social media marketing proposal.pdf
 
The+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptxThe+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptx
 
The Best AI Powered Software - Intellivid AI Studio
The Best AI Powered Software - Intellivid AI StudioThe Best AI Powered Software - Intellivid AI Studio
The Best AI Powered Software - Intellivid AI Studio
 
How to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptxHow to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptx
 
Article writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptxArticle writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptx
 

Long life to vagrant… Vagrant is dead

  • 1. LONG LIFE TO VAGRANT… VAGRANT IS DEAD federico.panini@fazland.com - CTO Development boxes and modern software lifecycle development techniques. How our development team grew up and how we evolved our development stack.
  • 2. federico.panini@fazland.com - CTO Federico Panini CTO @Fazland.com Team Manager of 8 people PHP Developer with lots of years of experience …. Ops @Fazland.com
  • 3. federico.panini@fazland.com - CTO Maya CHO @Fazland.com Chief Happiness Officier Spreading love all over the company :)
  • 4. federico.panini@fazland.com - CTO Fazland is a marketplace where customers find the right professional for all their daily projects and smart professionals find new clients, while promoting quality, merit and transparency
  • 5. How many of you use Vagrant ? federico.panini@fazland.com - CTO
  • 6. How many of you don’t use Vagrant ? federico.panini@fazland.com - CTO
  • 7. federico.panini@fazland.com - CTO Martin Fawler “…This kind of delivery thinking has long been a forgotten corner of software development, falling into a hole between developers and operations teams. So it’s no surprise that the techniques in this book rest upon bringing these teams together—a harbinger of the nascent but growing DevOps movement.” Foreword by Martin Fawler in 
 Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. 
 by David Farley; Jez Humble
  • 8. federico.panini@fazland.com - CTO Continuous Integration: Improving Software Quality and Reducing Risk. by Andrew Glover , Steve Matyas , Paul M. Duvall Publisher: Addison-Wesley Professional Published: June 2007
  • 9. federico.panini@fazland.com - CTO Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation.
 
 by David Farley; Jez Humble
 
 Published by Addison-Wesley Professional, 2010
  • 10. federico.panini@fazland.com - CTO What is this talk about Development Workstations
  • 12. federico.panini@fazland.com - CTO Development Workstations https://raygun.com/blog/developer-workstations/ https://nickcraver.com/desktop-build/ (StackOverflow)
  • 14. federico.panini@fazland.com - CTO REALLY ?!?!? Software Development Lifecycle
  • 16. federico.panini@fazland.com - CTO Our Experience with Vagrant
  • 17. Ranting against Vagrant federico.panini@fazland.com - CTO What is not this talk about
  • 18. Vagrant configuration federico.panini@fazland.com - CTO What is not this talk about
  • 19. Vagrant provisioning federico.panini@fazland.com - CTO What is not this talk about
  • 20. Docker, LXC, Ansible federico.panini@fazland.com - CTO What is not this talk about
  • 23. federico.panini@fazland.com - CTO Virtual Machines Type 1 hypervisor: hypervisors run directly on the system hardware. A “bare metal” embedded hypervisor Type 2 hypervisor: hypervisors run on a host operating system that provides virtualisation services, such as I/O device support and memory management.
  • 24. Vagrant is responsible for managing and build efficiently Virtual Machines from the CLI. This is has been for years the most used tools for DEVELOPERS to create consistent development environments. federico.panini@fazland.com - CTO What is Vagrant ?
  • 25. Dependencies and Configuration Isolation federico.panini@fazland.com - CTO What is Vagrant ? (DEVS PofV) All the dependencies and all the configurations files are isolated from the host OS.
  • 26. Single Disposable Environment federico.panini@fazland.com - CTO VM’s are managed in a single place by a single scripting file What is Vagrant ? (DEVS PofV)
  • 27. Consistent Environment federico.panini@fazland.com - CTO The guest environment could be recreated with ease by a bunch of scripting files What is Vagrant ? (DEVS PofV)
  • 28. Testing Management Infrastructure Scripts of your Consistent Workflows federico.panini@fazland.com - CTO What is Vagrant ? (OPS PofV) You could test your infrastructure script with a solid, efficient environment, you can tests your chef or puppet scripts. You can also tests the same stuff on the cloud, AWS or other providers, which have the same workflow.
  • 31. federico.panini@fazland.com - CTO FAZLAND … the story so far Fazland was born 6 years ago. I joined Fazland 5 years ago. F A Z L A N D 2 0 1 3
  • 32. federico.panini@fazland.com - CTO No source control repo source files managed in a folder backed up with ZIP files F A Z L A N D 2 0 1 3 FAZLAND … the story so far
  • 33. federico.panini@fazland.com - CTO No development environment the very first source files were from another developer F A Z L A N D 2 0 1 3 FAZLAND … the story so far
  • 34. federico.panini@fazland.com - CTO 1 developer, 1 CTO, 1 ops, 1 …. just me! F A Z L A N D 2 0 1 3 no need to change this stack…. FAZLAND … the story so far
  • 36. federico.panini@fazland.com - CTO how to manage source files ? how to manage development environment ? what about server configuration ? what about application library dependencies ? how can I remember all the configurations lost ? what about if my development MAC will crash ? what about the time and cost of restoring all the environment ? F A Z L A N D 2 0 1 3 FAZLAND … the story so far
  • 37. what about if my development MAC will crash ? federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 3
  • 38. federico.panini@fazland.com - CTO immediately I implemented git as source control and a virtual machine based on VirtualBox F A Z L A N D 2 0 1 3 FAZLAND … the story so far
  • 39. federico.panini@fazland.com - CTO I started managing source code consistently. I started managing development environment consistently and isolated…. A black box with all the “secrets” about configuration & co. hidden to the developer. A solid env with clear dependencies and configuration. F A Z L A N D 2 0 1 3 FAZLAND … the story so far
  • 40. federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 3
  • 41. federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 3 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # All Vagrant configuration is done here. The most common configuration # options are documented and commented below. For a complete reference, # please see the online documentation at vagrantup.com. config.vm.box = “ubuntu/precise64" config.vm.box_url = "http://files.vagrantup.com/precise64.box" config.vm.network :forwarded_port, guest: 80, host: 8383 config.vm.network :forwarded_port, guest: 3306, host: 3306 config.vm.network :forwarded_port, guest: 27017, host: 27017 config.vm.network :private_network, ip: "192.168.0.10" config.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "1024"] end config.vm.provision :puppet do |puppet| puppet.manifests_path = "puppet/manifests" end end
  • 42. application in 2013 — Monolith development stack and application federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 3
  • 43. federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 5 # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty64" config.ssh.forward_agent = true config.vm.network "private_network", ip: "192.168.33.10" config.vm.base_mac="0800271AB2AC" config.vm.provider "virtualbox" do |vb| # vb.gui = true vb.customize ["modifyvm", :id, "--memory", “8192"] vb.customize ["modifyvm", :id, "--cpus", "4"] end config.vm.provision :ansible do |ansible| ansible.playbook = "provision/mainVagrant.yml" ansible.verbose = "vvvv" end end
  • 44. application in 2015 — Monolith + first micro services federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 5
  • 45. federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 6 # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. Vagrant.configure(2) do |config| config.vm.box = “ubuntu/xenial64” config.ssh.forward_agent = true config.vm.network "private_network", ip: "192.168.33.50" config.vm.base_mac="0800271AB2AC" config.vm.synced_folder "./", "/vagrant", :nfs => true config.vm.provider "virtualbox" do |vb| # vb.gui = true vb.customize ["modifyvm", :id, "--memory", "4096"] vb.customize ["modifyvm", :id, "--cpus", "4"] end config.vm.provision :ansible do |ansible| ansible.playbook = "provision/mainVagrant.yml" ansible.verbose = "vvvv" end end
  • 46. application in 2016 —- monolith + microservices + DOCKER AS R&D project federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 6
  • 47. federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D 2 0 1 6
  • 48. federico.panini@fazland.com - CTO NFS problems during 2016 F A Z L A N D 2 0 1 6
  • 49. federico.panini@fazland.com - CTO FAZLAND … the story so far F A Z L A N D N O W # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| config.vm.box = “ubuntu/xenial64" config.ssh.forward_agent = true config.ssh.forward_x11 = true config.vm.network "private_network", ip: "192.168.33.10" config.vm.base_mac="0800271AB2AC" config.vm.synced_folder "./", "/vagrant", :nfs => true config.vm.provider "virtualbox" do |vb| vb.customize ["modifyvm", :id, "--memory", "2048"] vb.customize ["modifyvm", :id, "--cpus", "2"] end config.vm.provision :ansible do |ansible| ansible.playbook = "provision/mainVagrant.yml" ansible.verbose = "vvvv" end config.vm.provision :shell, :inline => "sudo rm /etc/localtime && sudo ln -s / usr/share/zoneinfo/Europe/Rome /etc/localtime", run: "always" config.vm.provision "shell", run: "always" do |s| s.inline = ' sudo mount -t ramfs none /opt/sycache -o "mode=0777" ; sudo service nginx restart ' end end
  • 50. application in 2018 - monolith + microservices federico.panini@fazland.com - CTO F A Z L A N D N O W
  • 54. federico.panini@fazland.com - CTO FAZLAND … the story so far quick recap
  • 55. federico.panini@fazland.com - CTO VAGRANT AND DOCKER F A Z L A N D N O W Vagrant Docker Virtualization Virtual machine Linux container Resource isolation Strong Weak (shared kernel) Startup time Minutes Seconds Image build time 10+ minutes mins Size 1GB+ 100MB+ Sharing Vagrant Cloud Docker Hub
  • 56. • run on top of VM (hypervisor type 2) • vagrant manage VM’s • has complete ISOLATION, guest VM • kernel separated from HOST VM • it needs some GB of space • turn on env in minutes • Linux, Windows, OSX federico.panini@fazland.com - CTO VAGRANT AND DOCKER F A Z L A N D N O W • uses containers, similar to LXC • Docker manage container • less isolation, process isolation • shared kernel model • lightweight environment • turn on env in minutes • Linux, OSX (slow),
  • 57. federico.panini@fazland.com - CTO Recap #2 Vagrant - FazlandVm’s and Vagrant
  • 58. federico.panini@fazland.com - CTO Deployment Pipeline What is a deployment Pipeline ?
  • 60. federico.panini@fazland.com - CTO Deployment Pipeline “It is the process for getting software from version control into the hands of your users.” Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. 
 by David Farley; Jez Humble
  • 63. federico.panini@fazland.com - CTO Recap #3 Deployment Pipeline Vm’s and Vagrant Vagrant - Fazland
  • 64. What we have to do ? federico.panini@fazland.com - CTO The end :)
  • 67. • Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. by David Farley; Jez Humble
 Published by Addison-Wesley Professional, 2010 • Continuous Integration: Improving Software Quality and Reducing Risk. by Andrew Glover , Steve Matyas , Paul M. Duvall Publisher: Addison-Wesley Professional Published: June 2007 • https://www.vagrantup.com/intro/index.html • https://en.wikipedia.org/wiki/Virtual_machine • https://github.com/hashicorp/vagrant/issues/8788 • https://groups.google.com/forum/#!topic/vagrant-up/UgINc-ppptU • http://mitchellh.com/comparing-filesystem-performance-in-virtual-machines • https://hackernoon.com/how-to-create-consistent-development-environments-that-just- work-55be5417341b • https://martinfowler.com/bliki/MicroservicePrerequisites.html • https://martinfowler.com/bliki/MonolithFirst.html federico.panini@fazland.com - CTO References
  • 68. federico.panini@fazland.com - CTO FAZLAND current Deployment Pipeline Legacy NG + Api 2 different stacks living together
  • 69. federico.panini@fazland.com - CTO FAZLAND current Deployment Pipeline Legacy NG + Api 2 different stacks living together both environments uses micro services for sending email, manage notifications to browser or mobile app… etc
  • 70. federico.panini@fazland.com - CTO FAZLAND current Deployment Pipeline 1. developers works on features tickets 2. developers tests their tickets 3. developers merge the feature tickets on develop branch. 4. Before merge a git pre-commit hook will be invoked and re- executes all tests. D E V E L O P M E N T
  • 71. federico.panini@fazland.com - CTO FAZLAND current Deployment Pipeline If tests fails the branch will not be merged. D E V E L O P M E N T if test succeed the feature branch will be merged on develop.
  • 72. federico.panini@fazland.com - CTO FAZLAND current Deployment Pipeline 1. when features branches are merged on develop a web hook is invoked and a stage environment on AWS will fetch the updates and re-create the environment updated with the latests stuff. 2. during deployment on stage tests (unit, functional and integrations) are executed 3. if the process succeed a new fresh Stage environment is ready to be tested by our Product Team 4. When the Product team Validate the tickets a new release will be created, the master branch will be updated with new stuff and a new tag is created. S T A G E
  • 73. federico.panini@fazland.com - CTO FAZLAND current Deployment Pipeline 1. every time a new Tag is pushed on remote, a web hook against AWS is called. And through AWS CodePipeline we start to deploy on production the new features. 2. the same thing happen with our legacy environment with the difference that the deploy is done with Capistrano, on pure EC2 instances.if the process succeed a new fresh Stage environment is ready to be tested by our Product Team 3. AWS CodePipeline will fetch the new release, make the build (in fact re- execute tests) and if they succeed update our AWS ECS, draining old images and creating new ones. P R O D U C T I O N