
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が世の中に広まりますように。
Kohei Kondo