【Macユーザー向け】OrbStackとFrankenPHPでローカル開発環境を作ったよ【令和5年版】
このきじはなに?
FrankenPHPとOrbStackを利用して、Macで最新(諸説あり)のローカルLaravel環境を作る記事です。しかしながらFrankenPHPの詳細な機能は説明しません。この記事では細かいことは気にせずに、FrankenPHPをとにかく動かすことをゴールとします。あくまでもローカル環境を想定しています。本番環境へはそのまま利用しないでください
きじをかくにいたったはいけい
先日にFrankenPHP 1.0.0がリリースされました。
さくしゃついーと
こうしきさいと
ぎっとはぶ
FrankenPHPってなーに?
公式サイトから引用します
FrankenPHP is a modern application server for PHP built on top of the Caddy web server.
日本語訳すると、FrankenPHPは、Caddy Webサーバーの上に構築されたPHP用のモダンなアプリケーションサーバーです。
Caddyってなーに?
公式サイトから引用します
Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go
日本語訳すると、Caddyとはパワフルで、エンタープライズ対応のGoで書かれたHTTPS対応のオープンソースWebサーバーです。というところでしょうか。
こうしきさいと
ぎっとはぶ
つかったつーる
表題のとおりでありますが、今回記事におけるのPHP環境は以下のツールが前提です。
- macOS Sonoma, Version 14.1.2
- OrbStack Version 1.2.0-rc1 (16448)
- FrankenPHP (Docker版: dunglas/frankenphp:sha-b845670-php8.3 )
あうとぷっと
まずは筆者のアウトプットを共有します。
ぷろじぇくとぜんたい
全体感を見たい方はこちらからみてください。
どっかーふぁいる
公式Dockerイメージの参考箇所
chown
RUN groupadd -o -g ${GROUP_ID} ${USER_NAME} \
&& useradd -om -u ${USER_ID} -g ${GROUP_ID} ${USER_NAME} \
&& chown ${USER_NAME}:${USER_NAME} /app \
&& chown ${USER_NAME}:${USER_NAME} /data/caddy \
&& chown ${USER_NAME}:${USER_NAME} /config/caddy \
&& chown ${USER_NAME}:${USER_NAME} /etc/caddy
FrankenPHPをベースにカスタムしました。筆者のこだわりとしては、ホストマシンのユーザーをベースにdockerイメージを内部にユーザーを作っています。この際にCaddyの関連ファイルのパーミッションエラーを回避するためにchownを利用してユーザーやグループを設定しています。今回はMacの利用が前提ですが、Linuxに対応する必要が出ても大丈夫なように意識しています。
こんぽーずやむる
カスタムFrankenPHPイメージを利用してcompose.yamlを作りました。FrankenPHPのDockerイメージでは/appにアプリケーションを配置するお作法になっており、それに従います。
php-franken:
image: laravelorbstack-php-franken
build:
dockerfile: ./php/Franken.Dockerfile
args:
- USER_ID=${USER_ID}
- GROUP_ID=${GROUP_ID}
- USER_NAME=${USER_NAME}
container_name: laravelorbstack-php-franken
user: ${USER_ID}:${GROUP_ID}
working_dir: /app
volumes:
- type: bind
source: ../..
target: /app
- type: bind
source: ./php/php.ini
target: /usr/local/etc/php/php.ini
- type: bind
source: ./php/docker-php-ext-xdebug.ini
target: /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
- type: volume
source: caddy-data
target: /data
- type: volume
source: caddy-config
target: /config
env_file: ./php/.env.franken
また、Caddyファイルの設定をvolumeを利用して永続化します。これは後々に必要になるので行います。caddy-dataを覚えておいてください。
えんぶ
基本的にはLaravelのよくあるやつです。compose.yaml上で.env.frankenというファイルを読みこませるようにしています。
重要なポイントはコチラです。
APP_URL=https://php-franken.laravelorbstack.orb.local
SERVER_NAME=php-franken.laravelorbstack.orb.local
# もしくは
# SERVER_NAME=http://php-franken.laravelorbstack.orb.local
OrbStackはコンテナにドメイン名を割り当てることができます。今回のFrankenPHPコンテナでは、https://php-franken.laravelorbstack.orb.local でアクセスできるようにしています。
Caddyの設定でサーバー名が環境変数で設定できます。なにもしないとlocalhostが割り当てられます。これをデフォルトのままにしているとFrankenPHPのコンテナにアクセスできません。忘れずに設定してください。
公式情報はコチラを確認してください
FrankenPHPのこんてなにあくせすする
OrbStackでは、ドメイン名でコンテナにアクセスできます。
こんてなをたちあげる
$ make init
コチラが立ち上げコマンドです。色々と処理を行いながら環境をセットアップします。
こんてなにあくせすする
https://php-franken.laravelorbstack.orb.local にアクセスします。
すると、以下のキャプチャのようになります。
.envでSERVER_NAME=php-franken.laravelorbstack.orb.local
とした場合です。
とりあえずは、Advancedをクリックして進めます。
Proceed to php-franken.laravelorbstack.orb.local (unsafe) をクリックして進めます
https://php-franken.laravelorbstack.orb.local にアクセスはできました。
ただ、 https://php-franken.laravelorbstack.orb.local というのが気になりますね。。。
OrbStackのきのうをつかってごにょごにょする
https://php-franken.laravelorbstack.orb.local をなんとかして、https://php-franken.laravelorbstack.orb.local でアクセスできるようにします。
OrbStackのぼりゅーむにあくせすする
OrbStackでは、GUI経由でvolumeの中身にアクセスできます。laravelorbstack-caddy-dataの中身にアクセスします。
Laravelorbstack-caddy-dataの右にあるフォルダをクリックします。
なんと!volume内のファイルに対して簡単にアクセスできます。
そして、caddy/pki/authrities/local/root.crt をクリックします。パスワードの入力を求められるので進めましょう
Keychain Access に Caddy Local Authority が表示されます。
これをクリックしてAlways Trustに設定します。パスワードを入力して更新します。
更新に成功するとこうなります。
そして改めて、https://php-franken.laravelorbstack.orb.local にアクセスします。
なんということでしょう!
https://php-franken.laravelorbstack.orb.local がなくなり、https://php-franken.laravelorbstack.orb.local でアクセスできるようになりました!
さいごに
いかがでしたか?これでFrankenPHPを試せるようになりました!ぜひとも試してもらえれば嬉しいです。OrbStackを使えば便利なことができるのです!root.crtを手動でインストールする必要がありますが、その手間をかけるメリットはあるかなと思います。
みなさんもOrbStackを使いましょう。そして課金しましょう。
Discussion
memo
SERVER_NAME=php-franken.laravelorbstack.orb.local
を
SERVER_NAME=http://php-franken.laravelorbstack.orb.local
にすれば、OrbStackの証明書をそのまま使えるみたい
わざわざvolumにアクセスして、Caddyのroot.crtをインストールしなくてもOK