👨‍💻

【Macユーザー向け】OrbStackとFrankenPHPでローカル開発環境を作ったよ【令和5年版】

2023/12/10に公開
2

このきじはなに?

FrankenPHPとOrbStackを利用して、Macで最新(諸説あり)のローカルLaravel環境を作る記事です。しかしながらFrankenPHPの詳細な機能は説明しません。この記事では細かいことは気にせずに、FrankenPHPをとにかく動かすことをゴールとします。あくまでもローカル環境を想定しています。本番環境へはそのまま利用しないでください

きじをかくにいたったはいけい

先日にFrankenPHP 1.0.0がリリースされました。

さくしゃついーと

こうしきさいと

https://laravel-news.com/frankenphp

ぎっとはぶ

https://github.com/dunglas/frankenphp

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サーバーです。というところでしょうか。

こうしきさいと

https://caddyserver.com/

ぎっとはぶ

https://github.com/caddyserver/caddy

つかったつーる

表題のとおりでありますが、今回記事におけるのPHP環境は以下のツールが前提です。

あうとぷっと

まずは筆者のアウトプットを共有します。

ぷろじぇくとぜんたい

https://github.com/tyamahori/LaravelOrbStack
全体感を見たい方はこちらからみてください。

どっかーふぁいる

https://github.com/tyamahori/LaravelOrbStack/blob/main/.docker/local/php/Franken.Dockerfile

公式Dockerイメージの参考箇所
https://github.com/dunglas/frankenphp/blob/main/Dockerfile#L14-L21

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に対応する必要が出ても大丈夫なように意識しています。

こんぽーずやむる

https://github.com/tyamahori/LaravelOrbStack/blob/main/.docker/local/compose.yaml#L277-L319

カスタム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を覚えておいてください。

えんぶ

https://github.com/tyamahori/LaravelOrbStack/blob/main/.docker/local/php/.env.franken

基本的には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のコンテナにアクセスできません。忘れずに設定してください。

公式情報はコチラを確認してください
https://github.com/dunglas/frankenphp/blob/main/docs/config.md#environment-variables

FrankenPHPのこんてなにあくせすする

OrbStackでは、ドメイン名でコンテナにアクセスできます。

https://docs.orbstack.dev/docker/domains
https://zenn.dev/tyamahori/articles/cf90f5be58940e

こんてなをたちあげる

$ 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を使いましょう。そして課金しましょう。
https://orbstack.dev/pricing

Discussion

@tyamahori@tyamahori

memo

SERVER_NAME=php-franken.laravelorbstack.orb.local

SERVER_NAME=http://php-franken.laravelorbstack.orb.local

にすれば、OrbStackの証明書をそのまま使えるみたい

@tyamahori@tyamahori

わざわざvolumにアクセスして、Caddyのroot.crtをインストールしなくてもOK