Laravel6をCloud RunでServerlessで動かす

Laravel6をCloud RunでServerlessで動かす

コスパが良いインフラを作るのが好きすぎるので、

Laravel6とCloud Runを使いServerlessにJust In Timeで動く Laravelを作って見ました。

Laravel

今回はLaravel6を使用。

いつもはNginxとLaravelでコンテナを分けて、それらが連携する形で動かすのですが。

今回は、Cloud Runの特性上1コンテナしか扱えないということで、

Apache & Laravel の組み合わせて作っていく。

Dockerfile

FROM composer:latest as build
WORKDIR /app
RUN composer create-project --prefer-dist laravel/laravel blog
FROM php:7.3-apacheEXPOSE 8080
COPY --from=build /app /var/www/COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
RUN chmod 777 -R /var/wwwRUN echo "Listen 8080" >> /etc/apache2/ports.conf
RUN chown -R www-data:www-data /var/www

できる限り小さいimageにしたいため、composerはMulti Stage Buildを使い必要なライブラリの中身だけをDeploy Imageに含めるようにした。

あとはCloud Runは8080ポートで受けるコンテナである必要があるため、それ用に設定していく。

000-default.conf

<VirtualHost *:8080>

ServerAdmin webmaster@localhost
    DocumentRoot /var/www/blog/public
    
ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

docker-compose.yml

version: "3.7"
  services:
    php:
      build:
        context: .
      ports:
        - 8080:8080

ローカルで挙動を確認したいときはこのようなdocker-compose.ymlファイルを書いておいて、確認する。

GCRにPUSH

gcloud builds submit --tag gcr.io/YOUR-PROJECT-ID/laravel-cloud-run

Dockerfileと同一Dirで上記コマンドを実行してGCRにImageをpushする。

Cloud Runにデプロイ

これで準備完了。

あとはCloud Runにデプロイするだけ、

Image URLとRegion、Authなしでアクセスできるように設定しておく。

そして、出てくるURLにアクセスすると…

表示できました。

コールドスタンバイからのアクセスも申し分ない。

開発者Kit作りました

GitHub - kooooohe/LaravelOnCloudRunDevKit: This is a kit to deploy and develop Laravel on Cloud run
This is a kit to deploy and develop Laravel on Cloud run - GitHub - kooooohe/LaravelOnCloudRunDevKit: This is a kit to deploy and develop Laravel on Cloud run

Laravel を Cloud Runで動かすための開発者Kitを作りました。

もっとCloud Runが世の中に広まりますように。