【CloudRun】Apache+Laravelの環境構築
Cloud Runを使ってApache + Laravelのアプリケーションをデプロイする方法です。(Cloud SQLについては触れていません)
Cloud Runについては過去にnoteを書いてますので見てみてください。
デプロイの流れ
分かりやすいようにざっくりイラスト化してみました
ファイル構成
srcディレクトリにはLaravelのプロジェクトコードが入っています。
Dockerfileの作成
CloudRunはDockerComposeではなくDockerfileを簡単にデプロイするサービスなので、同じコンテナにLaravelとApacheの環境を作ります。
イメージはcomposerとphp-apacheを利用します。
FROM composer:latest as build
WORKDIR /app
COPY . /app
FROM php:7.3-apache
COPY php.ini /usr/local/etc/php/
RUN apt update
RUN apt install -y git
RUN apt install -y vim
# composer install
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
EXPOSE 8080
COPY --from=build /app /var/www/
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
RUN chmod 777 -R /var/www
RUN echo "Listen 8080" >> /etc/apache2/ports.conf
RUN chown -R www-data:www-data /var/www
RUN a2enmod rewrite
1行目の as build という記載でイメージに対して名前を付けれます。ここのbuildが13行目のCOPY --from=build とリンクしています。
また、CloudRunはポート8080にする必要があるので、16行目でポートを指定しています。
Apacheの設定ファイル作成
000-default.confを作成します。先述したとおりポートを8080で設定します。
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/src/public
<Directory /var/www/>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
ローカル環境構築
開発時にはローカルのファイルと同期したいので、開発用にdocker-composeを作成します。volumesでアタッチしています。
# ローカル確認用
version: "3.7"
services:
php:
build:
context: .
volumes:
- "./:/var/www"
ports:
- 8080:8080
開発用にlocalhost起動
作成したdocker-composeをbuildします。
# build
docker-compose build
# デーモン起動
docker-compose up -d
# コンテナに入る
docker exec -it [コンテナ名] bash
# 初回のみインストール
composer install
これで、 http://localhost:8080 へアクセスするとHelloWorldできます。
ContainerRegistryにPush
開発が出来たらイメージをPushします。(事前にgloud initして初期設定をしておいてください)
docker build . -t [dockerhubのアカウントID]/[リポジトリ名]
docker tag [dockerhubのアカウントID]/[リポジトリ名] gcr.io/[GCPのProject ID]/[リポジトリ名]
docker push gcr.io/[GCPのProject ID]/[リポジトリ名]
CloudRunでデプロイ
Google Cloudのconsoleでからデプロイします。先程PushしたコンテナイメージのURLが選択できるようになっているハズです。
コンテナポートは8080にしてください。他は特に設定変更せずデプロイ実行します。 デプロイが完了するとすぐにURLが発行されます。
コードの修正をする場合
ローカルにあるイメージを確実に消してから再度ビルドしてください。そうしないと「ちゃんと反映されないー」となりました。
docker rmi -f $(docker images | grep [リポジトリ名] | awk '{print $3}' | xargs)
こんな感じで一気に消して良いと思います。-f しているので最初はdocker images | grep [リポジトリ名] で削除対象を確認してください。
料金について
CloudRunには無料枠があります。どんどん活用しましょう!
さいごに
CloudRunを使いたいな〜とずっと思っていたので、今回チャレンジ出来て良かったです。DockerやApacheなど最初の環境作る機会はそんなにないので苦戦しました・・。
一旦動く環境を作れば、Laravelのコードを書いてすぐデプロイ→URL発行されるのでGCPの設定は楽でした。