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

Laravel OctaneをどうしてもPharで運用したい話

Laravel OctaneをどうしてもPharで運用したい話

PHPerKaigi2022の発表資料です

--発表概要--

Laravel Octane(オクタン)は、SwooleやRoadRunnerなどの高性能なアプリケーションサーバを使用し、アプリケーションを提供することで、アプリケーションのパフォーマンスを向上させます。Octaneはアプリケーションを一度起動したら、メモリ内に保持し、そして超音速でリクエストを送り返します
(引用:https://readouble.com/laravel/8.x/ja/octane.html
Laravel Octane(Swoole版)でPharをつかってワンバイナリアプリケーションにして運用してみた話です
過去、PHPカンファレンス北海道(2019)にて
「pharによるワンバイナリアプリケーションの可能性を探ってみた」
でお話ししましたが、そのリベンジ(現実版)になります
PHPだけど、Buildして(Pharでpackして)、Deployして運用してみよう!

Ec2fcdc4ea7905b289967a2c4c43e154?s=128

CyberAgent SGE Engineer

April 10, 2022
Tweet

More Decks by CyberAgent SGE Engineer

Other Decks in Programming

Transcript

  1. -BSBWFM0DUBOFΛ Ͳ͏ͯ͠΋ 1IBSͰӡ༻͍ͨ͠࿩ גࣜձࣾαΠόʔΤʔδΣϯτɹനҪӳ  QIQFSLBJHJ !HPPEPP

  2. • גࣜձࣾαΠόʔΤʔδΣϯτ • 4(&౷ׅຊ෦ٕज़౷ׅࣨࣨ௕ • ࢠձࣾࣾ$50 • גࣜձࣾ$SBGU&HH • גࣜձࣾαϜβοϓ

    • നҪɹӳ • ΤϯδχΞ • #MPH IUUQBNFCMPKQHPPEPP ͓લɺ୭Α • 5XJUUFS !HPPEPP • %2 ࠷ߴͰͨ͠
  3. "HFOEB w-BSBWFM0DUBOFͱ͸ʁ wͲ͏ͯ͠΋1IBSͰʁ w-BSBWFM0DUBOF 4XPPMF ͷىಈॲཧΛݟΔ w1IBSԽʂ w࣮ࡍͷӡ༻࣌ͷߏ੒ w·ͱΊ

  4. -BSBWFM0DUBOFͱ͸ʁ

  5. -BSBWFM0DUBOF -BSBWFM0DUBOFʢΦΫλϯʣ͸ɺ4XPPMF΍3PBE3VOOFSͳͲͷ ߴੑೳͳΞϓϦέʔγϣϯαʔόΛ࢖༻͠ɺΞϓϦέʔγϣϯΛఏ ڙ͢Δ͜ͱͰɺΞϓϦέʔγϣϯͷύϑΥʔϚϯεΛ޲্ͤ͞· ͢ɻ0DUBOF͸ΞϓϦέʔγϣϯΛҰ౓ىಈͨ͠ΒɺϝϞϦ಺ʹอ ࣋͠ɺͦͯ͠௒Ի଎ͰϦΫΤετΛૹΓฦ͠·͢ɻ ʢIUUQTSFBEPVCMFDPNMBSBWFMYKBPDUBOFIUNMʣ 4XPPMFΛ1)1Ͱ΋ͬͱ΋ਓؾͷߴ͍ ϑϨʔϜϫʔΫͷ-BSBWFM͕औΓࠐΜͩʂ

  6. 4XPPMFͱ͸ʁ 4XPPMFJTBOFWFOUESJWFOBTZODISPOPVTDPSPVUJOFCBTFE DPODVSSFODZOFUXPSLJOHDPNNVOJDBUJPOFOHJOFXJUIIJHI QFSGPSNBODFXSJUUFOJO$ GPS1)1 IUUQTHJUIVCDPNTXPPMFTXPPMFTSD Πϕϯτۦಈܕͷඇಉظɾίϧʔνϯܕฒߦॲཧ ωοτϫʔΫ௨৴Τϯδϯ ඇಉظॲཧ΍ฒߦॲཧ͕͓खܰʹ͔͚Δʂ )551αʔόʔɺ8FC4PDLFUαʔόʔ͕Մೳʂ

  7. -BSBWFM0DUBOFΛ࢖͏͜ͱͰ 1)1୯ମͰ )551αʔόʔʹ ͳΕΔʂ

  8. Ͳ͏ͯ͠΋1IBSͰʁ

  9. ಥવͰ͕࣭͢໰Ͱ͢

  10. 1IBSͳΜͯಡΈ·͔͢ʁ  ͽʔ΁͍ͪ͑ʔ͋ʔΔ  ͺʔ  ;͊ʔ

  11. ࢲ͸  ͷʮ;͊ʔʯͰ͢ ;͊ʔ

  12. 1)1FS΋ ϫϯόΠφϦͰ σϓϩΠ͍ͨ͠

  13. ͦ͜Ͱ1IBS

  14. 1IBSͬͯԿʁ 1IBSΞʔΧΠϒ͸ɺෳ਺ͷϑΝΠϧΛͻͱͭʹ ·ͱΊΔͨΊͷศརͳ࢓૊ΈͰ͢ 1IBSΞʔΧΠϒΛ࢖༻͢Ε͹ɺ1)1ͷΞϓϦ έʔγϣϯΛͻͱͭͷϑΝΠϧͱͯ͠഑෍Ͱ͖Δ Α͏ʹͳΓ·͢ɻ·ͨɺͦΕΛσΟεΫ্ʹల ։͠ͳͯ͘΋ͦͷ··࣮ߦͰ͖ΔͷͰ͢ Ҿ༻ɿ1)1ϚχϡΞϧ IUUQTXXXQIQOFUNBOVBMKBJOUSPQIBSQIQ

  15. 1IBSΞʔΧΠϒΛ࢖༻͢Ε͹ɺ 1)1ͷΞϓϦέʔγϣϯΛͻͱͭ ͷϑΝΠϧͱͯ͠഑෍Ͱ͖ΔΑ͏ʹ ͳΓ·͢ ·ͨɺͦΕΛσΟεΫ্ʹల։͠ͳ ͯ͘΋ͦͷ··࣮ߦͰ͖ΔͷͰ͢

  16. ͦͷ··࣮ߦͰ͖Δ

  17. ͱ͍͏࿩Λɺ1)1ΧϯϑΝϨϯε๺ւಓͰ͠·ͨ͠ https://speakerdeck.com/sgeengineer/pharniyoruwanbainariapurikesiyonfalseke-neng-xing-wotan-tutemita

  18. ͦͷ࣌΍Γ͖Εͳ͔ͬͨ఺

  19. Ϗϧυ͕࣌ؒ௕͍ɾɾ

  20. ͜Ε͡Ό࣮͋༻త͡Όͳ͍ʂ Ϧϕϯδʂ

  21. ͦ΋ͦ΋ͳͥϏϧυ࣌ؒ ͕௕͘ͳΔͷ͔ʁ

  22. $phar = new Phar('hoge.phar'); $phar->addFromString('hoge.php', file_get_contents('./hoge.php')); $phar->setStub("<?php define('IN_PHAR', true);\n Phar::mapPhar();\n

    require 'phar://hoge.phar/hoge.php'; \n __HALT_COMPILER();”); BEE'SPN4USJOH Λ࢖༻ͯ͠ 1IBS࡞੒͍ͯͨ͠
  23. 1IBSBEE'SPN4USJOH ͸ɺݺͼग़͞ΕΔ ͨͼʹ৽͍͠1IBSΞʔΧΠϒΛ࡞੒͠·͢ɻ https://www.php.net/manual/ja/phar.addfromstring.php ͑ʂ

  24. ϚχϡΞϧʹै͍ૉ௚ʹ CVJME'SPN%JSFDUPSZ Λ࢖͍·ͨ͠ ΋͏Ұͭ঺հ͞Ε͍ͯΔCVJME'SPN*UFSBUPS ͸ɺ ϑΝΠϧ਺͕ଟ͍ͱϝϞϦʔ͕଍Βͳ͍Τϥʔ͕ ͰΔͨΊஅ೦

  25. ઌʹϏϧυ࣌ؒͷ݁Ռ͚ͩ ඵͰϏϧυ׬ྃʂ ࣮༻తʹͳͬͨʂ

  26. ιʔε͸͜Μͳ͔Μ͡ ΊͬͪΌγϯϓϧʂ

  27. ͜ΕͰউͭΔʂ ͦ͏ࢥͬͨ࣌ظ͕ࣗ෼ʹ ΋͋Γ·ͨ͠ɾɾ

  28. -BSBWFM0DUBOF 4XPPMF ͷ ىಈॲཧΛݟΔ

  29. QIQBSUJTBOPDUBOFTUBSUŠTFSWFSTXPPMF ىಈॲཧΛݟͯΈ·͢ PDUBOFͷ4XPPMFͰͷىಈίϚϯυ͸࣍ͷΑ͏ʹͳΓ·͢ ಺෦తʹ͸ɺ-BSBWFMa0DUBOFa$PNNBOETa4UBSU$PNNBOE͕ݺ͹Ε·͢ ͦ͜Ͱ͞ΒʹɺUIJTDBMM bPDUBOFTXPPMF` ͕ίʔϧ͞Ε -BSBWFMa0DUBOFa$PNNBOETa4UBSU4XPPMF$PNNBOE͕ݺ͹Ε·͢

  30. 4UBSU4XPPMF$PNNBOEͷதΛݟΔͱ 4ZNGPOZa$PNQPOFOUa1SPDFTTΛ͔ͭͬͯɺ zTXPPMFTFSWFSzͳΔ1)1εΫϦϓτΛىಈ͍ͤͯ͞Δʂ

  31. zTXPPMFTFSWFSzͷ1)1ϑΝΠϧ͸ɺ WFOEPSMBSBWFMPDUBOFCJOσΟϨΫτϦͷԼʹ͋Γ·͢

  32. zTXPPMFTFSWFSzͰPDUBOFͰTXPPMFΛىಈ͍ͤͯ͞Δ ࣮ॲཧ͕هड़͞Ε͍ͯΔͷͰ͕͢ ຊ౰ʹૉͷ1)1εΫϦϓτϑΝΠϧͰ͢ ϓϩηεΛݟΔͱBSUJTBOίϚϯυͰ͸ͳ͘ɺ TXPPMFTFSWFS͕ಈ͍͍ͯΔͷ͕֬ೝͰ͖·͢

  33. ͪͳΈʹ NBTUFS1SPDFTT NBOBHFS1SPDFTT XPSLFS1SPDFTT

  34. ͭ·ΓԿ͕ݴ͍͍͔ͨͱ͍͏ͱ 1IBSϑΝΠϧͰΞϓϦͷىಈॲཧʹ͋ͨΔεΫϦϓτΛ BSUJTBOʹࢦఆ͍ͯ͠·͕ͨ͠ ͜ΕͩͱTXPPMFTFSWFS͸ىಈͰ͖ͳ͍ʂ ͱ͍͏͜ͱͰ͢ʂ

  35. 1)1FS΋ ϫϯόΠφϦͰ σϓϩΠ͍ͨ͠ Ͱ͖ͳ͍ͷ͔ʂʁ

  36. ͦ͏ͩ πʔόΠφϦʔ ʹ͠Α͏ʂ

  37. 1IBSԽʂ

  38. πʔόΠφϦʔ 1IBSϑΝΠϧͰΞϓϦͷىಈॲཧʹ͋ͨΔεΫϦϓτΛ TXPPMFTFSWFSΛࢦఆ͢Δ1IBSΛ࡞੒ʂ

  39. 4UBSU4XPPMF$PNNBOEಉ༷ͷॲཧΛ 1IBSϑΝΠϧΛ࢖࣮ͬͯߦ͢Δ ىಈ$PNBNOEΛ࡞੒

  40. BSUJTBOίϚϯυ͔Β ઌ΄Ͳͷ $PNNBOE 1IBS4UBSU4XPPMF$PNNBOE  Λ࣮ߦ͢Δʂ QIQBSUJTBOQIBSTXPPMFTUBSU ͜ΕͰ ͰɺTXPPMF4FSWFSQIBS͕ݺ΂Δɺͭ·Γ QIQBQQQIBSQIBSTXPPMFTUBSU

    BSUJTBOΛ1IBSͨ͠BQQQIBS͔ΒىಈͰ͖Δ
  41. 1IBSԽͰ͖ͨʂ

  42. ࣮ࡍͷӡ༻࣌ͷߏ੒

  43. ࠓճͷΞϓϦέʔγϣϯ͸࣮ࡍʹ (PPHMF$MPVEͷ$MPVE3VOͷ؀ڥͰ ӡ༻͍ͯ͠·͢

  44. ίϯςφલఏͷઃఆʹ͢Δඞཁ͕͋Γ·ͨ͠ ͔ͭ 1IBSΛ͔ͭ͏͜ͱʹΑΓඞཁͳઃఆ΋͋Γ·͢

  45. ίϯςφ޲͚ͷઃఆ ʢ̍ʣϩάͷઃఆ FOWͰඪ४Τϥʔग़ྗʹઃఆ͠·͢

  46. 1IBSͷͨΊͷઃఆ ʢʣPDUBOFTFSWFSTUBUFϑΝΠϧͷஔ͖৔ॴ TUPSBHFMPHT഑Լʹ PDUBOFTFSWFSTUBUFKTPOΛ࡞੒͠Α͏ͱ͠·͢ VTF4UPSBHF1BUI Λ͔ͭͬͯUNQͳͲʹมߋ͠·͢ ˞มߋλΠϛϯά͸CPPUTUSBQBQQQIQͰมߋ͠·͢

  47. %PDLFS'JMFͷத਎ ɹɹɹɹશ෦ফͯ͠ɺ1IBSϑΝΠϧͷΈʹ͍ͯ͠·͢ ˞FOWϑΝΠϧ͸1IBSϑΝΠϧʹ಺แ͓ͯ͠Γɺ಺แ͞ΕͨFOWͷ಺༰͕ࢀর͞Ε·͢

  48. ىಈॲཧ TVQFSWJTPSEDPOG

  49. ·ͱΊ

  50. 1IBSԽͰ͖ͨʂ

  51. w1IBSͷϏϧυʹ͔͔Δ࣌ؒΛ୹ॖͰ͖ͨ wCVJME'SPN%JSFDUPSZ ͷ࢖༻ w-BSBWFM0DUBOF 4XPPMF Λ1IBSԽʂ w݁ՌπʔόΠφϦʔʹͳ͚ͬͨͲɾɾ w࣮ӡ༻Ͱӡ༻Ͱ͖͍ͯΔ w$MPVE3VOͰӡ༻த

  52. -FU`T1)1 1SPHSBNNJOH

  53. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠