zendcon 2015 - devops for small teams

Post on 15-Feb-2017

666 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

DevOps For Small TeamsJoe 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” jobHired 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 FergusonTwitter: @JoePFergusonEmail: joe@joeferguson.meFreenode: joepferguson

Contact Info:

top related