Post on 21-Jul-2015
transcript
My first “dev” job
Hired to convert PSDs to
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
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
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”
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
Disable FTP Access!
# echo troy >> /etc/ftpuser
# echo andy >> /etc/ftpuser
# echo joe >> /etc/ftpuser
Better yet, disable FTP completely
Vagrant allows you to:
• Create a server• Configure a server• Delete a server
…over and over and over..
https://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
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
Testing Resources
https://leanpub.com/grumpy-testinghttps://leanpub.com/grumpy-phpunit
http://grumpy-learning.com
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
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"
Customize your shell
• Local IPs• Date• Current time
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• Current time
Red Text because this is
a remote machine
Automate Common Tasks
Alias long commands
Shell script sequential commands
Use cron to run your scripts at specific times
Create installers for your settings
Recap
Version Control everything you can
Create a process that works for you
Practice how you play
Test everything you can
Automate everything you can
Feedback!
https://joind.in/13966
Joe FergusonTwitter: @JoePFerguson
Email: joe@joeferguson.meFreenode: joepferguson
Contact Info: