Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to Continuously Upgrade Web Services Written in PHP

How to Continuously Upgrade Web Services Written in PHP

PHP Conference 2013 #phpconf2013

Kentaro Kuribayashi

September 14, 2013
Tweet

More Decks by Kentaro Kuribayashi

Other Decks in Technology

Transcript

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

    View Slide

  2. @kentaro
    Rubyist / Perl Monger
    Vimmer (Vimྺ6೔

    Kentaro Kuribayashi
    paperboy&co.
    ٕज़ج൫νʔϜ

    View Slide

  3. ΃ͪ΃ɾ΃ͪͺʔ
    ͱ͍͏ݴ༿ͷ૑࢝ऀ

    View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. େม͓ੈ࿩ʹͳ͓ͬͯΓ·͢

    View Slide

  8. શࣾతٕज़ج൫
    ͷ੔උ ৽ٕज़ͱ͔

    ։ൃϓϩηεͷ
    վળ εΫϥϜͱ͔

    طଘαʔϏεͷ
    վળ

    View Slide

  9. શࣾతٕज़ج൫
    ͷ੔උ ৽ٕज़ͱ͔

    ։ൃϓϩηεͷ
    վળ εΫϥϜͱ͔

    طଘαʔϏεͷ
    վળ

    View Slide

  10. ͱ͜ΖͰ

    View Slide

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

    View Slide

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

    View Slide

  13. Ͳ͏͢Δʁ

    View Slide

  14. มԽʹରԠ͢Δ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. 5.3.2 ӽ͑ΒΕͳ͍น
    5.2

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


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

    View Slide

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

    View Slide

  31. ઃఆϑΝΠϧ αʔό
    ύοέʔδ
    ϛυϧ΢ΣΞ
    ιʔείʔυ
    γεςϜ

    ߏ੒؅ཧ͕͠
    ͔ͬΓ͞Εͯ
    ͍Δঢ়ଶ

    View Slide

  32. ߏ੒؅ཧΛ࢝ΊΔ

    View Slide

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

    View Slide

  34. ೔ຊޠͰಡΊΔ།
    ҰͷPuppetೖ໳

    Ϟμϯ͔࣮ͭફత
    ͳ಺༰
    ඞಡ

    View Slide

  35. ֶश๏
    ຊΛॻ͘ͱΑ͍ ిࢠॻ੶

    ࣗ෼ͷษڧʹͳΔ
    पғʹ΋ಡΜͰ΋Βͬͯ޿Ί
    ΒΕΔ
    ৽ଔΧϦΩϡϥϜͷҰ෦

    View Slide

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

    View Slide

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

    View Slide

  38. ࠷௿ݶॻ͍ͯʜ

    View Slide

  39. ద༻͢Δʂ

    View Slide

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

    View Slide

  41. ։ൃ؀ڥ

    View Slide

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

    View Slide

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

    View Slide

  44. Vagrant
    Box࡞ͬͯ഑෍͸Ξϯνύλ
    ϯ ʮൿ఻ͷλϨʯ

    ΠϝʔδΛ࢖͍·Θ͞ͳ͍
    ߏ੒؅ཧπʔϧΛ࢖Θͳ͍
    Vagrantͷར༻ʹҙຯͳ͠

    View Slide

  45. ίʔυͷ഑ஔ

    View Slide

  46. Vagrantfile

    View Slide

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

    View Slide

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

    View Slide

  49. ϚχϑΣετͷద༻

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  55. xbuild

    View Slide

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

    View Slide

  57. View Slide

  58. supervisor

    View Slide

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

    View Slide

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

    View Slide

  61. ·ͱΊ

    View Slide

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

    View Slide