{"id":536,"date":"2025-03-10T12:30:37","date_gmt":"2025-03-10T03:30:37","guid":{"rendered":"https:\/\/kitayama.jp\/?p=536"},"modified":"2025-03-10T12:30:38","modified_gmt":"2025-03-10T03:30:38","slug":"laravel-11-reverb-%e3%81%a7%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%9f%e6%99%82%e3%80%81https-%e3%81%ab%e5%af%be%e5%bf%9c%e3%81%95%e3%81%9b%e3%82%8b%e3%81%ae%e3%81%ab","status":"publish","type":"post","link":"https:\/\/kitayama.jp\/?p=536","title":{"rendered":"Laravel 11 Reverb \u3067\u30c1\u30e3\u30c3\u30c8\u3092\u4f5c\u3063\u305f\u6642\u3001https \u306b\u5bfe\u5fdc\u3055\u305b\u308b\u306e\u306b\u3048\u3089\u304f\u624b\u9593\u53d6\u3063\u305f\u6642\u306e\u52d8\u6240\u306e\u30e1\u30e2"},"content":{"rendered":"\n<p>Laravel11 \u306bReverb\u3067\u30c1\u30e3\u30c3\u30c8\u3092\u4f5c\u3063\u305f\u3002<\/p>\n\n\n\n<p>Websocket \u304c\u3088\u304f\u5206\u304b\u3063\u3066\u306a\u304b\u3063\u305f\u3053\u3068\u3082\u3042\u308a\u3001\u3059\u3054\u304f\u82e6\u52b4\u3057\u305f\u306e\u3067\u3001\u305d\u306e\u6642\u306e\u30e1\u30e2<\/p>\n\n\n\n<h2>.env\u306b\u3064\u3044\u3066<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>REVERB_HOST=0.0.0.0\nREVERB_PORT=8080\nREVERB_SCHEME=http<\/code><\/pre><\/div>\n\n\n\n<h2>server.conf \u306b\u3064\u3044\u3066<\/h2>\n\n\n\n<p>\/etc\/nginx\/conf.d\/server.conf \u306b\u30b3\u30d4\u30fc\u3059\u308b\u3002<\/p>\n\n\n\n<p>\u3053\u3053\u306f\u3001\u306a\u305c\u304b\u30bd\u30fc\u30b9\u304c\u6d88\u3048\u3061\u3083\u3046\u3068\u3044\u3046\u554f\u984c\u304c\u767a\u751f\u3002\u306a\u306e\u3067\u3001saerver.template\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u3063\u3066\u3001<br>docker-compose \u8d77\u52d5\u6642\u306b\u30b3\u30d4\u30fc<br><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>    - .\/nginx\/server.template:\/etc\/nginx\/conf.d\/server.template\n        entrypoint: [&quot;\/bin\/sh&quot;, &quot;-c&quot;, &quot;cp \/etc\/nginx\/conf.d\/server.template \/etc\/nginx\/conf.d\/server.conf && exec nginx -g &#39;daemon off;&#39;&quot;]<\/code><\/pre><\/div>\n\n\n\n<p>\u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u306b\u306f\u3001\u4ee5\u4e0b\u3092\u5165\u308c\u308b<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>location \/app\/ {\n    proxy_pass http:\/\/laravel.test:8080\/app\/;\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection &quot;Upgrade&quot;;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p>\u3053\u306e\u6642\u306b\u3001<\/p>\n\n\n\n<p>proxy_pass http:\/\/laravel.test:8080\/app\/;<\/p>\n\n\n\n<p>\u3053\u306e\u90e8\u5206\u304c\u7d50\u69cb\u96e3\u70b9\u3067\u3001<\/p>\n\n\n\n<p>docker inspect -f &#8216;{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}&#8217; tinder10-laravel.test-1<\/p>\n\n\n\n<p>\u3053\u3093\u306a\u611f\u3058\u3067\u3001IP\u30a2\u30c9\u30ec\u30b9\uff08\u30ed\u30fc\u30ab\u30eb\u3092\u8abf\u3079\u3066\uff09\u8a2d\u5b9a\u3059\u308b\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3092\u3001127.0.0.1 \u306b\u3057\u305f\u308a\u3001DNS\u540d\u306b\u3057\u305f\u308a\u3057\u305f\u3051\u3069\u30c0\u30e1\u3067\u3001\u7d50\u5c40\u3000\u30b3\u30f3\u30c6\u30ca\u540d\u3092\u8a2d\u5b9a\u3059\u308b\u3060\u3063\u305f\u3002<\/p>\n\n\n\n<p>IP\u30a2\u30c9\u30ec\u30b9\u3060\u3068\u3001docker\u3092\u7acb\u3061\u4e0a\u3052\u308b\u305f\u3073\u306b\u5909\u308f\u308b\u3053\u3068\u304c\u3042\u308b\u306e\u3067\u3001\u30b3\u30f3\u30c6\u30ca\u540d\u3068\u3057\u305f\u3002<\/p>\n\n\n\n<p>\/app\/ \u3067\u3001\u5bfe\u5fdc\u3057\u3066\u3044\u308b\u306e\u3067\u3001\/app\u306f\u5fc5\u9808\u3000\u3053\u308c\u304c\u306a\u3044\u3068\u3001nginx\u304b\u3089\u547c\u3073\u51fa\u3055\u308c\u306a\u3044\u3002\u3000\u3053\u308c\u3082\u8a66\u884c\u932f\u8aa4\u3057\u305f\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>config.broadcast<\/h2>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>        &#39;reverb&#39; =&gt; [\n            &#39;driver&#39; =&gt; &#39;reverb&#39;,\n            &#39;key&#39; =&gt; env(&#39;REVERB_APP_KEY&#39;),\n            &#39;secret&#39; =&gt; env(&#39;REVERB_APP_SECRET&#39;),\n            &#39;app_id&#39; =&gt; env(&#39;REVERB_APP_ID&#39;),\n            &#39;options&#39; =&gt; [\n                &#39;host&#39; =&gt; env(&#39;REVERB_HOST&#39;, &#39;localhost&#39;),\n                &#39;port&#39; =&gt; env(&#39;REVERB_PORT&#39;, 8080), \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u3092 8080 \u306b\u4fee\u6b63\n                &#39;useTLS&#39; =&gt; true,\n                &#39;scheme&#39; =&gt; env(&#39;REVERB_SCHEME&#39;, &#39;https&#39;),\n                #&#39;useTLS&#39; =&gt; env(&#39;REVERB_PORT&#39;, 443) == 443 || env(&#39;REVERB_SCHEME&#39;, &#39;http&#39;) === &#39;https&#39;, \/\/ \u4fee\u6b63\n            ],\n            &#39;client_options&#39; =&gt; [\n                \/\/ Guzzle client options\n            ],\n        ],<\/code><\/pre><\/div>\n\n\n\n<p>useTLS \u3092true \u3068\u3057\u305f\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>config.reverb.php<\/h2>\n\n\n\n<p>\u3053\u3053\u3067\u3000app \u306b\u6307\u5b9a\u3057\u3066\u3044\u308b\u306e\u3092\u5fd8\u308c\u3066\u3001\u7121\u99c4\u306b\u6642\u9593\u3092<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>    &#39;apps&#39; =&gt; [\n\n        &#39;provider&#39; =&gt; &#39;config&#39;,\n\n        &#39;apps&#39; =&gt; [\n            [\n                &#39;key&#39; =&gt; env(&#39;REVERB_APP_KEY&#39;),\n                &#39;secret&#39; =&gt; env(&#39;REVERB_APP_SECRET&#39;),\n                &#39;app_id&#39; =&gt; env(&#39;REVERB_APP_ID&#39;),\n                &#39;options&#39; =&gt; [\n                    &#39;host&#39; =&gt; env(&#39;REVERB_HOST&#39;),\n                    &#39;port&#39; =&gt; env(&#39;REVERB_PORT&#39;, 443),\n                    &#39;scheme&#39; =&gt; env(&#39;REVERB_SCHEME&#39;, &#39;https&#39;),\n                    &#39;useTLS&#39; =&gt; env(&#39;REVERB_SCHEME&#39;, &#39;https&#39;) === &#39;https&#39;,\n                ],\n                &#39;allowed_origins&#39; =&gt; [&#39;*&#39;],\n                &#39;ping_interval&#39; =&gt; env(&#39;REVERB_APP_PING_INTERVAL&#39;, 60),\n                &#39;activity_timeout&#39; =&gt; env(&#39;REVERB_APP_ACTIVITY_TIMEOUT&#39;, 30),\n                &#39;max_message_size&#39; =&gt; env(&#39;REVERB_APP_MAX_MESSAGE_SIZE&#39;, 10_000),\n            ],\n        ],\n\n    ],<\/code><\/pre><\/div>\n\n\n\n<h2>php.ini<\/h2>\n\n\n\n<p>Letsencript\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u306e\u6307\u5b9a<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>curl.cainfo=&quot;\/etc\/ssl\/certs\/fullchain.pem&quot;\nopenssl.cafile=&quot;\/etc\/ssl\/certs\/fullchain.pem&quot;<\/code><\/pre><\/div>\n\n\n\n<p>\u5f53\u7136\u3068\u8a00\u3048\u3070\u5f53\u7136\u306a\u306e\u3060\u3051\u3069\u3001nginx \u3068\u3000reverb(laravel.text)\u306f\u3001\u305d\u308c\u305e\u308c\u306b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d5\u30a1\u30a4\u30eb\u304c\u5fc5\u8981<\/p>\n\n\n\n<p>\u4e0a\u306b\u3082\u66f8\u3044\u305f\u3051\u3069\u3001nginx \u306e\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u306a\u304b\u306a\u304b\u4e00\u5ea6\u5165\u308b\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u52b9\u3044\u3066\u3001\u305d\u308c\u304c\u4e0a\u66f8\u304d\u3059\u308b\u306e\u3067\u5384\u4ecb\u3002<\/p>\n\n\n\n<p>chainn.pem \u3092\u6700\u521d\u5165\u308c\u3066\u305f\u306e\u3092full chain.pem\u306b\u5207\u308a\u66ff\u3048\u305f\u306e\u306b\u3001\u305d\u308c\u304c\u30a2\u30c3\u30d7\u3059\u308b\u3068\u3001chain.pem\u306e\u5185\u5bb9\u306b\u306a\u3063\u3066\u3044\u3066\u305d\u308c\u306b\u6c17\u304c\u3064\u304f\u306e\u306b\u3059\u3054\u304f\u6642\u9593\u304c\u304b\u304b\u3063\u305f\u3002chatgpt\u304c\u30b5\u30a4\u30ba\u304c\u9055\u3046\u3063\u3066\u6559\u3048\u3066\u304f\u308c\u3066\u6c17\u304c\u3064\u3044\u305f\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2>docker-compose.yml<\/h2>\n\n\n\n<p>\u4e00\u5fdcnginx\u306e\u6700\u7d42\u7cfb<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>    nginx:\n        image: &#39;nginx:latest&#39;\n        ports:\n            - &#39;${HTTP_PORT:-80}:80&#39;\n            - &#39;${SSL_PORT:-443}:443&#39;\n        environment:\n            - SSL_PORT=${SSL_PORT:-443}\n            - APP_SERVICE=${APP_SERVICE:-laravel.test}\n            - SERVER_NAME=${SERVER_NAME:-localhost}\n            - SSL_DOMAIN=${SSL_DOMAIN:-localhost}\n            - SSL_ALT_NAME=${SSL_ALT_NAME:-DNS:localhost}\n        volumes:\n            #- .\/nginx\/server.conf:\/etc\/nginx\/conf.d\/default.conf\n                        #- .\/nginx\/server.conf:\/etc\/nginx\/conf.d\/default.conf\n            #- &#39;sail-nginx:\/etc\/nginx\/certs&#39;\n            - &#39;.\/vendor\/ryoluo\/sail-ssl\/nginx\/templates:\/etc\/nginx\/templates&#39;\n            - &#39;.\/vendor\/ryoluo\/sail-ssl\/nginx\/generate-ssl-cert.sh:\/docker-entrypoint.d\/99-generate-ssl-cert.sh&#39;\n            - &#39;.\/docker\/dev.tinder.navi.jpn.com\/privkey1.pem:\/etc\/nginx\/certs\/server.key&#39;\n            - &#39;.\/docker\/dev.tinder.navi.jpn.com\/fullchain1.pem:\/etc\/nginx\/certs\/server.pem&#39;\n            - .\/nginx\/server.template:\/etc\/nginx\/conf.d\/server.template\n        entrypoint: [&quot;\/bin\/sh&quot;, &quot;-c&quot;, &quot;cp \/etc\/nginx\/conf.d\/server.template \/etc\/nginx\/conf.d\/server.conf && exec nginx -g &#39;daemon off;&#39;&quot;]\n<\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Laravel11 \u306bReverb\u3067\u30c1\u30e3\u30c3\u30c8\u3092\u4f5c\u3063\u305f\u3002 Websocket \u304c\u3088\u304f\u5206\u304b\u3063\u3066\u306a\u304b\u3063\u305f\u3053\u3068\u3082\u3042\u308a\u3001\u3059\u3054\u304f\u82e6\u52b4\u3057\u305f\u306e\u3067\u3001\u305d\u306e\u6642\u306e\u30e1\u30e2 .env\u306b\u3064\u3044\u3066 server.conf \u306b\u3064\u3044\u3066 \/etc\/nginx\/conf.d\/server.conf \u306b\u30b3\u30d4\u30fc\u3059\u308b\u3002 \u3053\u3053\u306f\u3001\u306a\u305c\u304b\u30bd\u30fc\u30b9\u304c\u6d88\u3048\u3061\u3083\u3046\u3068\u3044\u3046\u554f\u984c\u304c\u767a\u751f\u3002\u306a\u306e\u3067\u3001saerver.template\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u3063\u3066\u3001docker-compose \u8d77\u52d5\u6642\u306b\u30b3\u30d4\u30fc \u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u306b\u306f\u3001\u4ee5\u4e0b\u3092\u5165\u308c\u308b \u3053\u306e\u6642\u306b\u3001 pr.. <a href=\"https:\/\/kitayama.jp\/?p=536\">\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/kitayama.jp\/index.php?rest_route=\/wp\/v2\/posts\/536"}],"collection":[{"href":"https:\/\/kitayama.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kitayama.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kitayama.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kitayama.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=536"}],"version-history":[{"count":6,"href":"https:\/\/kitayama.jp\/index.php?rest_route=\/wp\/v2\/posts\/536\/revisions"}],"predecessor-version":[{"id":542,"href":"https:\/\/kitayama.jp\/index.php?rest_route=\/wp\/v2\/posts\/536\/revisions\/542"}],"wp:attachment":[{"href":"https:\/\/kitayama.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kitayama.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kitayama.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}