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して運用してみよう!

CyberAgent SGE Engineer

April 10, 2022
Tweet

More Decks by CyberAgent SGE Engineer

Other Decks in Programming

Transcript

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

    QIQFSLBJHJ
    !HPPEPP

    View Slide

  2. • גࣜձࣾαΠόʔΤʔδΣϯτ
    • 4(&౷ׅຊ෦ٕज़౷ׅࣨࣨ௕
    • ࢠձࣾࣾ$50
    • גࣜձࣾ$SBGU&HH
    • גࣜձࣾαϜβοϓ
    • നҪɹӳ
    • ΤϯδχΞ
    • #MPH
    IUUQBNFCMPKQHPPEPP
    ͓લɺ୭Α
    • 5XJUUFS
    !HPPEPP
    • %2
    ࠷ߴͰͨ͠

    View Slide

  3. "HFOEB
    w-BSBWFM0DUBOFͱ͸ʁ
    wͲ͏ͯ͠΋1IBSͰʁ
    w-BSBWFM0DUBOF 4XPPMF
    ͷىಈॲཧΛݟΔ
    w1IBSԽʂ
    w࣮ࡍͷӡ༻࣌ͷߏ੒
    w·ͱΊ

    View Slide

  4. -BSBWFM0DUBOFͱ͸ʁ

    View Slide

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

    View Slide

  6. 4XPPMFͱ͸ʁ
    4XPPMFJTBOFWFOUESJWFOBTZODISPOPVTDPSPVUJOFCBTFE
    DPODVSSFODZOFUXPSLJOHDPNNVOJDBUJPOFOHJOFXJUIIJHI
    QFSGPSNBODFXSJUUFOJO$GPS1)1
    IUUQTHJUIVCDPNTXPPMFTXPPMFTSD

    Πϕϯτۦಈܕͷඇಉظɾίϧʔνϯܕฒߦॲཧ
    ωοτϫʔΫ௨৴Τϯδϯ
    ඇಉظॲཧ΍ฒߦॲཧ͕͓खܰʹ͔͚Δʂ
    )551αʔόʔɺ8FC4PDLFUαʔόʔ͕Մೳʂ

    View Slide

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

    View Slide

  8. Ͳ͏ͯ͠΋1IBSͰʁ

    View Slide

  9. ಥવͰ͕࣭͢໰Ͱ͢

    View Slide

  10. 1IBSͳΜͯಡΈ·͔͢ʁ

    ͽʔ΁͍ͪ͑ʔ͋ʔΔ

    ͺʔ

    ;͊ʔ

    View Slide

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

    View Slide

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

    View Slide

  13. ͦ͜Ͱ1IBS

    View Slide

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

    View Slide

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

    View Slide

  16. ͦͷ··࣮ߦͰ͖Δ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. $phar = new Phar('hoge.phar');
    $phar->addFromString('hoge.php', file_get_contents('./hoge.php'));
    $phar->setStub("Phar::mapPhar();\n
    require 'phar://hoge.phar/hoge.php'; \n
    __HALT_COMPILER();”);
    BEE'SPN4USJOH
    Λ࢖༻ͯ͠
    1IBS࡞੒͍ͯͨ͠

    View Slide

  23. 1IBSBEE'SPN4USJOH
    ͸ɺݺͼग़͞ΕΔ
    ͨͼʹ৽͍͠1IBSΞʔΧΠϒΛ࡞੒͠·͢ɻ
    https://www.php.net/manual/ja/phar.addfromstring.php
    ͑ʂ

    View Slide

  24. ϚχϡΞϧʹै͍ૉ௚ʹ
    CVJME'SPN%JSFDUPSZ

    Λ࢖͍·ͨ͠
    ΋͏Ұͭ঺հ͞Ε͍ͯΔCVJME'SPN*UFSBUPS
    ͸ɺ
    ϑΝΠϧ਺͕ଟ͍ͱϝϞϦʔ͕଍Βͳ͍Τϥʔ͕
    ͰΔͨΊஅ೦

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. ͪͳΈʹ
    NBTUFS1SPDFTT
    NBOBHFS1SPDFTT
    XPSLFS1SPDFTT

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. 1IBSԽʂ

    View Slide

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

    View Slide

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

    View Slide

  40. BSUJTBOίϚϯυ͔Β
    ઌ΄Ͳͷ
    $PNNBOE 1IBS4UBSU4XPPMF$PNNBOE

    Λ࣮ߦ͢Δʂ
    QIQBSUJTBOQIBSTXPPMFTUBSU
    ͜ΕͰ
    ͰɺTXPPMF4FSWFSQIBS͕ݺ΂Δɺͭ·Γ
    QIQBQQQIBSQIBSTXPPMFTUBSU
    BSUJTBOΛ1IBSͨ͠BQQQIBS͔ΒىಈͰ͖Δ

    View Slide

  41. 1IBSԽͰ͖ͨʂ

    View Slide

  42. ࣮ࡍͷӡ༻࣌ͷߏ੒

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. ىಈॲཧ
    TVQFSWJTPSEDPOG

    View Slide

  49. ·ͱΊ

    View Slide

  50. 1IBSԽͰ͖ͨʂ

    View Slide

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

    View Slide

  52. -FU`T1)1
    1SPHSBNNJOH

    View Slide

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

    View Slide