SlideShare a Scribd company logo
DevOps For Small Teams
Joe Ferguson
https://joind.in/15587
Who Am I?
Joe Ferguson
PHP Developer
Twitter: @JoePFerguson
Organizer of @MemphisPHP
@NomadPHP Lightning Talks
Passionate about Community
My first “dev” job
Hired to convert PSDs to HTML
My first “dev” job
Hired to convert PSDs to HTML
Ended up building / hacking at web
apps
My first “dev” job
Hired to convert PSDs to HTML
Ended up building / hacking at web apps
We had no DevOps (was it even a thing then?)
My first “dev” job
Hired to convert PSDs to HTML
Ended up building / hacking at web apps
We had no DevOps (was it even a thing then?)
We invested in metal
My first “dev” job
Hired to convert PSDs to HTML
Ended up building / hacking at web apps
We had no DevOps (was it even a thing then?)
We invested in metal
Just started using “the cloud”
My second dev job
Yay I'm not alone!
My second dev job
Yay I'm not alone!
I was still "the server person"
Yay I'm not alone!
I was still "the server person”
Scaling a team
We needed to scale up (and skill
up) our team
My second dev job
Scaling a team
Version control is NOT renaming files
Version control EVERYTHING
Teaching our team VCS
https://try.github.io
Teaching our team VCS
https://guides.github.com
Trial & Error is ok!
Scaling a team
Stop Editing In
Production!
No more edit
& uploading!
Everything
goes into
version control!
Disable FTP Access*!
# echo troy >> /etc/ftpuser
# echo andy >> /etc/ftpuser
# echo joe >> /etc/ftpuser
Better yet, disable FTP completely*
*If you can
Scaling a team
Development environments
MAMP, LAMP, WAMP, WAT?
Mac/Linux/Windows Apache MySQL PHP
These are all great tools
Do you deploy to
MAMP/WAMP?
Why develop on a
different configuration?
Catch those environment
bugs earlier
Remove the phrase
“…It works on my machine…”
From your team
Stop using WAMP/MAMP
and start using Vagrant!
Vagrant allows you to:
• Create a server
• Configure a server
• Delete a server
…over and over and over..
Not sure how to create a
Vagrant box?
PuPHPet.com
Guided path to create your own Vagrant
Supports common Distributions
Customize users, firewall rules, cron jobs
Add databases, virtual hosts
Supports Ruby, PHP, Python, NodeJS,
HHVM
Beanstalkd & RabbitMQ
Elastic Search & Apache Solr
PuPHPet.com
PuPHPet.com
Great for learning HOW to build boxes
Especially useful if you’d like to learn
Puppet
Other Provisioners
Shell
Chef - use existing Cookbooks
Docker - used if your app is in Docker
SaltStack
Vagrant Cookbook
https://leanpub.com/vagrantcookbook
Ansible for DevOps
https://leanpub.com/ansible-for-devops
Learning Budget
Learning Budget
Scaling a team
Test your code!
Testing was the hardest part for us.
The payoffs in catching regression bugs
and confidence in our deployments was
well worth it
Is your code testable?
If unit testing is hard, your code may not
have been written to be testable.
Testing Resources
http://grumpy-learning.com
Testing Resources
https://laracasts.com/collections/testing-in-php
Continuous Integration
Continuous Delivery
Continuous Integration
Frequently integrate code changes into the
existing code repository
Merging branches to master/production
Automated build tests to ensure issues found
quickly
Does not have to be deployed
Continuous Delivery
Produce valuable changes in code in short
cycles to be released at any time.
AKA: Continuous Deployment
Automated build tests to ensure issues
found quickly
Deployment happens on successful build
Which is right for you?
Your goal should be Continuous
Integration (at least!)
Strive for Continuous Delivery if it makes
sense
Applications with a live event component
may not be suited for Continuous
Delivery
There are a lot of CI
solutions out there
ServersForHackers.com
What is your process?
Create your workflow
Optimize your time
in the console
Work smarter not harder
Stop typing the same
commands
git status
git pull origin master
git branch —set-upstream-to=origin/master
vagrant global-status | grep running
redis-server /usr/local/etc/redis.conf
php -S localhost:8000
ssh svpernova@joeferguson.me -t screen -dR irc
gs
gpm
gsu
vgr
startredis
startphp
irc
Make use of aliases
alias gs=“git status”
alias gpm=“git pull origin master”
alias gsu=“git branch —set-upstream-to=origin/master”
alias vgr=“vagrant global-status | grep running”
alias startredis=“redis-server /usr/local/etc/redis.conf”
alias startphp=“php -S localhost:8000”
alias irc=“ssh svpernova@joeferguson.me -t screen -dR irc"
Use Screen for long
running processes
https://www.mattcutts.com/blog/a-quick-tutorial-on-screen/
Think of screen as a
detachable window that
contains your console
Screen Demo
Want more Power?
https://tmux.github.io
Bash isn’t the only shell!
http://ohmyz.sh
Uses zsh
180+ Plugins
700+ Contributors
140+ Themes
myZsh
Why do I use myzsh
over oh-my-zsh?
Why do I use myzsh
over oh-my-zsh?
Customize your shell
• Local IPs
• Date
Green Text
because this is
the local machine
• User
• Hostname
• Current Path
• Current time
Customize your shell
• User
• Hostname
• Current Path
• Current time
• Local IPs
• Date
Red Text
because this is
a remote machine
Customize your shell
Tab completion on steroids
+ Git branch info because we are in a repo
Tab Completion Demo
.zshrc
Automate Common Tasks
Alias long commands
Shell script sequential commands
Use cron to run your scripts at specific times
Create installers for your settings
Version Control Configs
Do NOT version control
your SSH keys!
Do NOT version control
your API keys!
Recap
Version Control everything you can
Create a process that works for your team
Practice how you play
Test everything you can
Automate everything you can
Feedback!
https://joind.in/15587
Joe Ferguson
Twitter: @JoePFerguson
Email: joe@joeferguson.me
Freenode: joepferguson
Contact Info:

More Related Content

PDF
Web Leaps Forward
PDF
ZendCon 2015 - Laravel Forge: Hello World to Hello Production
PPTX
Zendcon magento101
PDF
perlbrew yapcasia 2010
PPTX
Zendcon scaling magento
KEY
Perlbrew
PDF
Madison PHP 2015 - DevOps For Small Teams
PDF
Webpack & React Performance in 16+ Steps
Web Leaps Forward
ZendCon 2015 - Laravel Forge: Hello World to Hello Production
Zendcon magento101
perlbrew yapcasia 2010
Zendcon scaling magento
Perlbrew
Madison PHP 2015 - DevOps For Small Teams
Webpack & React Performance in 16+ Steps

What's hot (20)

PDF
Advanced front-end automation with npm scripts
PPT
Building dynamic websites with Mod perl and apache
PDF
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
PDF
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
KEY
Web frameworks don't matter
PDF
"13 ways to run web applications on the Internet" Andrii Shumada
PDF
Rebooting a Cloud
PDF
The Modern Developer Toolbox
PDF
Converting Your Dev Environment to a Docker Stack - php[world]
PDF
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
PDF
Converting Your Dev Environment to a Docker Stack - Cascadia
PPTX
JS digest. Decemebr 2017
PDF
Automating your workflow with Gulp.js
PDF
Improve your Java Environment with Docker
PDF
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
PDF
Vagrant Binding JayDay 2013
KEY
Dev ops for developers
PPTX
Anthony Somerset - Site Speed = Success!
PDF
DevOps tools for everyone - Vagrant, Puppet and Webmin
PDF
Infrastructure as Data with Ansible
Advanced front-end automation with npm scripts
Building dynamic websites with Mod perl and apache
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Web frameworks don't matter
"13 ways to run web applications on the Internet" Andrii Shumada
Rebooting a Cloud
The Modern Developer Toolbox
Converting Your Dev Environment to a Docker Stack - php[world]
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...
Converting Your Dev Environment to a Docker Stack - Cascadia
JS digest. Decemebr 2017
Automating your workflow with Gulp.js
Improve your Java Environment with Docker
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Vagrant Binding JayDay 2013
Dev ops for developers
Anthony Somerset - Site Speed = Success!
DevOps tools for everyone - Vagrant, Puppet and Webmin
Infrastructure as Data with Ansible
Ad

Viewers also liked (11)

PDF
Revisiting Backlog Processing with MPLP
DOCX
taller#2 las imágenes de las y iglesia
DOCX
Penjelasan waktu shalat
DOCX
Davids resume may 1, 2016 copy 5 finished
DOC
THE POWER OF SOUND AND IMAGES SAFEGUARDING SONG AND DANCE TRADITIONS IN ZIMBABWE
PDF
12261 BB_infographic_5_HR
PDF
Mobile Configuration System Overview
PDF
Ritesh LOR
PPT
Game design
PPTX
A primer on nonprofit dashboards
DOCX
44. do'a imam as ketika masuk bulan ramadhan
Revisiting Backlog Processing with MPLP
taller#2 las imágenes de las y iglesia
Penjelasan waktu shalat
Davids resume may 1, 2016 copy 5 finished
THE POWER OF SOUND AND IMAGES SAFEGUARDING SONG AND DANCE TRADITIONS IN ZIMBABWE
12261 BB_infographic_5_HR
Mobile Configuration System Overview
Ritesh LOR
Game design
A primer on nonprofit dashboards
44. do'a imam as ketika masuk bulan ramadhan
Ad

Similar to ZendCon 2015 - DevOps for Small Teams (20)

PDF
Midwest PHP 2017 DevOps For Small team
PDF
DevOps For Small Teams
PDF
Laravel Forge: Hello World to Hello Production
PDF
Laravel Forge: Hello World to Hello Production
PPTX
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
PDF
php[world] 2015 Laravel 5.1: From Homestead to the Cloud
PPTX
WordPress automation and CI
PPTX
A Fabric/Puppet Build/Deploy System
PDF
Why we choose Symfony2
PDF
NLUUG Spring 2012 - OpenShift Primer
PDF
WordCamp Atlanta - April 15 2018 - dev team workflow and processes with word...
PDF
The Secrets of The FullStack Ninja - Part A - Session I
PDF
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
PDF
Virtualize and automate your development environment for fun and profit
PDF
Ganeti Web Manager: Cluster Management Made Simple
PDF
Configuration Management with Puppet
ODP
Deployment talk dpc 13
PDF
Convert Your Dev Environment to a Docker Stack - PHP Tek 2025.pdf
PDF
All the Laravel things: up and running to making $$
PDF
Slim PHP when you don't need the kitchen sink
Midwest PHP 2017 DevOps For Small team
DevOps For Small Teams
Laravel Forge: Hello World to Hello Production
Laravel Forge: Hello World to Hello Production
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
php[world] 2015 Laravel 5.1: From Homestead to the Cloud
WordPress automation and CI
A Fabric/Puppet Build/Deploy System
Why we choose Symfony2
NLUUG Spring 2012 - OpenShift Primer
WordCamp Atlanta - April 15 2018 - dev team workflow and processes with word...
The Secrets of The FullStack Ninja - Part A - Session I
Adopt DevOps philosophy on your Symfony projects (Symfony Live 2011)
Virtualize and automate your development environment for fun and profit
Ganeti Web Manager: Cluster Management Made Simple
Configuration Management with Puppet
Deployment talk dpc 13
Convert Your Dev Environment to a Docker Stack - PHP Tek 2025.pdf
All the Laravel things: up and running to making $$
Slim PHP when you don't need the kitchen sink

More from Joe Ferguson (20)

PDF
Modern infrastructure as code with ansible cake fest 2021
PDF
Modern infrastructure as code with ansible PyTN
PDF
Throwing Laravel into your Legacy App™
PDF
DevSpace Conf 2017 - Making sense of the provisioning circus
PDF
Release and-dependency-management memphis python
PDF
Composer at Scale, Release and Dependency Management
PDF
Put an end to regression with codeception testing
PDF
All the Laravel Things – Up & Running to Making $$
PDF
Console Apps: php artisan forthe:win
PDF
Console Apps: php artisan forthe:win
PDF
So You Just Inherited a $Legacy Application… NomadPHP July 2016
PDF
So You Just Inherited a $Legacy Application...
PDF
MidwestPHP 2016 - Adventures in Laravel 5
PDF
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
PDF
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
PDF
php[world] 2015 Training - Laravel from the Ground Up
PDF
Secure Form Processing and Protection - Devspace 2015
PDF
Acceptance & Functional Testing with Codeception - Devspace 2015
PDF
Laravel 5 New Features
PDF
Continuous Integration: How I stopped guessing if that merge was bad
Modern infrastructure as code with ansible cake fest 2021
Modern infrastructure as code with ansible PyTN
Throwing Laravel into your Legacy App™
DevSpace Conf 2017 - Making sense of the provisioning circus
Release and-dependency-management memphis python
Composer at Scale, Release and Dependency Management
Put an end to regression with codeception testing
All the Laravel Things – Up & Running to Making $$
Console Apps: php artisan forthe:win
Console Apps: php artisan forthe:win
So You Just Inherited a $Legacy Application… NomadPHP July 2016
So You Just Inherited a $Legacy Application...
MidwestPHP 2016 - Adventures in Laravel 5
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Adventures in Laravel 5 SunshinePHP 2016 Tutorial
php[world] 2015 Training - Laravel from the Ground Up
Secure Form Processing and Protection - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015
Laravel 5 New Features
Continuous Integration: How I stopped guessing if that merge was bad

Recently uploaded (20)

PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
cuic standard and advanced reporting.pdf
PDF
Modernizing your data center with Dell and AMD
PDF
Approach and Philosophy of On baking technology
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Encapsulation_ Review paper, used for researhc scholars
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
NewMind AI Weekly Chronicles - August'25 Week I
Unlocking AI with Model Context Protocol (MCP)
Advanced methodologies resolving dimensionality complications for autism neur...
“AI and Expert System Decision Support & Business Intelligence Systems”
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Digital-Transformation-Roadmap-for-Companies.pptx
Understanding_Digital_Forensics_Presentation.pptx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
20250228 LYD VKU AI Blended-Learning.pptx
cuic standard and advanced reporting.pdf
Modernizing your data center with Dell and AMD
Approach and Philosophy of On baking technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Spectral efficient network and resource selection model in 5G networks
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Electronic commerce courselecture one. Pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Encapsulation_ Review paper, used for researhc scholars

ZendCon 2015 - DevOps for Small Teams