Declare independence from your it department sysadmin skills for symfony developers

5,663 views
5,544 views

Published on

A Symfony/web developer is not complete without knowing server administration. When looking for a job, it is quite likely that you will be required to know about systtem administration.

Published in: Technology, Business
1 Comment
4 Likes
Statistics
Notes
  • Hi Pablo.
    I like your slides about this important subject.

    Some of the subjects in your slides are really interesting and I could to know some of the current technologies.

    Greetings from Ecuador
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
5,663
On SlideShare
0
From Embeds
0
Number of Embeds
157
Actions
Shares
0
Downloads
46
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Declare independence from your it department sysadmin skills for symfony developers

  1. 1. Declare Independence from your IT department Sysadmin skills for Symfony developers June 8, 2012 - Symfony Live Paris Pablo Godel @pgodelFriday, June 8, 2012
  2. 2. Agenda - Why SysAdmin Skills - Introduction to LAMP - Hosting options - Linux distributions - Installing PHP options - Deploying PHP - Various production tips - Monitoring - BackupsFriday, June 8, 2012
  3. 3. Who Am I? ⁃ Born in Argentina, living in the US since 1999 ⁃ PHP & Symfony developer ⁃ Founder of the original PHP mailing list in spanish ⁃ Master of the parrillaFriday, June 8, 2012
  4. 4. Who Am I? ⁃ Born in Argentina, living in the US since 1999 ⁃ PHP & Symfony developer ⁃ Founder of the original PHP mailing list in spanish ⁃ Master of the parrillaFriday, June 8, 2012
  5. 5. Friday, June 8, 2012
  6. 6. ServerGrove! ⁃ Founded ServerGrove Networks in 2005 ⁃ Provider of web hosting specialized in PHP, Symfony, ZendFramework, and others ⁃ Now with servers in Europe (and USA) ⁃ Mongohosting.com under beta!Friday, June 8, 2012
  7. 7. Community is our teacher ⁃ Very active open source supporter through code contributions and usergroups/conference sponsoringFriday, June 8, 2012
  8. 8. Who needs them? Sysadmin SkillsFriday, June 8, 2012
  9. 9. Text IT is busy / Different PrioritiesFriday, June 8, 2012
  10. 10. !Rocket ScienceFriday, June 8, 2012
  11. 11. Lack of controlFriday, June 8, 2012
  12. 12. Less downtimeFriday, June 8, 2012
  13. 13. Better PerformanceFriday, June 8, 2012
  14. 14. What do you prefer?Friday, June 8, 2012
  15. 15. Or this?Friday, June 8, 2012
  16. 16. I     s. I ’   s  L. E     Cs ,        . An example...Friday, June 8, 2012
  17. 17. What is LAMPFriday, June 8, 2012
  18. 18. Friday, June 8, 2012
  19. 19. Friday, June 8, 2012
  20. 20. Friday, June 8, 2012 LAMP
  21. 21. Friday, June 8, 2012 LAMP
  22. 22. Friday, June 8, 2012 LAMP
  23. 23. Scott BealeFriday, June 8, 2012 LAMP
  24. 24. Friday, June 8, 2012 LNMP
  25. 25. Friday, June 8, 2012 LAMP
  26. 26. Friday, June 8, 2012 LAPP
  27. 27. Friday, June 8, 2012 LANMMPP
  28. 28. Why? LANMMPPFriday, June 8, 2012
  29. 29. Why LANMMPP ProvenFriday, June 8, 2012
  30. 30. Why LANMMPP StableFriday, June 8, 2012
  31. 31. Why LANMMPP SecureFriday, June 8, 2012
  32. 32. Why LANMMPP FreeFriday, June 8, 2012
  33. 33. Why LANMMPP Free*Friday, June 8, 2012
  34. 34. Why LANMMPP InexpensiveFriday, June 8, 2012
  35. 35. Why LANMMPP Easily AvailableFriday, June 8, 2012
  36. 36. Hosting OptionsFriday, June 8, 2012
  37. 37. Hosting Options Shared Hosting + - - Inexpensive - Shared resources - Widely available - No/Limited Shell - Easy to use - Many restrictions - No maintenance - No control - No updates - Fixed versions - Instant provisioning - Multitude of CPs - DNS/Email servicesFriday, June 8, 2012
  38. 38. Hosting Options Dedicated Servers + - - Full control - Hard to plan - No sharing - Software updates - Best performance - SysAdmin skills - Software / Hardware - Expensive to start to specs - Parts replacements - Control Panel licensesFriday, June 8, 2012
  39. 39. Hosting Options Virtual Servers / VPS - - Shared resources - Software updates - SysAdmin skills - Limited/No CP - Lack of emailFriday, June 8, 2012
  40. 40. Hosting Options Virtual Servers / VPS + + - Inexpensive - Custom configurations - Widely available - Snapshots - Choice of OS - Multiple Envs - Root access - Full shell - Fast provisioning - Custom softwareFriday, June 8, 2012
  41. 41. Hosting Options Cloud Hosting + - Depends on implementationFriday, June 8, 2012
  42. 42. Hosting Options Cloud Hosting Some are a shared hosting with a fancy new nameFriday, June 8, 2012
  43. 43. Hosting Options Cloud Hosting Some are a shared hosting with a fancy new name Others let you start small and scale easilyFriday, June 8, 2012
  44. 44. Hosting Options Cloud Hosting Some are a shared hosting with a fancy new name Others let you start small and scale easily Gets really expensive at scaleFriday, June 8, 2012
  45. 45. Hosting Options Cloud Hosting Most suffer from some of the shared hosting problems: - vendor lock-in - lack of control - high learning curve - limited environmentFriday, June 8, 2012
  46. 46. Hosting Options Which one to choose?Friday, June 8, 2012
  47. 47. Hosting Options Which one to choose? IT DEPENDSFriday, June 8, 2012
  48. 48. Linux DistributionsFriday, June 8, 2012
  49. 49. Distributions RedHat based - Fedora - RedHat Enterprise Linux (RHEL) - CentOS - Scientific LinuxFriday, June 8, 2012
  50. 50. Distributions Debian based - Debian - UbuntuFriday, June 8, 2012
  51. 51. Distributions Others - Gentoo - Slackware - OpenSuse - Archlinux - any many many more! http://distrowatch.com/ http://en.wikipedia.org/wiki/Linux_distributionFriday, June 8, 2012
  52. 52. Distributions Key differences - Configuration files - Package Manager - Managing Services - Software versions - UpdatesFriday, June 8, 2012
  53. 53. Distributions Key differences - Configuration files CentOS /etc/sysconfig/network-scripts/ifcfg-eth0 Ubuntu /etc/network/interfacesFriday, June 8, 2012
  54. 54. Distributions Key differences - Package Manager CentOS yum install php-cli Ubuntu apt-get install php5Friday, June 8, 2012
  55. 55. Distributions Key differences - Package Manager CentOS yum search php-cli Ubuntu apt-cache search phpFriday, June 8, 2012
  56. 56. Distributions Key differences - Managing Services CentOS service restart httpd chkconfig --list httpd chkconfig httpd on Ubuntu service restart apache2 sudo update-rc.d apache2 enableFriday, June 8, 2012
  57. 57. Distributions Key differences - Software versions CentOS httpd-2.2.3 Ubuntu apache-2.2.17Friday, June 8, 2012
  58. 58. Distributions Key differences - Updates CentOS 5.x PHP 5.1.6 Ubuntu 11 PHP 5.3.5Friday, June 8, 2012
  59. 59. Distributions Key similarities - Based on Linux Kernel - Screwed up or ancient PHP - Lack of PHP extensionsFriday, June 8, 2012
  60. 60. Distributions Which one to choose? IT DEPENDSFriday, June 8, 2012
  61. 61. Distributions Which one to choose? - Best feeling - Previous experience - Workplace selection - Coworker / friend knowledgeFriday, June 8, 2012
  62. 62. Distributions Test Drive Virtual Machines: - VirtualBox - Parallels - VMware - VPSFriday, June 8, 2012
  63. 63. Installing PHPFriday, June 8, 2012
  64. 64. Installing PHP CentOS yum install php php-cli yum install php-libxmlFriday, June 8, 2012
  65. 65. Installing PHP CentOS Third Party Repositories - Remi RPM http://blog.famillecollet.com/ - Webtatic http://www.webtatic.com/ - ServerGrove: PHP 5.3.13 / 5.4.3 (always latest) http://repos.servergrove.comFriday, June 8, 2012
  66. 66. Installing PHP CentOS Third Party Repositories cd /etc/yum.repos.d/ wget http://repos.servergrove.com/servergrove-centos-5/ servergrove-centos-5.repo yum install php53 # or php54Friday, June 8, 2012
  67. 67. Installing PHP Ubuntu apt-get install php5 libapache2-mod-php5 apt-get install php5-libxmlFriday, June 8, 2012
  68. 68. Installing PHP Ubuntu Third Party Repositories PHP 5.3.13 / 5.4.3 - Dotdeb: http://www.dotdeb.org/ - ServerGrove: (always latest) http://repos.servergrove.comFriday, June 8, 2012
  69. 69. Installing PHP Ubuntu Third Party Repositories echo “deb http://repos.servergrove.com/servergrove-ubuntu- natty natty main” >> /etc/apt/sources.list.d/servergrove.list apt-get install php53 # or php54Friday, June 8, 2012
  70. 70. Installing PHP From Source wget http://us2.php.net/get/php-5.4.3.tar.bz2/from/ www.php.net/mirror tar jxvf php-5.4.3.tar.bz2 cd php-5.4.3 ./configure make && make installFriday, June 8, 2012
  71. 71. Installing PHP Recompiling php -i |grep configure ./configure --with-apxs2=/usr/sbin/apxs --prefix=/usr/local/ php53 --with-config-file-scan-dir=/etc/php53/conf.d -- enable-bcmath --enable-ctype --enable-exif --enable- mbstring --enable-ftp --enable-intl --enable-sockets -- enable-sysvmsg --enable-pcntl --with-bz2 --with-curl -- with-gettext --with-gd --enable-gd-native-ttf --enable-exif -- with-freetype-dir=/usr --with-jpeg-dir=/usr --with-t1lib=/usr --with-mcrypt --with-openssl --with-kerberos --with-iconv --with-xsl --with-xmlrpc --with-zlib --with-mysql=mysqlnd -- with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd make && make installFriday, June 8, 2012
  72. 72. Installing PHP Compiling for Apache ./configure --with-apxs2=/usr/sbin/apxs make && make installFriday, June 8, 2012
  73. 73. Installing PHPCompiling for Nginx / PHP-FPM ./configure --enable-fpm make && make installFriday, June 8, 2012
  74. 74. Installing PHP Compiling extension ./configure --with-curl --enable-ftp make && make installFriday, June 8, 2012
  75. 75. Installing PHP Compiling extension (dynamic) cd ext/curl phpize ./configure make && make install echo “extension=curl.so” >> php.iniFriday, June 8, 2012
  76. 76. Installing PHP Compiling extension http://pecl.php.net/Friday, June 8, 2012
  77. 77. Installing PHP Compiling extension (PECL) pecl install apc # or pecl download apc tar zxvf APC-3.1.9.tgz cd APC-3.19 phpize ./configure make && make install echo “extension=apc.so” >> php.iniFriday, June 8, 2012
  78. 78. Installing PHP Automate! - Chef - Puppet - ...Friday, June 8, 2012
  79. 79. Installing PHP Configuration Default location /usr/local/lib/php.ini Other common locations /etc/php/php.ini /etc/php5/cli/php.ini /etc/php5/apache2/php.iniFriday, June 8, 2012
  80. 80. Installing PHP Configuration php -i | grep php.ini Configuration File (php.ini) Path => /usr/local/php5/lib Loaded Configuration File => /usr/local/php5-20110426-093151/ lib/php.ini Scan this dir for additional .ini files => /usr/local/php5/php.d Additional .ini files parsed => /usr/local/php5/php.d/10- extension_dir.ini,Friday, June 8, 2012
  81. 81. Installing PHP Configuration php -i | grep mongo /usr/local/php5/php.d/50-extension-mongo.ini, mongo mongo.allow_empty_keys => 0 => 0 mongo.allow_persistent => 1 => 1 mongo.auto_reconnect => 1 => 1 mongo.chunk_size => 262144 => 262144 mongo.cmd => $ => $ mongo.default_host => localhost => localhost mongo.default_port => 27017 => 27017Friday, June 8, 2012
  82. 82. Installing PHP Configuration php -m [PHP Modules] apc bcmath bz2 Core ctype curl date dom eregFriday, June 8, 2012
  83. 83. Installing PHP Configuration php.ini extension_dir=/usr/lib/php/extensions/no- debug-non-zts-20090626 extension=apc.so extension=mongo.soFriday, June 8, 2012
  84. 84. Installing PHP Configuration php.ini php -i | grep extension_dir extension_dir => /usr/local/php5/lib/php/extensions/no-debug- non-zts-20090626Friday, June 8, 2012
  85. 85. Installing PHP Configuration php.ini date.timezone=UTC display_errors = off log_errors = on error_log = /var/log/php.logFriday, June 8, 2012
  86. 86. Installing PHP Configuration Security memory_limit = 128M max_execution_time = 30 display_errors = off expose_php = off mail.log = /var/log/phpmails.log disable_functions = exec allow_url_fopen = offFriday, June 8, 2012
  87. 87. Installing PHP Configuration File uploads on .htaccess php_value memory_limit 128M php_value max_file_uploads 20 php_value max_input_time -1 php_value post_max_size 8M php_value upload_max_filesize 2M php_value max_execution_time 0 AllowOverride=All in Apache!Friday, June 8, 2012
  88. 88. Installing PHP Configuration Apache php_value date.timezone UTC php_flag display_errors 1 php_value memory_limit 128M php_value max_execution_time 0 Donʼt forget to restart ApacheFriday, June 8, 2012
  89. 89. Installing PHP Web Server User Permissions issues with clear cache and uploads, Anyone? Possible users - apache - nobody - www-data - ftp / ssh user (sometimes)Friday, June 8, 2012
  90. 90. Installing PHP Web Server User Permissions issues with clear cache and uploads, Anyone? Fix: rm -rf app/cache/* rm -rf app/logs/* sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs http://symfony.com/doc/current/book/installation.htmlFriday, June 8, 2012
  91. 91. Deploying PHPFriday, June 8, 2012
  92. 92. Deploying PHP Before going live Make sure ntpd is installed and running to ensure accurate server time yum install ntp chkconfig ntpd on ntpdate pool.ntp.orgFriday, June 8, 2012
  93. 93. Deploying PHP Before going live - Limit access by IP <Location /admin> Order Deny,Allow Deny from all Allow from 1.2.3.4 </Location>Friday, June 8, 2012
  94. 94. Deploying PHP Before going live - Add HTTP Authentication <Location /admin> Require valid-user AuthType Basic AuthName "SG" AuthUserFile /path/users </Location>Friday, June 8, 2012
  95. 95. Deploying PHP Before going live - Quiet down Apache ServerTokens ProdFriday, June 8, 2012
  96. 96. Deploying PHP Before going live Move document root with .htaccess RewriteEngine On RewriteRule ^.htaccess$ - [F] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L] RewriteCond %{REQUEST_URI} !^/web/.*$ RewriteRule ^(.*)$ /web/$1Friday, June 8, 2012
  97. 97. Deploying PHP Before going live - Case senstive filesystem IPCheck_Form_Index_Login != IpCheck_Form_Index_Login /path/to/file/IpCheck_Form_Index_Login.php <?php class IPCheck_Form_Index_Login { ...Friday, June 8, 2012
  98. 98. Deploying PHP - server-side vi - plain old FTP - SFTP - scp - rsync + ssh - git - tar / gzip - rpm / deb packages - capistrano / capifonyFriday, June 8, 2012
  99. 99. Deploying PHP - server-side vi - plain old FTP - SFTP - scp - rsync + ssh - git - tar / gzip - rpm / deb packages - capistrano / capifonyFriday, June 8, 2012
  100. 100. Deploying PHP Effing Package Management Build packages for multiple platforms (deb, rpm, etc) with great ease and sanity. fpm -s dir -t rpm -n "sfapp" -v 1.0 /var/www/sfapp fpm -s dir -t deb -a all -n sfapp -v 1.0 /etc/apache2/ conf.d/my.conf /var/www/sfapp https://github.com/jordansissel/fpmFriday, June 8, 2012
  101. 101. Deploying PHP Capifony - multiple servers - multiple environments - setup shared folders (vendors, cache, logs, etc) - copy files - update vendors - multi versions - rollback - restart apacheFriday, June 8, 2012
  102. 102. Deploying PHP Automate!Friday, June 8, 2012
  103. 103. DNS Tips The Power of the hosts fileFriday, June 8, 2012
  104. 104. DNS Tips The Power of the hosts file /etc/hosts 10.0.1.1 www.lottery.comFriday, June 8, 2012
  105. 105. DNS Tips The Power of the hosts file /etc/hosts 10.0.1.1 example1.com example2.comFriday, June 8, 2012
  106. 106. DNS Tips Virtual Document Root UseCanonicalName Off VirtualDocumentRoot /var/www/vhosts/%0/web <Location /var/www/vhosts> AllowOverride All Options +FollowSymLinks </Location> example.com => /var/www/vhosts/example.com/web example2.com => /var/www/vhosts/example2.com/webFriday, June 8, 2012
  107. 107. DNS Tips Nameservers/Expiration whois servergrove.com ... Name Servers: ns1.servergrove.com ns2.servergrove.com ns3.servergrove.com Creation date: 19 May 2005 23:34:36 Expiration date: 19 May 2014 23:34:00Friday, June 8, 2012
  108. 108. DNS Tips DNS records dig -t A google.com ;; ANSWER SECTION: google.com. 184 IN A 74.125.230.227 google.com. 184 IN A 74.125.230.228 google.com. 184 IN A 74.125.230.229 google.com. 184 IN A 74.125.230.230 google.com. 184 IN A 74.125.230.231 google.com. 184 IN A 74.125.230.232 google.com. 184 IN A 74.125.230.233 google.com. 184 IN A 74.125.230.238 google.com. 184 IN A 74.125.230.224 google.com. 184 IN A 74.125.230.225 google.com. 184 IN A 74.125.230.226Friday, June 8, 2012
  109. 109. DNS Tips DNS records dig -t A servergrove.eu @ns1.servergrove.com ;; ANSWER SECTION: servergrove.eu. 3600 IN A 149.5.47.100Friday, June 8, 2012
  110. 110. DNS Tips traceroute traceroute google.com traceroute to google.com (173.194.37.33), 30 hops max, 40 byte packets 1 2.69-195-222.static.servergrove.com (69.195.222.2) 0.360 ms 0.365 ms 0.432 ms 2 t0-1-0-5.br2.mia.terremark.net (66.165.161.45) 1.558 ms 1.546 ms 1.532 ms 3 core1-1-0-0.mia.net.google.com (198.32.124.133) 0.238 ms 0.224 ms 0.230 ms 4 209.85.253.74 (209.85.253.74) 0.266 ms 0.283 ms 0.312 ms 5 209.85.254.252 (209.85.254.252) 12.764 ms 12.757 ms 12.749 ms 6 64.233.175.92 (64.233.175.92) 14.177 ms 14.257 ms 14.359 ms 7 atl14s07-in-f1.1e100.net (173.194.37.33) 13.653 ms 13.606 ms 13.618 msFriday, June 8, 2012
  111. 111. DNS Tips http://whereisitup.comFriday, June 8, 2012
  112. 112. DNS Tips mtrFriday, June 8, 2012
  113. 113. MonitoringFriday, June 8, 2012
  114. 114. Monitoring Apache Requests <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from .your_domain.com </Location> ExtendedStatus OnFriday, June 8, 2012
  115. 115. Monitoring Apache RequestsFriday, June 8, 2012
  116. 116. Monitoring - Cacti - Ganglia - Zabbix - collectd - statsd / StatsDBundle - graphiteFriday, June 8, 2012
  117. 117. Monitoring statsd / StatsDBundle / GraphiteFriday, June 8, 2012
  118. 118. Monitoring CPU / Memory / IO topFriday, June 8, 2012
  119. 119. Monitoring IO iotopFriday, June 8, 2012
  120. 120. Monitoring Network iptrafFriday, June 8, 2012
  121. 121. Monitoring Handling logs - Centralize logs with syslog error_log = syslog - Monolog supports syslog - logstash, logster, loggly, logioFriday, June 8, 2012
  122. 122. Speeding upFriday, June 8, 2012
  123. 123. Speeding up - nginx/php-fpm - APC - Memcache - nginx reverse proxy cache - VarnishFriday, June 8, 2012
  124. 124. BackupsFriday, June 8, 2012
  125. 125. Backups - rsync - rdiff-backup - Unison - Bacula - AmandaFriday, June 8, 2012
  126. 126. Backups Donʼt forget to backup your DB!Friday, June 8, 2012
  127. 127. Reading List - Automating UNIX and Linux Administration - Running Linux - Learning the bash Shell: Unix Shell ProgrammingFriday, June 8, 2012
  128. 128. The End Questions? Sysadmin skills for Symfony developersFriday, June 8, 2012
  129. 129. Feedback Please! https://joind.in/6605 Sysadmin skills for Symfony developers Pablo Godel @pgodel Thank you!Friday, June 8, 2012

×