Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
73
Learning Lab: WordPress
erikaheidi
0
160
Criando Container Runtimes mais Seguras com Wolfi
erikaheidi
0
230
Introducing Chainguard Images for Safer PHP Runtimes
erikaheidi
0
280
Automatizando documentação em PHP com Autodocs
erikaheidi
0
210
Building the World: The Story Behind Wolfi
erikaheidi
0
870
Hello Wolfi
erikaheidi
1
820
Container Images for the Cloud Native Era
erikaheidi
1
480
Creating Secure Container Images with apko
erikaheidi
0
700
Other Decks in Programming
See All in Programming
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
170
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
180
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
120
AIエージェントで 変わるAndroid開発環境
takahirom
2
720
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
350
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.2k
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
5.4k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
170
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
240
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.3k
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
220
今さら聞けない .NET CLI
htkym
0
120
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
260
Rails Girls Zürich Keynote
gr2m
96
14k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Producing Creativity
orderedlist
PRO
348
40k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Are puppies a ranking factor?
jonoalderson
1
3.7k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
350
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
Speed Design
sergeychernyshev
33
1.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
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: