The Modern Developer Toolbox

115
The Modern Developer Toolbox Pablo Godel @pgodel https://joined.in/11798 Photo by https://www.flickr.com/photos/zergev/

Transcript of The Modern Developer Toolbox

Page 1: The Modern Developer Toolbox

The Modern Developer Toolbox

Pablo Godel @pgodel https://joined.in/11798

Photo by https://www.flickr.com/photos/zergev/

Page 2: The Modern Developer Toolbox

Hi, I am Pablo.

Page 3: The Modern Developer Toolbox

Hi, I am Pablo. !

@pgodel

Page 4: The Modern Developer Toolbox
Page 5: The Modern Developer Toolbox

The Modern Developer Toolbox

Modern?

Page 6: The Modern Developer Toolbox
Page 7: The Modern Developer Toolbox

The Modern Developer Toolbox

[root@prod] # vi index.php

Page 8: The Modern Developer Toolbox

The Modern Developer Toolbox

Never stop !improving

Page 9: The Modern Developer Toolbox

The Modern Developer Toolbox

The Toolbox

Page 10: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment

Page 11: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing

Page 12: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging

Page 13: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling

Page 14: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling !

Deployment

Page 15: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling !

Deployment !

Logging

Page 16: The Modern Developer Toolbox

The Modern Developer Toolbox

Development environment !

Testing !

Debugging !

Profiling !

Deployment !

Logging !

Monitoring

Page 17: The Modern Developer Toolbox

The Modern Developer Toolbox

Development Environment

Page 18: The Modern Developer Toolbox

Development Environment

Everything starts with a great development environment

Page 19: The Modern Developer Toolbox

Choosing an OS

Development Environment

Page 20: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #1

Development Environment

Page 21: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #1: Stay close to Production

Development Environment

Page 22: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #2

Development Environment

Page 23: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #2: Ditch Windows

Development Environment

Page 24: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #3

Development Environment

Page 25: The Modern Developer Toolbox

The Modern Developer Toolbox

Rule #3: Don’t forget Rule #2

Development Environment

Page 26: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

Page 27: The Modern Developer Toolbox

The Modern Developer Toolbox

Automate your setup

Development Environment

Page 28: The Modern Developer Toolbox

The Modern Developer Toolbox

Automate your setup !

#1 Store your dot-files in Git/GitHub

Development Environment

Page 29: The Modern Developer Toolbox

The Modern Developer Toolbox

https://github.com/pgodel/dotfiles

Dot files .profile / .bash_profile / .bashrc .gitconfig .gitignores.ssh/config

https://github.com/everzet/dotfiles

Development Environment

Page 30: The Modern Developer Toolbox

The Modern Developer Toolbox

Automate your setup !

#2 Automate your software installation

Development Environment

Page 31: The Modern Developer Toolbox

The Modern Developer Toolbox

Homebrew!!

• hhvm • wget • git • tmux • ssh-copy-id • brew-cask • ansible

Development Environment

Page 32: The Modern Developer Toolbox

The Modern Developer Toolbox

Even .dmg’s! !

!

• google-chrome • vagrant • virtualbox • iterm2 • alfred • phpstorm

Development Environment

$ brew cask install …

!https://github.com/caskroom/homebrew-cask

Page 33: The Modern Developer Toolbox

The Modern Developer Toolbox

Run Linux natively / locally !

• REMI repo for CentOS • PPAs for Ubuntu / Debian

Development Environment

Installing PHP

Page 34: The Modern Developer Toolbox

The Modern Developer Toolbox

Run Linux on VPS / remote !

• REMI repo for CentOS • PPAs for Ubuntu / Debian

Development Environment

Installing PHP

Page 35: The Modern Developer Toolbox

The Modern Developer Toolbox

Mac OSX !

• MAMP • Liip PHP installer

Development Environment

Installing PHP

Page 36: The Modern Developer Toolbox

The Modern Developer Toolbox

Virtual Machine • VirtualBox / Parallels / VMware • Vagrant • Docker

Development Environment

Installing PHP

Page 37: The Modern Developer Toolbox

The Modern Developer Toolbox

PHARS!!

• Composer • PHPUnit • behat • WP-CLI • versionscan

Development Environment

Page 38: The Modern Developer Toolbox

The Modern Developer Toolbox

Vagrant!!

• PuPHPet • Phansible

Development Environment

Page 39: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

VagrantHost

Vagrant

VM VM VM

Web Server

DB Server

App Server

Page 40: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

CVM

Web Server

DB Server

App Server

C C

Page 41: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Page 42: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Page 43: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Host

C

VM

Web Server

DB Server

App Server

C C

Page 44: The Modern Developer Toolbox

The Modern Developer ToolboxDevelopment Environment

DockerHost

Docker client

C

VM

Web Server

DB Server

App Server

C C

Host

C

VM

Web Server

DB Server

App Server

C C

Host

C

Web Server

DB Server

App Server

C C

Docker Kernel

Page 45: The Modern Developer Toolbox

The Modern Developer Toolbox

$ ansible-playbook -i inventories/dev \ playbook.yml -v -K

https://github.com/pgodel/ansible-local-dev

Development Environment

Page 46: The Modern Developer Toolbox

The Modern Developer Toolbox

Use the right Editor/IDE for you

Development Environment

Page 47: The Modern Developer Toolbox

The Modern Developer Toolbox

Choose the right Editor/IDE for you!!

• PHPStorm • Zend Studio • TextMate • Vim

Development Environment

Page 48: The Modern Developer Toolbox

The Modern Developer Toolbox

Choose the right Editor/IDE for you!!

• PHPStorm!• Zend Studio • TextMate • Vim

Development Environment

Page 49: The Modern Developer Toolbox

The Modern Developer Toolbox

Choose the right Editor/IDE for you!!

• PHPStorm!• Fast • Syntax highlighting with PHP 5.6 • Git diffs and other actions • Breakpoints • and much more!

!

!

Development Environment

Page 50: The Modern Developer Toolbox

Setting up SSH

$ ssh-keygen -t dsa ~/.ssh/id_dsa.pub !

$ ssh-copy-id user@remote-host ~/.ssh/authorized_keys ~/.ssh/authorized_keys2 !

$ ssh-add

Development Environment

Page 51: The Modern Developer Toolbox

Host * ForwardAgent yes Port 22123 !

Host gh HostName github.com Port 22 PreferredAuthentications publickey IdentityFile ~/.ssh/me_rsa

Development Environment

Setting up SSH

~/.ssh/config

Page 52: The Modern Developer Toolbox

Virtual Document RootUseCanonicalName Off !VirtualDocumentRoot /var/www/vhosts/%0/web !<Location /var/www/vhosts> AllowOverride All Options +FollowSymLinks </Location>

example.com => /var/www/vhosts/example.com/webexample2.com => /var/www/vhosts/example2.com/web

Development Environment

Page 53: The Modern Developer Toolbox

The Modern Developer Toolbox

Testing

Page 54: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit

Page 55: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat

Page 56: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l

Page 57: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins

Page 58: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins • Travis CI

!

Page 59: The Modern Developer Toolbox

Testing!

!

• Unit testing with PHPUnit • BDD with Behat • Git hooks + php -l • Jenkins • Travis CI • JoliCI

Page 60: The Modern Developer Toolbox

!

!

• phpmd / PHP Depend • PhpMetrics • SensioLabs Insight • Scrutinizer

Testing

Page 61: The Modern Developer Toolbox

The Modern Developer Toolbox

Debugging

Page 62: The Modern Developer Toolbox

print_r($data);

Debugging

Page 63: The Modern Developer Toolbox

LadyBug<?php $var = array( array( 'name' => 'Raul', 'age' => 29 ), array( 'name' => 'John', 'age' => 27 ) ); !ladybug_dump($var)

Debugging

Page 64: The Modern Developer Toolbox

LadyBug

Debugging

Page 65: The Modern Developer Toolbox

XDebug + PHPStorm

Debugging

Page 66: The Modern Developer Toolbox

The Modern Developer Toolbox

Debug CLI commands with PHPStorm !

Development Environment PRO TIP

$ export \ XDEBUG_CONFIG=“idekey=PHPSTORM"

Page 67: The Modern Developer Toolbox

Symfony Developer Toolbar

Debugging

Page 68: The Modern Developer Toolbox

Zend Studio + Zend Server + Z-RayDebugging

Page 69: The Modern Developer Toolbox

The Modern Developer Toolbox

Profiling

Page 70: The Modern Developer Toolbox

Profiling!

!

XDebug

Page 71: The Modern Developer Toolbox

Profiling!

!

XHProf + XHProf.io

Page 72: The Modern Developer Toolbox

Profiling!

Commercial options !

• Zend Server • SensioLabs Profiler (coming soon)

Page 73: The Modern Developer Toolbox

The Modern Developer Toolbox

Deployment

Page 74: The Modern Developer Toolbox

Deployment

• Capistrano (Ruby) / Capifony • Fabric (Python) • Idephix (PHP) • Magellanes (PHP) • Deployer (PHP) • Laravel / envoy (PHP) • Rocketeer (PHP) • Ansible (YAML)

Page 75: The Modern Developer Toolbox

Common steps

Deployment

Page 76: The Modern Developer Toolbox

Deployment!

!

• Define hosts

Page 77: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions

Page 78: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process

Page 79: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process • Safe operation

Page 80: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process • Safe operation • Migrations

Page 81: The Modern Developer Toolbox

Deployment!

!

• Define hosts • Define tasks / actions • Run process • Safe operation • Migrations • Rollbacks

Page 82: The Modern Developer Toolbox

Deploying with

Deployment

Page 83: The Modern Developer Toolbox

Deployment with Ansible!

!

Define hosts[webservers] foo.example.com bar.example.comwww[01:50].example.com ![dbservers] one.example.com two.example.com three.example.com

Page 84: The Modern Developer Toolbox

Deployment with Ansible!

!

Define tasks / actions--- - hosts: webservers vars: http_port: 80 max_clients: 200 remote_user: root tasks: - name: ensure apache is at the latest version yum: pkg=httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf notify: - restart apache - name: ensure apache is running service: name=httpd state=started

Page 85: The Modern Developer Toolbox

Deployment with Ansible!

!

Define tasks / actions- hosts: webservers roles: - { role: servergrove.symfony2, symfony2_project_root: /var/www/vhosts/example.com/, symfony2_project_name: demo, symfony2_project_branch: master , symfony2_project_release: 1 }

Page 86: The Modern Developer Toolbox

Deployment with Ansible!

!

Run process

$ ansible-playbook -i inventories/servers \ playbook.yml -v

Page 87: The Modern Developer Toolbox

Deployment with Ansible!

!

Run process

Page 88: The Modern Developer Toolbox

Effing Package Management

https://github.com/jordansissel/fpm

Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity.

fpm -s dir -t rpm -n "webapp" -v 1.0 /var/www/webapp !fpm -s dir -t deb -a all -n webapp -v 1.0 /etc/apache2/conf.d/my.conf /var/www/webapp

Deployment

Page 89: The Modern Developer Toolbox

The Modern Developer Toolbox

Logging

Page 90: The Modern Developer Toolbox

tail -f /var/log/*

Logging

Page 91: The Modern Developer Toolbox

tail -f /var/log/* | grep “Fatal error”

Logging

Page 92: The Modern Developer Toolbox

Logging

App / Logstash

Redis Logstash filter/processor

ElasticSearch Kibana

App / Logstash App / Logstash

Logstash + ElasticSearch + Kibana

Page 93: The Modern Developer Toolbox

Monolog

Logging

use Monolog\Logger; use Monolog\Handler\StreamHandler; !// create a log channel $log = new Logger('name'); $log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); !// add records to the log $log->addWarning('Foo'); $log->addError('Bar');

Page 94: The Modern Developer Toolbox

Logging

!

• Rotates logs • Syslog / AMQP • Email / Chat servers • Redis / MongoDB / ElasticSearch • NullHandler • FingersCrossedHandler

Monolog

Page 95: The Modern Developer Toolbox

Logstash

Logging

input { file { path => “/var/log/apache2/access_log” } } output { elasticsearch { host => localhost } }

Page 96: The Modern Developer Toolbox

Kibana

Logging

Page 97: The Modern Developer Toolbox

The Modern Developer Toolbox

Monitoring

Page 98: The Modern Developer Toolbox

Monitoring

Measure everything!

Page 99: The Modern Developer Toolbox

Monitoring

App

StatsD Graphite

Grafana

App App

StatsD + Graphite + Grafana

Page 100: The Modern Developer Toolbox

StatsD + liuggio/statsd-php-client

$ composer require liuggio/statsd-php-client:dev-master

Monitoring

Page 101: The Modern Developer Toolbox

$sender = new SocketSender(/*'localhost', 8126, 'udp'*/); !$client = new StatsdClient($sender); $factory = new StatsdDataFactory('\Liuggio\StatsdClient\Entity\StatsdData'); !// create the data with the factory $data[] = $factory->timing('usageTime', 100); $data[] = $factory->increment('visitor'); $data[] = $factory->decrement('click'); $data[] = $factory->gauge('gaugor', 333); $data[] = $factory->set('uniques', 765); !// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 102: The Modern Developer Toolbox

$data[] = $factory->timing('usageTime', 100);!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 103: The Modern Developer Toolbox

$data[] = $factory->increment('visitor');!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 104: The Modern Developer Toolbox

$data[] = $factory->decrement('click');!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 105: The Modern Developer Toolbox

$data[] = $factory->gauge('gaugor', 333);!!

// send the data as array or directly as object $client->send($data);

Monitoring

StatsD + liuggio/statsd-php-client

Page 106: The Modern Developer Toolbox

Graphite

Monitoring

Page 107: The Modern Developer Toolbox

Graphite

Monitoring

Page 108: The Modern Developer Toolbox

Grafana

Monitoring

Page 109: The Modern Developer Toolbox

<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .your_domain.com </Location> !ExtendedStatus On

Apache Requests

Monitoring

Page 110: The Modern Developer Toolbox

Apache Requests

Monitoring

Page 111: The Modern Developer Toolbox

MonitoringCPU / Memory / IOtop

Page 112: The Modern Developer Toolbox

Monitoring

IOiotop

Page 113: The Modern Developer Toolbox

The Modern Developer Toolbox

https://www.flickr.com/photos/jaquiza

Page 114: The Modern Developer Toolbox

The Modern Developer Toolbox

Questions!

Page 115: The Modern Developer Toolbox

The Modern Developer Toolbox

!

!

!

!

!

!

https://joind.in/11798 http://slideshare.net/pgodel

@pgodel

Thank you! Rate me please!