DjangoブログDeployまでの道 (1/2)

こんにちは、ここでは初心者がDjangoで作成したブログもどきを
GoogleCloudPlatformにデプロイする過程を記録しています。

環境は以下となっています。
###OS:Windows Python:3.6.8 Django:2.2.1

##まずはDjangoでブログもどきの作成　

まずは、最小限の形を作りGAEへのデプロイを目指します。


今回はブログなのでファイル名を<ブログ>とし作成し移動します。

```python:command
mkdir blog
cd blog
```

次に仮想環境の作成（今回はvenv）
そして仮想環境に入り込みます。


```python:command
python -m venv venv
cd venv
Scripts\activate
```

そして仮想環境にDjangoをインストールします。

```python:commmand
pip install django
```

次にプロジェクトの作成をして移動します。

```python:command
django-admin startproject blogproject
cd blogproject
```

runserverした際のブラウザからの
ドメインアクセスを許可するためにsettin.pyを編集します。

```python:settin.py
ALLOWED_HOSTS = ['*']
```

そしてサーバーを立ち上げます。

```python:command
python manage.py runserver
```

一旦、一息
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/84e8b620-b861-7a11-9164-cc24b4c27d78.png)

次にGoogleCloudPlatformに飛び
https://console.cloud.google.com/start?hl=ja

アカウント登録を済まし、プロジェクトを作成から
blogappというプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/074ac5b5-0499-6fc4-5d49-30b69866c10c.png)

その後、作成したプロジェクトを選択し、
左のメニューバーからApp Engineを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/bce64fcb-9188-c2fc-4303-9ed9f5f74f43.png)

今後の作業にSDKが必要なため、右側のリンクからインストールしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/6d25c920-c1fe-9bfa-2ddc-fb3afaafd1dd.png)

次にトップページを作成します。

manage.pyがあるblogprojectにtemplatesフォルダを作成し、
index.htmlを作成します。

```html: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を表示できるようにします。

```python:url.py
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に追記します。

```python:setting.py
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    #BASEDIRであるblogappファイル直下のtemplatesにあると共有
```

そして再度runserverを行います。

```python:command
python manage.py runserver
```

![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/4ec64c3a-3456-2f1b-9cc2-8ff9b5c46683.png)

アクセスすると、うまく表示できています。

##ローカルからGAEへのデプロイに挑戦！
まずGAEでの使用に向けて、前回までに作成した大元のblogprojectの中に
app.yamlというファイルを作成します。

```app.yaml
runtime: python37 #使用言語
entrypoint: gunicorn -b :$PORT blogproject.wsgi:application #wsgiまでのpath的な？

#デプロイした後にアクセスできるようにします。
handlers:
  - url: .*
    script: auto

```
gunicornを使用するためインストールし、
次にGAE側にもDjangoをインストールするために
app.yamlと同じ階層にrequirments.txtを作成します。

```command:command
pip install gunicorn
pip freeze > requirements.txt
```

次にGcloudにログインするため以下を入力します。

```command:command
gcloud auth login
```

そして、自分のプロジェクトidを確認し、接続するために以下を入力する。

```command:command
gcloud app deploy --project <ここにproject-idを入れる>
```

choiseは何でも良いと思いますが２を選択します。
そして出てくる質問にyesを選択します。

アップロードができたかと思えばできなかったです。

```command
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ユーザーを苦しめれば気が済むのか？
https://qiita.com/hirocueki2/items/1789998804c4e7ec1ef3

そして、再度実行しましたが、またエラーです。

```command
Enable it by visiting https://console.developers.google.com/apis/api/cloudbuild.googleapis.com/overview
```

これは、無料トライアルに登録したら解決しました。
そして、ページに飛ぶと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/568df05f-fee6-5925-40c6-e07ff88f2735.png)
エラー...

エラー内容を以下で確認します。

```python:command
gcloud app logs tail --project=<プロジェクト名>
```

すると

```python:command
/bin/sh: 1: exec: gunicorn: not found
```

あれ、gunicornはインストールしてるし、requirments.txtにも入ってるはず。

あ、requirments.txtになってました（汗）
requirements.txtに変更！

再度トライしますと...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/c0c1bdd5-1813-1532-0d6a-5d44529c35cc.png)

オーマイガー！？

エラーチェックをします。

```python:command
OSError: No translation files found for default language utf-8.
```

原因はsetting.pyのLANGAGE_CODEをutf-8にしてたことですね。
jaに設定して再度トライ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/d8e4ab69-c687-4f4f-c3c7-d41cc1496695.png)

はいはい、エラーはコードミスですかね？
探してみたところ全角スペースをしている部分がありましたので直しました。

そして再度トライ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214013/b3400e54-2f5d-c2bf-fce3-b35cf718d43d.png)

やった！
デプロイできました！

次回はGCPのデータベースに接続していきます。
https://qiita.com/k7daiki/items/a5f5e6711fe28366ed73