ChromebookだけどGoogleCloudPlatformにDjango入れて遊ぶ

主に思い出を残すためのメモ。

# サーバ準備

GCP(GoogleCloudPlatform)の無料枠を利用する。 
基本的にはGoogleアカウントがあればOKだが、無料枠のみの利用でもクレジットカードの登録が必要なので少し心理的にハードルが高い。

1. [GoogleCloud](https://cloud.google.com/)を開く。
1. 「無料トライアル」で使い始める。名前とかクレジットカードとかの登録とかする。  
![01_GCPトップ - Edited.png](https://qiita-image-store.s3.amazonaws.com/0/250012/f65eb0f7-4915-0fc8-12ad-aae5ec2bc818.png)
1. GCMのコンソールが開くので、[≡]-[コンピューティング]-[Computer Engine]-[VMインスタンス]からインスタンスを作成。
 1. 名前は適当
 1. リージョンはus（無料のため）
 1. マシンタイプはmicro（無料のため）
 1. ブートディスクはCentOS7（yumりたいから）
 1. ディスクは30GBにしておく  
![02_インスタンスを作成.png](https://qiita-image-store.s3.amazonaws.com/0/250012/fec9f642-01f8-0677-e277-15ec02716558.png)
1. 同画面の下の方、[管理、ディスク、ネットワーク、SSH 認証鍵]-[ネットワーキング]-[ネットワークインタフェース]-[外部IP]からIPアドレスを作成する（静的IPにする）  
 **静的IPアドレスは扱いによってお金が掛かる場合があるので注意。  
  インスタンスを消したら静的IPアドレスも開放してください。**
 1. このIPはあとで使うから覚えておく。  
![03_IPアドレスを作成.png](https://qiita-image-store.s3.amazonaws.com/0/250012/02020f4f-3c2e-a36f-b381-695bcf6fc2d0.png)

# サーバへのアクセス

前項で作成した[VMインスタンス]の画面から「SSH▼」のところを押すとSSH接続できる。

![04_SSH接続.png](https://qiita-image-store.s3.amazonaws.com/0/250012/07f9d10e-cd1f-908e-8ea2-399b7305d2a4.png)


# 各種インストール

参考：[[Qiita] CentOS7でとりあえずDjangoを動かしてみたので、その手順を残す](https://qiita.com/N_yps/items/ecfd2a3b958d9c9b3a02)

ここからはコマンドベースで。
とりあえず適当にワークディレクトリを作る。 

`mkdir dev`
`cd dev`

Pythonのバージョン確認してみたり。

`python --version`

**以降、GCEのVMインスタンスだとsudo付けないと権限エラーが起きるコマンドが多いので注意。**

Python3、pipのインストール
--

`sudo yum install https://centos7.iuscommunity.org/ius-release.rpm`
`sudo yum install python36u`
`sudo yum install python36u-pip`

バージョン確認。

`python3.6 --version`

インストール前にyumできるpython調べる場合は

`sudo yum list|grep python3`

どうしても最新のPythonの状況とか気になる人は[ここ](https://www.python.org/downloads/)を見る。

Djangoのインストール
--

`sudo pip3.6 install Django`

# Djangoのプロジェクト作成

今回はプロジェクト名「apply」でやってます。 

一応Django用にもう一個掘っておく。 

`mkdir django`
`cd django`

`sudo django-admin startproject apply`

以下のフォルダ、ファイルが作成される。

```
apply
├ apply
│ ├ __init__.py
│ ├ __pycache__
│ ├ settings.py
│ ├ urls.py
│ └ wsgi.py
└ manage.py
```

# Webサーバ起動

プロジェクトのルートディレクトリに移動。 

`cd apply`

`sudo python3.6 manage.py runserver`

# アクセス確認（内部から）

別の窓からサーバにSSH接続して以下コマンドを叩く。

`curl 127.0.0.1:8000`

ずらずらとHTMLが出てきたら成功。一応タイトルだけ見ておく。

```
<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Django: the Web framework for perfectionists with deadlines.</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" type="text/css" href="/static/admin/css/fonts.css">
        <style type="text/css">
          body, main {
            margin: 0 auto;
          }
```

あと起動したほうの窓にアクセスログが表示されているはず。200ならOK。

`[22/Jun/2018 02:31:47] "GET / HTTP/1.1" 200 16348`

# アクセス確認（外部から）

とりあえず動いているのを止める。

`Quit the server with CONTROL-C.`ということなので`Ctrl+C`で止める。

## ファイアウォールへの穴あけ

GCMコンソールを開く。

[≡]-[ネットワーキング]-[VPCネットワーク]-[ファイアウォール ルール]でtcp:8000ポートを開けておく（Djangoでバインドするとこ）

## Djangoの許可設定

setting.pyを開いて以下を変更する。

`ALLOWED_HOSTS = []`
↓
`ALLOWED_HOSTS = ['サーバの静的IP']`

## URLバインドを外して起動

以下コマンドで起動しなおす。

`sudo python3.6 manage.py runserver 0.0.0.0:8000`

## ブラウザでアクセス

ローカル環境から適当なブラウザで以下のURLを開く。

`http://サーバの静的IP:8000`

なんかDjangoのスタートページみたいのが開いたら成功。  
![Djangoスタートページ - Edited.png](https://qiita-image-store.s3.amazonaws.com/0/250012/0a549bb4-853c-e57a-ad43-10557d1bb6f7.png)

## 遊び終わったら片付けましょう

とりあえず試すために色々とノーガードなので、終わったらDjango落としてインスタンスも止めてしまったほうが安全です。
妙なアタックを食らったりするとお金が掛かる可能性があるのでご注意ください。

# おまけ　課金データを出力させておく

Djangoでページ表示するのには関係ないですが、GCPの無料枠で本当にお金かかってないか不安になると思います。
以下手順で課金データを毎日報告してもらえるので、２〜３日確認して安心しましょう。

1. GCPコンソールの[≡]-[Storage]でバケットを作成する。
 1. 名前は適当
 2. デフォルトのストレージクラスはRegional（無料のため）
 3. 場所はus（無料のため）  
![05_バケット作成.png](https://qiita-image-store.s3.amazonaws.com/0/250012/d956e1bf-6dad-107e-8588-d2d935e4fe2c.png)
2. GCPコンソールの[≡]-[お支払い]-[課金データのエクスポート]-[ファイルのエクスポート]から設定する。
 1. バケット名はさっき作ったやつ
 2. 他は適当  
![06_課金データをエクスポート.png](https://qiita-image-store.s3.amazonaws.com/0/250012/5f1cc07b-c8a8-9ab8-5417-da3161deb813.png)
3. 毎日バケットに課金データがエクスポートされるので、３日くらい待って課金されていないことを確認する。  
 **エクスポートされるのは数日前までの情報らしいので翌日に見ても何も入っていません。**  
![07_エクスポートされた課金データ１.png](https://qiita-image-store.s3.amazonaws.com/0/250012/4a442419-d205-910b-71d8-fe595ef1701c.png)