見出し画像

【CloudRun】Apache+Laravelの環境構築

Cloud Runを使ってApache + Laravelのアプリケーションをデプロイする方法です。(Cloud SQLについては触れていません)

Cloud Runについては過去にnoteを書いてますので見てみてください。

デプロイの流れ

分かりやすいようにざっくりイラスト化してみました

画像1

ファイル構成

srcディレクトリにはLaravelのプロジェクトコードが入っています。

スクリーンショット 2020-09-10 23.45.09

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が発行されます。

画像3

コードの修正をする場合

ローカルにあるイメージを確実に消してから再度ビルドしてください。そうしないと「ちゃんと反映されないー」となりました。

docker rmi -f $(docker images | grep [リポジトリ名] | awk '{print $3}' | xargs) 

こんな感じで一気に消して良いと思います。-f しているので最初はdocker images | grep [リポジトリ名] で削除対象を確認してください。

料金について

CloudRunには無料枠があります。どんどん活用しましょう!

画像4

さいごに

CloudRunを使いたいな〜とずっと思っていたので、今回チャレンジ出来て良かったです。DockerやApacheなど最初の環境作る機会はそんなにないので苦戦しました・・。

一旦動く環境を作れば、Laravelのコードを書いてすぐデプロイ→URL発行されるのでGCPの設定は楽でした。


スキ頂けると嬉しいです〜