はじめに
経緯
新しい職場で FuelPHP を使っているらしく、さらにクラウドを AWS に移行するみたいなので、ローカル環境用に AmazonLinux2023 のイメージを引っ張ってきて、 FuelPHP の wellcom ページが動くところまで構築してみた。
AmazonLinux2023 で FulePHP 動かす記事があまりなかったので、自分の備忘録も兼ねて解説用の記事を残しておく。
サンプルプロジェクト
前提
docker-compose を使っているので、Docker が入っていること。
また、wellcom ページが表示されるところまでを目標としているので、DB については一切触れていない。
Container (サービス)について
サンプルプロジェクトの docker-compose.yml を見てもらえれば分かると思うが、一応どういう立て付けでサービス定義しているか説明しておく。
docker-compose.yml
┝ app #php,php-fpm,fuelphp を入れるアプリケーションサーバー
└ nginx #http のリクエストを受け取って php-fpm と通信するサーバー
各種ファイルの説明
docker-compose.yml
nginx が立ち上がるときに app サービスの php-fpm が起きている必要があるので、depends_on を設定している。
ports の設定は、cgi-fcgi コマンドを使ってホスト PC から php-fpm 単体で動作確認するために解放しただけで、nginx サービスのコンテナからアクセスするだけなら不要。
version: '3'
services:
app:
build: ./docker/app
volumes:
- ./:/var/www
ports:
- 9000:9000
nginx:
build: ./docker/nginx
ports:
- 9090:80
volumes:
- ./docker/nginx:/etc/nginx/conf.d
depends_on:
- app
docker/app/Dockerfile
まず、PHP について、そもそも AmazonLinux2023 用のライブラリのリポジトリでは、PHP 8.1, 8.2 のみであり、それ以前のバージョンに関しては、remi レポジトリから取得するか自分でビルドする必要がある。今回は、自分でビルドしている。PHP をビルドする際、--with-openssl オプションをつけているのは、PHP のパッケージマネージャーである composer をインストールするためにつけている。
次に --with-openssl で必要になる openssl について、AmazonLinux2023 には元々 openssl3 が入っているが、下位互換がないため 1.1.1 を自分でビルドしてインストールしている。
FROM public.ecr.aws/amazonlinux/amazonlinux:2023.4.20240611.0
ENV PHP_VERSION=7.3.1
RUN dnf -y update
RUN dnf install -y tar gzip make gcc wget libxml2-devel bzip2-devel curl-devel readline-devel libxslt-devel less vim procps-ng perl-core
RUN wget https://www.openssl.org/source/openssl-1.1.1u.tar.gz
RUN tar -xzvf openssl-1.1.1u.tar.gz
WORKDIR /openssl-1.1.1u
RUN mkdir -p /root/lib/openssl
RUN ./config --prefix=/root/lib/openssl
RUN make
RUN make install
RUN echo "/root/lib/openssl/lib/" >> /etc/ld.so.conf.d/openssl-1.1.1u.conf
RUN ldconfig
WORKDIR /
RUN wget https://www.php.net/distributions/php-$PHP_VERSION.tar.gz
RUN tar -xzvf php-$PHP_VERSION.tar.gz
RUN mv php-$PHP_VERSION php
WORKDIR /php
RUN ./configure --with-bz2 --enable-calendar --with-curl --enable-exif --enable-ftp --with-gettext --enable-mbstring --with-mysqli --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-pcntl --with-pdo-mysql --disable-posix --with-readline --enable-sockets --enable-wddx --with-xmlrpc --with-xsl --with-zlib --enable-fpm --with-openssl=/root/lib/openssl/
RUN make install
COPY php-fpm.conf /usr/local/etc/php-fpm.conf
COPY www.conf /usr/local/etc/php-fpm.d/www.conf
WORKDIR /
RUN wget 'https://getcomposer.org/installer' -O 'composer-setup.php'
RUN php composer-setup.php --install-dir=/usr/local/bin --filename=composer
WORKDIR /var/www
CMD [ "php-fpm" ]
Nginx
nginx については、特別なことはしていないため、サンプルプロジェクトを参照されたし。
FuelPHP
サンプルプロジェクトには何も入れていない。
今回、PHP 7.3.1 を入れているので FuelPHP は 1.8 以降のみ対応している。
FuelPHP のインストール方法は例として以下の通り。
docker-compose exec -it app /bin/bash
wget https://fuelphp.com/files/download/36 -O fuelphp-1.8.zip
unzip fuelphp-1.8.zip
mv fuelphp-1.8/ fuelphp/ ;<- Important!!
rm fuelphp-1.8.zip
exit