SlideShare a Scribd company logo
DEVOPS TOOLS FOR EVERYONE: 

VAGRANT, PUPPET AND WEBMIN
!
Michał Karzyński, DevCon 2014
TALK OUTLINE
1. Vagrant - create#
2. Puppet - configure#
3. Webmin - administer
michal@karzynski.pl DevCon 2014
YOURSTRULY
Michał Karzyński#
• project manager at Politechnika Gdańska#
• freelance developer and consultant#
• polyglot, currently: Python and JavaScript#
• author#
• web developer since 1996#
• @postrational http://michal.karzynski.pl#
michal@karzynski.pl DevCon 2014
What does a webapp look like?
LAMP
Apache
Linux
MySQL
PHP
Nginx
Linux
PostgreSQL
Python
Virtualenv
Gunicorn
Nginx
Linux
PostgreSQL
Python
Virtualenv
Gunicorn
Varnish
Redis
Nginx
Linux
PostgreSQL
Python
Virtualenv
Gunicorn
Varnish
Redis
MongoDB
Celery
Postfix
RabbitMQ
DevOps tools for everyone - Vagrant, Puppet and Webmin
Vagrant
$ vagrant up
$ git clone git://.../development.git	
$ cd development	
$ vagrant up
DevOps tools for everyone - Vagrant, Puppet and Webmin
HOW DOES IT WORK?
VAGRANTFILE_API_VERSION = "2"!
!
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|!
config.vm.box = "debian-wheezy-64"!
config.vm.box_url = "https://.../debian-wheezy-64.box"!
config.vm.hostname = "wheezy-vm"!
end
Vagrantfile
• Ease of use#
• Many pre-configured boxes available#
• Support for multiple machines#
• Local support forVirtualBox orVMware#
• Build remote clouds on AWS, RackSpace, etc.#
• Provisioning using:Ansible, Chef, Docker, Puppet, etc.
FEATURES
http://www.vagrantup.com
PUPPET PROVISIONING
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|!
config.vm.box = "debian-wheezy-64"!
config.vm.box_url = "https://www.dropbox.com/s/foj5mml4ft3b363/debian-wheezy-64.box?dl=1"!
config.vm.hostname = "wheezy-vm"!
!
# Install puppet modules!
config.vm.provision :shell do |shell|!
shell.inline = "# Install modules from Puppet Forge!
                    mkdir -p /etc/puppet/modules;!
                    puppet module install puppetlabs/apt;!
                    !
                    # Install Puppet modules from GitHub!
                    aptitude -y install git;!
                    cd /etc/puppet/modules;!
                    git clone git://github.com/stankevich/puppet-python.git python;!
                    "!
end!
!
# Use Puppet to provision server configuration!
config.vm.provision "puppet" do |puppet|!
puppet.manifests_path = "manifests"!
end!
!
end
Vagrantfile
DevOps tools for everyone - Vagrant, Puppet and Webmin
Puppet
INSTALLING A PACKAGE
$ vim /etc/apt/sources.list!
!
deb http://download.webmin.com/download/repository sarge contrib!
!
$ wget -qO - http://www.webmin.com/jcameron-key.asc | sudo apt-key add -!
$ sudo aptitude update!
$ sudo aptitude install webmin!
WITH PUPPET
include 'apt'!
!
apt::source { 'webmin':!
location => 'http://download.webmin.com/download/repository/',!
release => 'sarge',!
repos => 'contrib',!
key => '11F63C51',!
include_src => false,!
}!
!
apt::key { 'webmin':!
key => '11F63C51',!
key_source => 'http://www.webmin.com/jcameron-key.asc',!
}!
!
exec { "apt-update-webmin":!
command => "/usr/bin/aptitude -y update",!
require => [Apt::Source['webmin'], Apt::Key['webmin']],!
}!
!
package { !
'webmin': !
ensure => present,!
require => Exec['apt-update-webmin'],!
}
webmin.pp
SET UP A DATABASE
# Install the Postgres server!
class { 'postgresql::server':!
ensure => 'present',!
listen_addresses => 'localhost',!
encoding => 'UTF8',!
manage_firewall => true,!
}!
!
# Install PostgreSQL client!
class { 'postgresql::client': }!
!
# And development libraries!
class { 'postgresql::lib::devel': }!
!
!
# Set up a PostgreSQL database named 'hello' !
# and user named 'hello_django' with a long passphrase!
postgresql::server::db { 'hello':!
user => 'hello_django',!
password => postgresql_password('hello_django', 'xxxxxxxxxxxxx'),!
}
database.pp
ADDING A USER
package { !
'sudo': ensure => present;!
'zsh': ensure => present;!
'git': ensure => present;!
}!
!
user { 'michal':!
password => 'xxxxxxxxxxxxx',!
groups => ['staff', 'sudo'],!
ensure => 'present',!
managehome => 'true',!
shell => '/usr/bin/zsh',!
require => Package['zsh'],!
}!
!
ssh_authorized_key{ 'michal@silver':!
user => 'michal',!
ensure => 'present', !
type => 'ssh-rsa', !
key => 'xxxxxxxxxxxxx', !
require => User['michal'],!
}
my_account.pp
FEATURES
• Store server configuration in text files (manifests)#
• Automatically configure packages, user accounts, services, etc.#
• Declarative language to describe machines#
• Store configuration of multiple machines on a central Puppet
master server#
• Update configuration when manifest file changes
http://puppetlabs.com
MASTER OF PUPPETS
Master
Puppet Puppet Puppet Puppet
Webmin
YOUR SERVER GUI
https://my-server:10000
YOUR SERVER GUI
PROCESSES
INIT SCRIPTS
NETWORKING
FIREWALL
SERVICES
DATABASES
FEATURES
• Graphically manage packages, user accounts, services#
• Install and configure server software#
• Monitor server activity and log files#
• Tweak and test settings#
• Execute commands and access files through the browser#
• Support for MySQL, PostgreSQL,Apache, PHP and many, many others
http://webmin.com
SHAMELESS PLUG
DEVOPSTOOLS FOR EVERYONE
1. Vagrant - create#
2. Puppet - configure#
3. Webmin - administer
michal@karzynski.pl DevCon 2014
THANKYOU
• http://www.ikea.com/us/en/catalog/products/60148701/#
• http://www.globtroter.pl/zdjecia/
44393,norwegia,brak,latarnia,morska,w,lindesnes,x.html
michal@karzynski.pl DevCon 2014
IMAGE CREDITS:

More Related Content

What's hot (20)

PPTX
Vagrant to-aws-flow
Kimberly Macias
 
PDF
RESTful OSGi middleware for NoSQL databases with Docker
Bertrand Delacretaz
 
PDF
Node js
Rohan Chandane
 
PDF
Developing OpenResty Framework
OpenRestyCon
 
ODP
It Works On My Machine: Vagrant for Software Development
Carlos Perez
 
PDF
Scalable Django Architecture
Rami Sayar
 
PDF
Pragmatic Monolith-First, easy to decompose, clean architecture
Piotr Pelczar
 
KEY
Deploying Plack Web Applications: OSCON 2011
Tatsuhiko Miyagawa
 
PPT
Intro to CloudStack API
Sebastien Goasguen
 
PDF
Modern Infrastructure from Scratch with Puppet
Puppet
 
PDF
Introduction to node js - From "hello world" to deploying on azure
Colin Mackay
 
PDF
Puppet Camp Paris 2015: Continuous Integration of Puppet Code (Intermediate)
Puppet
 
PDF
Choosing a Javascript Framework
All Things Open
 
PPTX
Java script at backend nodejs
Amit Thakkar
 
PDF
Introduction to Node.js: What, why and how?
Christian Joudrey
 
PDF
Deploying Symfony | symfony.cat
Pablo Godel
 
ODP
SockJS Intro
Ngoc Dao
 
PDF
Configuring Django projects for multiple environments
Apptension
 
PDF
Massively Scaled High Performance Web Services with PHP
Demin Yin
 
PDF
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Marc Cluet
 
Vagrant to-aws-flow
Kimberly Macias
 
RESTful OSGi middleware for NoSQL databases with Docker
Bertrand Delacretaz
 
Developing OpenResty Framework
OpenRestyCon
 
It Works On My Machine: Vagrant for Software Development
Carlos Perez
 
Scalable Django Architecture
Rami Sayar
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Piotr Pelczar
 
Deploying Plack Web Applications: OSCON 2011
Tatsuhiko Miyagawa
 
Intro to CloudStack API
Sebastien Goasguen
 
Modern Infrastructure from Scratch with Puppet
Puppet
 
Introduction to node js - From "hello world" to deploying on azure
Colin Mackay
 
Puppet Camp Paris 2015: Continuous Integration of Puppet Code (Intermediate)
Puppet
 
Choosing a Javascript Framework
All Things Open
 
Java script at backend nodejs
Amit Thakkar
 
Introduction to Node.js: What, why and how?
Christian Joudrey
 
Deploying Symfony | symfony.cat
Pablo Godel
 
SockJS Intro
Ngoc Dao
 
Configuring Django projects for multiple environments
Apptension
 
Massively Scaled High Performance Web Services with PHP
Demin Yin
 
Puppet Camp London Fall 2015 - Service Discovery and Puppet
Marc Cluet
 

Similar to DevOps tools for everyone - Vagrant, Puppet and Webmin (20)

PDF
Security Testing Using Infrastructure-As-Code
Vision Concepts Infrastructure Services Solution
 
PDF
Getting started with puppet and vagrant (1)
Puppet
 
KEY
20100425 Configuration Management With Puppet Lfnw
garrett honeycutt
 
PDF
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
DECK36
 
PDF
Build Automation 101
Martin Jackson
 
PDF
Instant LAMP Stack with Vagrant and Puppet
Patrick Lee
 
PDF
20090514 Introducing Puppet To Sasag
garrett honeycutt
 
PDF
Provisioning with Puppet
Joe Ray
 
PDF
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Cosimo Streppone
 
PDF
Configuration Management with Puppet
Rachel Andrew
 
PDF
Puppet modules: An Holistic Approach
Alessandro Franceschi
 
PDF
Puppet Modules: An Holistic Approach - Alessandro Franceschi of Lab42 - Puppe...
Puppet
 
KEY
Puppet for Java developers - JavaZone NO 2012
Carlos Sanchez
 
PDF
Puppet managed loadays
loadays
 
PDF
Puppet and Vagrant in development
Adam Culp
 
PDF
Using Puppet in Small Infrastructures
Rachel Andrew
 
PDF
Creating a mature puppet system
rkhatibi
 
PDF
Creating a Mature Puppet System
Puppet
 
PPTX
Virtualization for Developers
John Coggeshall
 
KEY
From Dev to DevOps - FOSDEM 2012
Carlos Sanchez
 
Security Testing Using Infrastructure-As-Code
Vision Concepts Infrastructure Services Solution
 
Getting started with puppet and vagrant (1)
Puppet
 
20100425 Configuration Management With Puppet Lfnw
garrett honeycutt
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
DECK36
 
Build Automation 101
Martin Jackson
 
Instant LAMP Stack with Vagrant and Puppet
Patrick Lee
 
20090514 Introducing Puppet To Sasag
garrett honeycutt
 
Provisioning with Puppet
Joe Ray
 
Puppet at Opera Sofware - PuppetCamp Oslo 2013
Cosimo Streppone
 
Configuration Management with Puppet
Rachel Andrew
 
Puppet modules: An Holistic Approach
Alessandro Franceschi
 
Puppet Modules: An Holistic Approach - Alessandro Franceschi of Lab42 - Puppe...
Puppet
 
Puppet for Java developers - JavaZone NO 2012
Carlos Sanchez
 
Puppet managed loadays
loadays
 
Puppet and Vagrant in development
Adam Culp
 
Using Puppet in Small Infrastructures
Rachel Andrew
 
Creating a mature puppet system
rkhatibi
 
Creating a Mature Puppet System
Puppet
 
Virtualization for Developers
John Coggeshall
 
From Dev to DevOps - FOSDEM 2012
Carlos Sanchez
 
Ad

Recently uploaded (20)

PPTX
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
PDF
Generative AI vs Predictive AI-The Ultimate Comparison Guide
Lily Clark
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PPTX
Agentic AI in Healthcare Driving the Next Wave of Digital Transformation
danielle hunter
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PDF
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
PDF
Brief History of Internet - Early Days of Internet
sutharharshit158
 
PDF
Researching The Best Chat SDK Providers in 2025
Ray Fields
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PPTX
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
PDF
introduction to computer hardware and sofeware
chauhanshraddha2007
 
PPTX
The Future of AI & Machine Learning.pptx
pritsen4700
 
PPTX
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
PPTX
Agile Chennai 18-19 July 2025 | Workshop - Enhancing Agile Collaboration with...
AgileNetwork
 
PDF
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PDF
TrustArc Webinar - Navigating Data Privacy in LATAM: Laws, Trends, and Compli...
TrustArc
 
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
Generative AI vs Predictive AI-The Ultimate Comparison Guide
Lily Clark
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
Agentic AI in Healthcare Driving the Next Wave of Digital Transformation
danielle hunter
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
Research-Fundamentals-and-Topic-Development.pdf
ayesha butalia
 
Brief History of Internet - Early Days of Internet
sutharharshit158
 
Researching The Best Chat SDK Providers in 2025
Ray Fields
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
cloud computing vai.pptx for the project
vaibhavdobariyal79
 
introduction to computer hardware and sofeware
chauhanshraddha2007
 
The Future of AI & Machine Learning.pptx
pritsen4700
 
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
Agile Chennai 18-19 July 2025 | Workshop - Enhancing Agile Collaboration with...
AgileNetwork
 
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
TrustArc Webinar - Navigating Data Privacy in LATAM: Laws, Trends, and Compli...
TrustArc
 
Ad

DevOps tools for everyone - Vagrant, Puppet and Webmin

  • 1. DEVOPS TOOLS FOR EVERYONE: 
 VAGRANT, PUPPET AND WEBMIN ! Michał Karzyński, DevCon 2014
  • 2. TALK OUTLINE 1. Vagrant - create# 2. Puppet - configure# 3. Webmin - administer [email protected] DevCon 2014
  • 3. YOURSTRULY Michał Karzyński# • project manager at Politechnika Gdańska# • freelance developer and consultant# • polyglot, currently: Python and JavaScript# • author# • web developer since 1996# • @postrational http://michal.karzynski.pl# [email protected] DevCon 2014
  • 4. What does a webapp look like?
  • 13. $ git clone git://.../development.git $ cd development $ vagrant up
  • 15. HOW DOES IT WORK? VAGRANTFILE_API_VERSION = "2"! ! Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|! config.vm.box = "debian-wheezy-64"! config.vm.box_url = "https://.../debian-wheezy-64.box"! config.vm.hostname = "wheezy-vm"! end Vagrantfile
  • 16. • Ease of use# • Many pre-configured boxes available# • Support for multiple machines# • Local support forVirtualBox orVMware# • Build remote clouds on AWS, RackSpace, etc.# • Provisioning using:Ansible, Chef, Docker, Puppet, etc. FEATURES http://www.vagrantup.com
  • 17. PUPPET PROVISIONING Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|! config.vm.box = "debian-wheezy-64"! config.vm.box_url = "https://www.dropbox.com/s/foj5mml4ft3b363/debian-wheezy-64.box?dl=1"! config.vm.hostname = "wheezy-vm"! ! # Install puppet modules! config.vm.provision :shell do |shell|! shell.inline = "# Install modules from Puppet Forge!                     mkdir -p /etc/puppet/modules;!                     puppet module install puppetlabs/apt;!                     !                     # Install Puppet modules from GitHub!                     aptitude -y install git;!                     cd /etc/puppet/modules;!                     git clone git://github.com/stankevich/puppet-python.git python;!                     "! end! ! # Use Puppet to provision server configuration! config.vm.provision "puppet" do |puppet|! puppet.manifests_path = "manifests"! end! ! end Vagrantfile
  • 20. INSTALLING A PACKAGE $ vim /etc/apt/sources.list! ! deb http://download.webmin.com/download/repository sarge contrib! ! $ wget -qO - http://www.webmin.com/jcameron-key.asc | sudo apt-key add -! $ sudo aptitude update! $ sudo aptitude install webmin!
  • 21. WITH PUPPET include 'apt'! ! apt::source { 'webmin':! location => 'http://download.webmin.com/download/repository/',! release => 'sarge',! repos => 'contrib',! key => '11F63C51',! include_src => false,! }! ! apt::key { 'webmin':! key => '11F63C51',! key_source => 'http://www.webmin.com/jcameron-key.asc',! }! ! exec { "apt-update-webmin":! command => "/usr/bin/aptitude -y update",! require => [Apt::Source['webmin'], Apt::Key['webmin']],! }! ! package { ! 'webmin': ! ensure => present,! require => Exec['apt-update-webmin'],! } webmin.pp
  • 22. SET UP A DATABASE # Install the Postgres server! class { 'postgresql::server':! ensure => 'present',! listen_addresses => 'localhost',! encoding => 'UTF8',! manage_firewall => true,! }! ! # Install PostgreSQL client! class { 'postgresql::client': }! ! # And development libraries! class { 'postgresql::lib::devel': }! ! ! # Set up a PostgreSQL database named 'hello' ! # and user named 'hello_django' with a long passphrase! postgresql::server::db { 'hello':! user => 'hello_django',! password => postgresql_password('hello_django', 'xxxxxxxxxxxxx'),! } database.pp
  • 23. ADDING A USER package { ! 'sudo': ensure => present;! 'zsh': ensure => present;! 'git': ensure => present;! }! ! user { 'michal':! password => 'xxxxxxxxxxxxx',! groups => ['staff', 'sudo'],! ensure => 'present',! managehome => 'true',! shell => '/usr/bin/zsh',! require => Package['zsh'],! }! ! ssh_authorized_key{ 'michal@silver':! user => 'michal',! ensure => 'present', ! type => 'ssh-rsa', ! key => 'xxxxxxxxxxxxx', ! require => User['michal'],! } my_account.pp
  • 24. FEATURES • Store server configuration in text files (manifests)# • Automatically configure packages, user accounts, services, etc.# • Declarative language to describe machines# • Store configuration of multiple machines on a central Puppet master server# • Update configuration when manifest file changes http://puppetlabs.com
  • 25. MASTER OF PUPPETS Master Puppet Puppet Puppet Puppet
  • 35. FEATURES • Graphically manage packages, user accounts, services# • Install and configure server software# • Monitor server activity and log files# • Tweak and test settings# • Execute commands and access files through the browser# • Support for MySQL, PostgreSQL,Apache, PHP and many, many others http://webmin.com
  • 37. DEVOPSTOOLS FOR EVERYONE 1. Vagrant - create# 2. Puppet - configure# 3. Webmin - administer [email protected] DevCon 2014