0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FrankenPHPでLaravel実行環境を構築してみる

0
Last updated at Posted at 2026-03-30

はじめに

こんにちは、hdk-tです。
皆さんは、Laravelの実行環境をコンテナで構築する場合どのようにしていますか?
私は最近まで、PHPの実行環境を構築する際は以下のプロセスを実行するコンテナを自前で構築していました。

  • Nginx(Webサーバ)
  • PHP-FPM(PHPの実行)

(ちなみにコレです↓↓)

しかし、以下の問題があります。

  • Laravelをバージョンアップする度に、PHP-FPM、(ついでに)Nginxをアップデートする必要があり、面倒である
  • Dockerのベストプラクティスである 「1コンテナ・1プロセス」に違反している

※ そもそも、無理して1コンテナにしなくても良いのではというツッコミがありそうですが、現在運用しているサービスにて、ロードバランサー配下にスケールしたコンテナを配置しているため、スケールさせるコンテナ数が増えると管理が面倒なのと、リソースを節約したいという理由から1コンテナにしています。

そこで、1つのプロセスでWebサーバとPHP実行を完結させられる方法がないか調べていたところ、FrankenPHPにたどり着いたので、その特徴と環境構築手順をまとめてみました。

FrankenPHPとは

FrankenPHPは、Go言語で書かれたモダンなPHPアプリケーションサーバです。
WebサーバーとPHP実行環境を包括しており、それらを1プロセスで実行することが可能です。

CaddyサーバーというGo言語で書かれたWebサーバーをベースにしており、それにPHPの実行環境を組み込む形で実装されているようです。

以下の特徴があります。

高速な実行速度

Webサーバプロセスが直接PHPを呼び出すことが可能なため、従来の構成 (Nginx + PHP-FPM) で発生していたプロセス間の通信がないことに加えて、Worker Modeにより高速な実行が可能。

Caddyサーバーが内包されている

Caddyのメリットである以下の恩恵がそのまま受けられる

  • 高速なパフォーマンス
  • HTTPSの完全自動化
  • シンプルな記述の設定ファイル

Mercureに対応している

PHPでSSE(Server-Sent Events)を実装するために必要なMercureが使用できる

環境構築してみる

今回は、FrankenPHP × Laravel13 の構成で、ローカル開発やロードバランサー配下での利用を想定したDockerfileを作成してみます。

Dockerfile

# NOTE: Laravel13はphp8.5まで対応している
FROM dunglas/frankenphp:1-php8.5

WORKDIR /app

# Alias setting
RUN echo -e "\nalias ll='ls -aFl'\n"> ~/.bashrc

# Environment
ENV TZ=Japan
ENV DEBIAN_FRONTEND=noninteractive
# NOTE: HTTPで動作させるのに必要な設定
ENV SERVER_NAME=http://
ENV CADDY_GLOBAL_OPTIONS="auto_https off"  

# Install basic middleware
RUN apt-get update && apt-get install -y \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip \
    git \
    && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
    && apt-get install -y nodejs \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Install PHP middleware
RUN install-php-extensions \
    pcntl \
    intl \
    zip \
    bcmath \
    gd \
    pdo_mysql \
    redis \
    opcache

# Install composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

コンテナビルド

docker build ./ -t frankenphp-laravel

コンテナ実行

docker run -it --name frankenphp-laravel-container -p 80:80 frankenphp-laravel

動作確認

/app配下がルートディレクトリに設定されています。

docker exec -it frankenphp-laravel-container sh
rm -rf ./public
composer create-project laravel/laravel .

この状態で、http://localhost にアクセスするとLaravelのウェルカムページが表示されます。
※ Docker Compose などで、別途権限の設定が必要です

さいごに

これまでは、古典的な方法でコンテナを構築していたので、これからは環境構築やアップデート対応に無駄足を取られなくて済みそうです。

ただ、新しい技術ということもあり、運用実績などの参考文献は少ないですね。
個人サービスや小規模サービスであれば選択肢には入りそうです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?