目次
前提
・Djangoのプロジェクトが作成してある
・GCP上でプロジェクトが作成してある(プロジェクトID取得)
.
├── Dockerfile
├── README.md
├── cloudbuild.yaml
└── code
├── config
├── core
├── manage.py
└── requirements.txt
全体概要
・Dockerfileを作成
【ローカルから手動でデプロイ】
・APIを有効化(Container Registory, Cloud Run)
・Container Registoryへの接続を認証
・Build image for Container Registory
・Push image to Container Registory
・Deploy image to Cloud Run
【Cloud Buildで自動でデプロイ】
・APIを有効化(Cloud Build)
・サービスアカウント権限の認証
・Create cloudbuild.yaml
・Exec Cloud Build
【Cloud SQLとCloud Runを接続】
・GCPでの操作
・Cloud-RunにCloud-SQLのインスタンスを登録
・環境変数を登録
【ローカルからマイグレーション】
・Cloud-SQL-proxyをインストール
・Cloud-SQLインスタンス起動
・マイグレーションを実行
ローカルから手動でデプロイ
Create Dockerfile
FROM python:3.7
ENV PYTHONDONTWRITEBYTECODE=1
# copy project
WORKDIR /code
COPY ./code ./
# Install Python Libraries
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["gunicorn", "-b", ":8000", "config.wsgi:application"]
Build image for Container Registory
[GCRイメージ名] = asia.gcr.io/[プロジェクトID]/[イメージ名]
$ docker build -t [GCRイメージ名] -f [Dockerfile名] [Dockerfileのパス]
Push image to Container Registory
$ docker push [GCRイメージ名]
Deploy image to Cloud Run
$ gcloud run deploy --image [GCRイメージ名] --port 8000 --platform managed
Cloud Buildでデプロイを自動化
サービスアカウント権限の認証
参考:公式サイト
Cloud Runのステータスを「有効」に変更します。
Create cloudbuild.yaml
プロジェクト直下にcloudbuild.yamlを作成します。
記述の内容としては、
build image -> push image -> deploy image
を順番に実行するような記述をしています。
steps:
# [build or rebuild image]
- name: 'gcr.io/cloud-builders/docker' # standard container name
# exec command
entrypoint: docker
args: ['build', '-t', '[GCRイメージ名]', '-f', '[Dockerfile名]', '[Dockerfileのパス]']
# [push image]
- name: 'gcr.io/cloud-builders/docker'
entrypoint: docker
args: ['push', '[GCRイメージ名]']
# [deploy image]
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: gcloud
args: ['run', 'deploy', '[プロジェクトID]', '--region', 'asia-northeast1', '--image', '[GCRイメージ名]', '--port', '8000', '--platform', 'managed']
# GCR image name
images:
- [GCRイメージ名]
以下のコマンドでcloudbuild.yaml内の記述が実行されます。
$ gcloud builds submit
Cloud SQLとCloud Runを接続
参考:公式サイト
GCPでの操作
・Cloud SQL Admin APIを有効化
・SQLインスタンスを作成
・ユーザー作成
・データベース作成
Cloud-RunにCloud-SQLのインスタンスを登録
$ gcloud run services update [サービス名] --add-cloudsql-instances [インスタンス接続名]
環境変数を登録
$ gcloud run services update [サービス名] \ --set-env-vars \ INSTANCE_CONNECTION_NAME=[インスタンス接続名],\ MYSQL_DATABASE=[データベース名],\ MYSQL_HOST=[Cloud-SQLのパブリックIPアドレス],\ MYSQL_PORT=5306,\ MYSQL_USER=[ユーザー名],\ MYSQL_PASSWORD=[パスワード],\ MODE=production
ローカルからマイグレーション
参考:公式サイト
Cloud-SQL-proxyをインストール
$ curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
$ chmod +x cloud_sql_proxy
Cloud-SQLインスタンス起動
$ ./cloud_sql_proxy -instances=”[インスタンス接続名]”=tcp:5306
インスタンスが起動したのが確認できたら、ターミナルで別のタブを開いて以下を実行して接続を確認します。
$ mysql -u [ユーザー名] -p –host 127.0.0.1 -P 5306
マイグレーションを実行
$ cd [Djangoのプロジェクト]
$ pipenv run python manage.py migrate