35
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NIJIBOXAdvent Calendar 2019

Day 18

Google Cloud Run に Laravel アプリケーションをデプロイする

Last updated at Posted at 2019-12-17

Google Cloud Run is なに?

image.png

Google Cloud Run とは、GCP マネージド型のコンピューティング プラットフォームで、
Knative を基盤としてる、コンテナをサーバーレスで実行するための環境です。
Cloud Run は、サーバーレスとコンテナの いいとこ取りを実現します。

https://cloud.google.com/run/?hl=ja
https://cloud.google.com/blog/ja/products/serverless/knative-based-cloud-run-services-are-ga

Laravel を動かす

では試しにLaravel を動かしてみましょう

事前準備

  • GCP のプロジェクト作成
  • GCPのgcloud コマンドをインストール
  • gcloud コマンドの初期設定
  • デプロイする Laravel のプロジェクトを事前に作成

デプロイの流れ

コンテナ用の設定ファイルを作成

デプロイ用のコンテナイメージをビルドする

ビルドしたイメージを ContainerRegistry にプッシュ

プッシュしたイメージを CloudRun にデプロイ

コンテナ用の設定ファイルを作成

まずコンテナイメージのビルドに必要なファイルを作成

Dockerfile
今回は、PHP7.3 の Apacheのイメージをベースします
CloudRun で動かすコンテナは、HTTP のリクエストを 8080 ポートでリッスンしておく必要があります

Dockerfile
# composer 用
FROM composer:1.9.0 as build
WORKDIR /app
COPY . /app
RUN composer global require hirak/prestissimo && composer install

# Laravel の実行環境用のコンテナ
FROM php:7.3-apache-stretch
RUN docker-php-ext-install pdo pdo_mysql

EXPOSE 8080
COPY --from=build /app /var/www/
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
COPY [Laravelの.envファイル] /var/www/.env
RUN chmod 777 -R /var/www/storage/ && \
    echo "Listen 8080" >> /etc/apache2/ports.conf && \
    chown -R www-data:www-data /var/www/ && \
    a2enmod rewrite

Apacheの設定ファイル

000-default.conf
<VirtualHost *:8080>

  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/public/

  <Directory /var/www/>
    AllowOverride All
    Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

デプロイ用のコンテナイメージをビルド and ContainerRegistry にプッシュ

gcloud の以下のコマンドを、Dockerfile のあるディレクトリで叩く

$ gcloud builds submit --tag gcr.io/[GCPのプロジェクト ID]/[イメージ名]

コンテナイメージのビルド後 GCP ContainerRegistry にイメージがプッシュされる

image.png

Cloud Run へデプロイ

ContainerRegistry の画面から プッシュしたコンテナイメージを選択し
Cloud Run へのデプロイ を選択する

image.png

デプロイ時に、 ローケーション、サービス名、認証について設定し、デプロイを実行する

確認

デプロイ画面で作成されたURLを確認

image.png

URLにアクセスして、Laravel で作成したアプリケーションを確認
image.png

まとめ

自分でコンテナイメージを作るため FaaS 特有の、言語縛りや、ライブラリの制限、
ベンダー特有のコーディング方法への制限がない、という点に大きな魅力を感じました。
コンテナをサーバレス化する場合の組み合わせとして、FaaS 以外の選択肢という可能性を大きく感じました!

参考

35
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?