Cloud RunでPHPサービスをデプロイする

2022-02-21

GCPのCloud Runというサービスのチュートリアルをやってみたので、メモを残します。

Cloud SDKをインストール

MacOSのインストール方法は、パッケージをダウンロードして、ユーザーのホームディレクトリ(/Users/{username})に展開する方法が推奨されているので、そのようにしました。

インストール時に

shell
1./google-cloud-sdk/install.sh

を実行し、.zshrcにgcloudコマンドのためのpathを追加しました。

その後、gcloud initコマンドで初期化を行いました。

プロジェクトファイルの作成

それでは本題。

PHPファイルの作成

Hello Worldと表示するPHPのファイル(index.php)を任意のプロジェクトルートに作成します。

php
1<?php
2$name = getenv('NAME', true) ?: 'World';
3echo sprintf('Hello %s!', $name);

Hello 環境変数NAMEの値がなければ、デフォルト値としてworld$nameに入るというプログラムになっています。

Dockerfileの作成

dockerfile
1# Use the official PHP image.
2# https://hub.docker.com/_/php
3FROM php:8.0-apache
4
5# Configure PHP for Cloud Run.
6# Precompile PHP code with opcache.
7RUN docker-php-ext-install -j "$(nproc)" opcache
8RUN set -ex; \
9 { \
10 echo "; Cloud Run enforces memory & timeouts"; \
11 echo "memory_limit = -1"; \
12 echo "max_execution_time = 0"; \
13 echo "; File upload at Cloud Run network limit"; \
14 echo "upload_max_filesize = 32M"; \
15 echo "post_max_size = 32M"; \
16 echo "; Configure Opcache for Containers"; \
17 echo "opcache.enable = On"; \
18 echo "opcache.validate_timestamps = Off"; \
19 echo "; Configure Opcache Memory (Application-specific)"; \
20 echo "opcache.memory_consumption = 32"; \
21 } > "$PHP_INI_DIR/conf.d/cloud-run.ini"
22
23# Copy in custom code from the host machine.
24WORKDIR /var/www/html
25COPY . ./
26
27# Use the PORT environment variable in Apache configuration files.
28# https://cloud.google.com/run/docs/reference/container-contract#port
29RUN sed -i 's/80/${PORT}/g' /etc/apache2/sites-available/000-default.conf /etc/apache2/ports.conf
30
31# Configure PHP for development.
32# Switch to the production php.ini for production operations.
33# RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
34# https://github.com/docker-library/docs/blob/master/php/README.md#configuration
35RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

php:8.0-apacheなので、PHP8系のイメージを使っています。

最後の行はPHPの本番環境の設定を適用するためにあります。

dockerignoreの追加

.dockerignoreファイルを追加します

1# The .dockerignore file excludes files from the container build process.
2#
3# https://docs.docker.com/engine/reference/builder/#dockerignore-file
4
5# Exclude locally vendored dependencies.
6vendor/
7
8# Exclude "build-time" ignore files.
9.dockerignore
10.gcloudignore
11
12# Exclude git history and configuration.
13.gitignore

Cloud Runにデプロイ

後は以下のコマンドでデプロイされます。

shell
1gcloud run deploy

権限の有効化等を聞かれますのですべてyesで答える必要がありました。

Tech Blog

avatar

ソフトウェアエンジニア。1989年生まれ大阪府岸和田市在住のフリーランス。PHP、バックエンド開発が得意。テニス、フットサル、だんじり、ケツメイシ、競馬、プログラミングが好き!最近はWebフロントエンド沼にハマってます!

Copyright © 2022. Junpeko5's Tech Blog