How to Continuously Upgrade Web Services Written in PHP

How to Continuously Upgrade Web Services Written in PHP

PHP Conference 2013 #phpconf2013

23f4d5d797a91b6d17d627b90b5a42d9?s=128

Kentaro Kuribayashi

September 14, 2013
Tweet

Transcript

  1. PHPΞϓϦέʔγϣϯͷ ܧଓతόʔδϣϯΞοϓ @kentaro

  2. @kentaro Rubyist / Perl Monger Vimmer (Vimྺ6೔ Kentaro Kuribayashi paperboy&co.

    ٕज़ج൫νʔϜ
  3. ΃ͪ΃ɾ΃ͪͺʔ ͱ͍͏ݴ༿ͷ૑࢝ऀ

  4. None
  5. None
  6. None
  7. େม͓ੈ࿩ʹͳ͓ͬͯΓ·͢

  8. શࣾతٕज़ج൫ ͷ੔උ ৽ٕज़ͱ͔ ։ൃϓϩηεͷ վળ εΫϥϜͱ͔ طଘαʔϏεͷ վળ

  9. શࣾతٕज़ج൫ ͷ੔උ ৽ٕज़ͱ͔ ։ൃϓϩηεͷ վળ εΫϥϜͱ͔ طଘαʔϏεͷ վળ

  10. ͱ͜ΖͰ

  11. http://php.net/archive/2013.php#id2013-07-11-1

  12. དྷ೥(2014)ʹ͸ऴྃ

  13. Ͳ͏͢Δʁ

  14. มԽʹରԠ͢Δ

  15. ؀ڥ͸มԽ͢Δ ࣌୅؀ڥͷมԽ Ϗδωε؀ڥͷมԽ ૊৫త؀ڥͷมԽ ٕज़త؀ڥͷมԽ

  16. OSS΋มԽ͢Δ PHP΋ൃల͍ͯ͘͠ 5.5.3←ΠϚίί ͍ΖΜͳػೳ ηΩϡϦςΟϑΟοΫε

  17. OSSͷίετ ιϑτ΢ΣΞͷඅ༻͸ແྉ ಋೖɾӡ༻ʹؔ͢Δඅ༻͸ͦ ΕͳΓʹ͔͔Δ ಛʹӡ༻ʹؔͯ͠ όʔδϣϯΞοϓ

  18. ΤίγεςϜ PHPΛߏ੒͢Δͷ͸ݴޠͦͷ ΋ͷ͚ͩͰ͸ͳ͍ ίϛϡχςΟͰͷؔ܎ੑ΍ɺ ͦΕΒ͕ੜΈग़͢ϥΠϒϥ ϦɺυΩϡϝϯτ౳

  19. 5.3.2 ӽ͑ΒΕͳ͍น 5.2

  20. ศརπʔϧ ͍Ζ͍ΖͳϥΠϒϥϦɺศར πʔϧ composer newrelic etc. 5.3Ҏલ͸ແࢹͷ܏޲

  21. ์ஔ͢Δͱʜ ݹ͍ॻ͖ํʹͻ͖ͣΒΕΔ ηΩϡϦςΟతʹϠό͍

  22. ։ൃεϐʔυ↓↓ ศརϥΠϒϥϦɾπʔϧ͕࢖ ͑ͳ͍ ϨΨγʔίʔυͷ૿Ճ ·͢·͢εϐʔυ͕௿Լ ΠϊϕʔγϣϯͷδϨϯϚ

  23. ͦͷ͋ͨΓͷ͜ͱ ͸શ෦͜͜ʹॻ͔ Ε͍ͯ·͢ ඞಡ

  24. WebαʔϏεͷ ܧଓతվળ

  25. όʔδϣϯΞοϓ ίʔυΛมߋ͢Δ͚ͩͳΒͦ Μͳʹ೉͘͠͸ͳ͍ Ұ౓͚ͩ΍Δ෼ʹ͸ɺ࣌ؒΛ ͔͚Ε͹ͳΜͱ͔ͳΔ ͔࣮͠͠ࡍʹ͸ɺԿ౓΋ܧଓ తʹߋ৽͠ͳ͚Ε͹ͳΒͳ͍

  26. WebαʔϏεͷ໋॓ ؀ڥ͸ৗʹมԽ͠ଓ͚Δ ͍·5.4, 5.5Ͱ΋ɺ͍ͣΕό ʔδϣϯΞοϓ͠ͳ͚Ε͹ͳ Βͳ͍ มԽʹରԠ͠ଓ͚Δඞཁ

  27. ඞཁͳ΋ͷ αʔόͷߏ੒؅ཧ PHPϥΠϒϥϦͷ؅ཧ แׅతͳςετ ࣗಈσϓϩΠ؀ڥ ϞχλϦϯάͷ࢓૊Έ

  28. ඞཁͳ΋ͷ αʔόͷߏ੒؅ཧ PHPϥΠϒϥϦͷ؅ཧ แׅతͳςετ ࣗಈσϓϩΠ؀ڥ ϞχλϦϯάͷ࢓૊Έ

  29. ✗ ઃఆϑΝΠϧ ύοέʔδ ϛυϧ΢ΣΞ 1)1ϥΠϒϥϦ ιʔείʔυ αʔό खಈͰ͍ΖΜͳ ΋ͷ͕ಥͬࠐ· Ε͍ͯΔঢ়ଶ

  30. ;Θ͚͢Δ ઃఆϑΝΠϧ ύοέʔδ ϛυϧ΢ΣΞ 1)1ϥΠϒϥϦ ιʔείʔυ etc.

  31. ઃఆϑΝΠϧ αʔό ύοέʔδ ϛυϧ΢ΣΞ ιʔείʔυ γεςϜ ◦ ߏ੒؅ཧ͕͠ ͔ͬΓ͞Εͯ ͍Δঢ়ଶ

  32. ߏ੒؅ཧΛ࢝ΊΔ

  33. ํ਑ ͍͖ͳΓશ෦Λ؅ཧԼʹ͓͜ ͏ͱ͠ͳ͍ ຊ൪؀ڥʹద༻͢Δ ࠓಈ͍͍ͯΔຊ൪Λյ͞ͳ͍ Ͱ͖Δͱ͜Ζ͔Βগͮͭ͠

  34. ೔ຊޠͰಡΊΔ། ҰͷPuppetೖ໳ ॻ Ϟμϯ͔࣮ͭફత ͳ಺༰ ඞಡ

  35. ֶश๏ ຊΛॻ͘ͱΑ͍ ిࢠॻ੶ ࣗ෼ͷษڧʹͳΔ पғʹ΋ಡΜͰ΋Βͬͯ޿Ί ΒΕΔ ৽ଔΧϦΩϡϥϜͷҰ෦

  36. πʔϧͷಋೖ Puppet, Chef, Ansible... ͲΕΛ࢖ͬͯ΋͍͍ ࣮ࡍʹ؅ཧɾӡ༻Ͱ͖͍ͯΔ ͜ͱ͕େࣄ ೖ໳هࣄ͸ଟ͍͕ɺͦΕ͚ͩ Ͱ͸࣮ફ͸೉͍͠

  37. ௒࣮ફతಋೖ๏ ·ͣ͸ͳʹ͔ͻͱͭͰ΋͍͍ ͔Β؆୯ͳઃఆϑΝΠϧ͔Β ຊ൪؀ڥ͔Βίϐʔͯ͘͠Δ ϦϙδτϦʹίϛοτ ͜ͷϑΝΠϧʹ͍ͭͯ͸ઈର ʹखಈͰߋ৽͠ͳ͍

  38. ࠷௿ݶॻ͍ͯʜ

  39. ద༻͢Δʂ

  40. Ͱ͖Δ͚ͩ؆୯ʹ Chef Serverͱ͔ puppetmasterͱ͔ͩΔ͍ knife-solo΍capistranoͰద ༻Ͱ͖ΔΑ͏ʹ͢Δ ࠷ॳʹͦ͏͍͏࢓૊ΈΛ࡞Δ

  41. ։ൃ؀ڥ

  42. ։ൃ؀ڥΛݟ௚͢ ୭͔͕ߏஙͨ͠ڞ༻αʔό ୭͔͕ߏஙͨ͠VM ୭͔͕ߏஙͨ͠AMI ʮൿ఻ͷλϨʯ

  43. ։ൃ؀ڥͰҭͯΔ εϞʔϧελʔτͰຊ൪ద༻ Ͱ͖ΔΑ͏ʹͳͬͨΒɺ։ൃ ؀ڥͰຊ֨తʹҭ͍ͯͯ͘ յΕͯ΋ҰൃͰ࡞Γ௚ͤΔ͜ ͱ͕େࣄ ୭Ͱ΋؀ڥߏஙͰ͖ΔΑ͏ʹ

  44. Vagrant Box࡞ͬͯ഑෍͸Ξϯνύλ ϯ ʮൿ఻ͷλϨʯ ΠϝʔδΛ࢖͍·Θ͞ͳ͍ ߏ੒؅ཧπʔϧΛ࢖Θͳ͍ Vagrantͷར༻ʹҙຯͳ͠

  45. ίʔυͷ഑ஔ

  46. Vagrantfile

  47. DevOps ΞϓϦέʔγϣϯ։ൃऀ΋ PuppetϚχϑΣετΛॻ͘ γεςϜߏ੒͸1VQQFUͰɺ PHPϥΠϒϥϦ؅ཧ͸ composerͰ

  48. composer PHPϥΠϒϥϦͷ؅ཧ͸Ξϓ Ϧ։ൃऀͷ੹೚ αʔόଆͷґଘ͸ϚχϑΣε τͰ؅ཧ

  49. ϚχϑΣετͷద༻

  50. ຊ൪؀ڥ΁ͷద༻ ࠷ॳ͸ߏ੒؅ཧπʔϧ͚ͩͰ ߏஙͰ͖ͳͯ͘΋͍͍ গͮͭ͠ɺద༻ൣғΛ૿΍͠ ͍ͯ͘→શ෦΁ ٕज़తෛ࠴Λগ͠Ͱ΋ݮΒ͢

  51. ͜ͷຊʹશ෦ॻ͔ Ε͍ͯ·͢ ඞಡ

  52. PHPͷόʔδϣϯΞοϓ

  53. ݴޠʹؔ͢Δ໰୊ ݴޠͷมߋʹΑΔ໰୊ ඇޓ׵ͳมߋ ґଘϥΠϒϥϦ͕ඇରԠ ٽ͖ͳ͕Β௚͢ ಛʹ͍͍ํ๏ͳͲͳ͍

  54. ෳࡶੑΛॖݮ͢Δ mod_php + Apache͔Β PHP-FPM΁ Apacheͱͷີ݁߹Λ΍ΊΔ όʔδϣϯͷ૊Έ߹ΘͤΛݮ Β͢→ߋ৽͠΍͘͢͢Δ

  55. xbuild

  56. xbuild PHP΋ରԠ͍ͯ͠Δ xbuildΛgit cloneͯ͠ɺ php-installίϚϯυΛୟ͘ ͚ͩ

  57. None
  58. supervisor

  59. ֤όʔδϣϯΛ༻ҙ ܥhttp://example.com:5300/ ܥhttp://example.com:5400/ ܥhttp://example.com:5500/

  60. όʔδϣϯͷ੾Γସ͑ ͕Μ͹ͬͯݕূ͢Δ ʮ͍͚ΔʂʯͱͳͬͨΒɺϑ ϩϯτͷϦόʔεϓϩΩγͷ ޲͖ઌΛม͑Δ͚ͩ

  61. ·ͱΊ

  62. มԽʹܧଓతʹରԠ͠ଓ͚Δ ͷ͸WebαʔϏεͷ໋॓ ߏ੒؅ཧΛɺখ͍͞ͱ͜Ζ͔ ΒɺޮՌతʹ࢝ΊΔ PHPͦͷ΋ͷΑΓγεςϜͷ ෳࡶੑͷํ͕໰୊ ܧଓతʹόʔδϣϯΞοϓͰ ͖Δ͜ͱ͕େ੾