こんにちは、ここでは初心者がDjangoで作成したブログもどきを
GoogleCloudPlatformにデプロイする過程を記録しています。
環境は以下となっています。
OS:Windows Python:3.6.8 Django:2.2.1
まずはDjangoでブログもどきの作成
まずは、最小限の形を作りGAEへのデプロイを目指します。
今回はブログなのでファイル名を<ブログ>とし作成し移動します。
mkdir blog
cd blog
次に仮想環境の作成(今回はvenv)
そして仮想環境に入り込みます。
python -m venv venv
cd venv
Scripts\activate
そして仮想環境にDjangoをインストールします。
pip install django
次にプロジェクトの作成をして移動します。
django-admin startproject blogproject
cd blogproject
runserverした際のブラウザからの
ドメインアクセスを許可するためにsettin.pyを編集します。
ALLOWED_HOSTS = ['*']
そしてサーバーを立ち上げます。
python manage.py runserver
次にGoogleCloudPlatformに飛び
https://console.cloud.google.com/start?hl=ja
アカウント登録を済まし、プロジェクトを作成から
blogappというプロジェクトを作成します。
その後、作成したプロジェクトを選択し、
左のメニューバーからApp Engineを選択します。
今後の作業にSDKが必要なため、右側のリンクからインストールしておきます。
次にトップページを作成します。
manage.pyがあるblogprojectにtemplatesフォルダを作成し、
index.htmlを作成します。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>blogapp</title>
</head>
<body>
<h1>blogapp</h1>
<p>this is toppage</p>
</body>
</html>
次にurlからindexを表示できるようにします。
from django.contrib import admin
from django.urls import path
from django.views.generic import TemplateView #追記
urlpatterns = [
path('admin/', admin.site.urls),
path('', TemplateView.as_view(template_name="index.html"), name="top"),#追記
]
次にtemplatesの場所を共有するにsetting.pyのTEMPLATESに追記します。
'DIRS': [os.path.join(BASE_DIR, 'templates')],
#BASEDIRであるblogappファイル直下のtemplatesにあると共有
そして再度runserverを行います。
python manage.py runserver
アクセスすると、うまく表示できています。
ローカルからGAEへのデプロイに挑戦!
まずGAEでの使用に向けて、前回までに作成した大元のblogprojectの中に
app.yamlというファイルを作成します。
runtime: python37 #使用言語
entrypoint: gunicorn -b :$PORT blogproject.wsgi:application #wsgiまでのpath的な?
#デプロイした後にアクセスできるようにします。
handlers:
- url: .*
script: auto
gunicornを使用するためインストールし、
次にGAE側にもDjangoをインストールするために
app.yamlと同じ階層にrequirments.txtを作成します。
pip install gunicorn
pip freeze > requirements.txt
次にGcloudにログインするため以下を入力します。
gcloud auth login
そして、自分のプロジェクトidを確認し、接続するために以下を入力する。
gcloud app deploy --project <ここにproject-idを入れる>
choiseは何でも良いと思いますが2を選択します。
そして出てくる質問にyesを選択します。
アップロードができたかと思えばできなかったです。
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa1'
in position 0: ordinal not in range(128)
unicodeをasciiからutf-8に統一する必要性がありそうです。
以下を参考にしました。
Google Cloud SDKのセットアップはどこまでWindowsユーザーを苦しめれば気が済むのか?
そして、再度実行しましたが、またエラーです。
Enable it by visiting https://console.developers.google.com/apis/api/cloudbuild.googleapis.com/overview
これは、無料トライアルに登録したら解決しました。
そして、ページに飛ぶと
エラー...
エラー内容を以下で確認します。
gcloud app logs tail --project=<プロジェクト名>
すると
/bin/sh: 1: exec: gunicorn: not found
あれ、gunicornはインストールしてるし、requirments.txtにも入ってるはず。
あ、requirments.txtになってました(汗)
requirements.txtに変更!
再度トライしますと...
オーマイガー!?
エラーチェックをします。
OSError: No translation files found for default language utf-8.
原因はsetting.pyのLANGAGE_CODEをutf-8にしてたことですね。
jaに設定して再度トライ!
はいはい、エラーはコードミスですかね?
探してみたところ全角スペースをしている部分がありましたので直しました。
そして再度トライ!
やった!
デプロイできました!
次回はGCPのデータベースに接続していきます。
https://qiita.com/k7daiki/items/a5f5e6711fe28366ed73