Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Vagrant for PHP Developers
Search
Erika Heidi
May 22, 2014
Programming
1.6k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vagrant for PHP Developers
As presented at NomadPHP, 22-05-2014
Erika Heidi
May 22, 2014
More Decks by Erika Heidi
See All by Erika Heidi
FreeCAD 101 Lightning Talk
erikaheidi
0
100
Learning Lab: WordPress
erikaheidi
0
190
Criando Container Runtimes mais Seguras com Wolfi
erikaheidi
0
250
Introducing Chainguard Images for Safer PHP Runtimes
erikaheidi
0
300
Automatizando documentação em PHP com Autodocs
erikaheidi
0
230
Building the World: The Story Behind Wolfi
erikaheidi
0
900
Hello Wolfi
erikaheidi
1
840
Container Images for the Cloud Native Era
erikaheidi
1
510
Creating Secure Container Images with apko
erikaheidi
0
790
Other Decks in Programming
See All in Programming
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
430
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
920
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
500
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
How to train your dragon (web standard)
notwaldorf
96
6.9k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Become a Pro
speakerdeck
PRO
31
6.3k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Utilizing Notion as your number one productivity tool
mfonobong
4
620
A Modern Web Designer's Workflow
chriscoyier
699
190k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Between Models and Reality
mayunak
4
500
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
Transcript
None
whoami • Brazilian, living in Amsterdam since 2012 • PHP
<independent> developer • Author of Vagrant Cookbook on LeanPub @erikaheidi
What to expect from this talk 1)Vagrant overview 2)What's New:
1.5 and 1.6 3)Provisioner Tasting: Ansible, Puppet and Chef 4)ProTips 5)Useful Resources
None
Why Vagrant?
“It works on my machine” - every developer, ever.
Why Vagrant? • Reproducible and portable development environment • Enables
easier code collaboration • Backend env tests / benchmark • Automation Tools learning and testing
None
Some Terms • Boxes • Provider / Provisioner • Host
/ Guest • Vagrantfile • Synced Folder
The simplest thing that does something Vagrant.configure("2") do |config| config.vm.box
= "hashicorp/precise64" config.vm.provision "shell", inline: "echo Hello World!" end
None
Commands • up • reload • provision • suspend •
resume • destroy [ --provision ] [ --provision ]
DEMO
Another Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.network :private_network,
ip: "192.168.33.101" config.vm.provision "ansible" do |ansible| ansible.playbook = "playbook.yml" end config.vm.synced_folder "./", "/vagrant", :nfs => true end
What's New
Recent new features Vagrant 1.5 • Vagrant Cloud / boxes
2.0 • Vagrant Share • Rsync • SMB Vagrant 1.6 • Global Status and Control • Windows as Guest • Docker Provider • Post-up Message
Vagrant Cloud (1.5)
Vagrant Share (1.5)
Post-up message (1.6)
Global status and control (1.6)
None
1. Ansible • Tasks, Playbooks, Roles • Tasks are defined
with YAML • 3rd most used • Modules Directory: Ansible Galaxy • Requires installation of Ansible in the Host
1.1 A Task - name: Install Nginx apt: pkg=nginx state=latest
1.1 A Task - name: Install Nginx apt: pkg=nginx state=latest
- name: Install PHP Packages apt: pkg={{ item }} state=latest with_items: - php5-fpm - php5-cli
1.2 A Playbook # playbook.yml --- - hosts: all sudo:
true tasks: - name: Update apt-cache apt: update_cache=yes - name: Install Nginx and php5-fpm apt: pkg={{ item }} state=latest with_items: - nginx - php5-fpm
1.3 A Role . ├── playbook.yml └── roles ├── init
│ └── tasks │ └── main.yml └── nginxphp ├── tasks │ └── main.yml └── templates └── vhost.tpl #playbook.yml --- - hosts: all sudo: true vars: doc_root: /vagrant/web roles: - init - nginxphp
1.4 Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision "ansible"
do |ansible| ansible.playbook = "playbook.yml" end end
None
2. Puppet (puppet-apply) • Resources, Manifests, Modules • Non-sequential execution
order • Custom language based on Ruby • 1st most used • Modules Directory: Puppet Forge
2.1 A Resource package { 'nginx': ensure => 'installed' }
2.1 A Resource package { 'nginx': ensure => 'installed' }
package { ['php5-fpm', 'php5-cli']: ensure => 'installed' }
2.2 A Manifest # manifests/default.pp exec { 'apt-get update': command
=> 'apt-get update' } package { ['nginx', 'php5-fpm']: ensure => 'installed', require => Exec['apt-get update'] }
2.3 A Module . ├── manifests │ └── default.pp └──
modules └── nginxphp ├── manifests │ └── init.pp └── templates └── vhost.erb # manifests/default.pp exec { 'apt-get update': command => 'apt-get update', before => Class['nginxphp'], } class { 'nginxphp': doc_root => '/vagrant/web', }
2.4 Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision :puppet
do |puppet| puppet.module_path = "modules" end end
None
3. Chef (chef_solo) • Resources, Recipes, Cookbooks • Resources defined
with Ruby • 2nd most used, 1st with Ruby devs • Modules Directory: Cookbooks • Complex but very powerful
3.1 A Resource apt_package "nginx" do action :install end
3.1 A Resource apt_package "nginx" do action :install end ["nginx",
"php5-fpm"].each do |p| apt_package p do action :install end end
3.2 A Recipe # cookbooks/main/recipes/default.rb execute "apt-get update" do command
"apt-get update" end ["nginx", "php5-fpm"].each do |p| apt_package p do action :install end end
3.3 A Cookbook . └── cookbooks ├── main │ └──
recipes │ └── default.rb └── nginxphp ├── recipes │ └── default.rb └── templates └── default └── vhost.erb # cookbooks/main/recipes/default.rb execute "apt-get update" do command "apt-get update" end include_recipe 'nginxphp'
3.4 Vagrantfile Vagrant.configure("2") do |config| config.vm.box = "hashicorp/precise64" config.vm.provision "chef_solo"
do |chef| chef.add_recipe "main" end end
None
None
6.1 Debugging • Unknown Vagrant error – Use VirtualBox /
Vmware GUI • Unknown Provisioner error – Increase provisioner verbosity • Not working as expected – Login, fix, automate
6.2 Sync Folder Performance • Synchronization has a cost •
Framework cache/logs – Too much writing operations on disk – We don't need this in our synced folder
None
None
None
Useful Resources
None
None
Examples on GitHub • Basic examples • Comparing Provisioners –
PHP5 + Nginx example https://github.com/erikaheidi/nomad-vagrant
Vagrant Cookbook Special discount coupon for NomadPHP http://bit.ly/vc-nomad
Questions?
erikaheidi.com/vagrant https://joind.in/11181 Vagrant Resources: Rate this talk: @erikaheidi Get in
Touch: