Django Girls Tutorial で Heroku ではなく PythonAnywhere にデプロイする

Django Girls Tutorial の [英語版](https://tutorial.djangogirls.org/en/deploy/) では Heroku ではなく、 [PythonAnywhere](https://www.pythonanywhere.com) を使ってデプロイしている。これが、 Heroku よりもかなり簡単だったのでそのメモ。

Django Girls Tutorial [英語版](https://tutorial.djangogirls.org/en/)、[日本語版](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/)ともに、 2018/05/28 時点の情報を元にしています。

# 準備
「ログインページを作ろう（Django admin）」までは、[日本版](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/django_admin/)とほぼ同じ[^1]だが、 `mysite/settings.py` の最後に以下の行を追加する。

```python:blog/models.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com']
```

# デプロイ!
## Git
Git はインストールされているとする。

### Git リポジトリの作成

日本語版[デプロイ！](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/deploy/)の Git の項目と同様に、 
Git リポジトリの作成：

```shell-session:コマンドライン
$ git init
Initialized empty Git repository in ~/djangogirls/.git/
$ git config --global user.name "Your Name"
$ git config --global user.email you@example.com
```

`.gitignore` の作成：

```:.gitignore
*.pyc
*~
__pycache__
myvenv
db.sqlite3
/static
.DS_Store
```

最初のコミット：

```shell-session:コマンドライン
$ git add --all .
$ git commit -m "My Django Girls app, first commit"
```

を行う。

### GitHub にコードをプッシュ
[GitHub.com](https://github.com) に行き、ユーザー名、メールアドレス、パスワードを入力し、"Sign up for GitHub" をクリックしてアカウントを作成する。

ログイン後、"Start a project" をクリックし、新しいリポジトリを作成する。ここではリポジトリ名を "my-first-blog" とし、 "initialize with a README" のチェックボックスは外したままとする。また、 "Add .gitignore:" と "Add a license:" も "None" のままとして、"Create repository" をクリックする。

![new_github_repo.png](https://qiita-image-store.s3.amazonaws.com/0/206610/073bc4c7-c3b3-f2c1-707d-e9f1a280c574.png)

次のページで、作成されたリポジトリの URL （`https://github.com/<your-github-username>/my-first-blog.git`）を覚えておく。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/206610/e3dc6a87-2643-0494-d3dd-718e6c0a21b9.png)


コマンドラインで以下のコマンドを実行し、コードを GitHub にプッシュする。

```shell-session:コマンドライン
$ git remote add origin https://github.com/<your-github-username>/my-first-blog.git
$ git push -u origin master
```

## PythonAnywhere の設定
### アカウントの作成
[pythonanywhere.com](https://www.pythonanywhere.com/) に行き、右上の "Pricing & signup" をクリックし、次のページ中央の "Create a Beginner account" をクリックする。ユーザー名、メールアドレス、パスワードを入力し、"Register" をクリックしてアカウントを作成する。

### API トークンの作成
PythonAnywhere にログイン後、右上の "Account" をクリックし、 "API Token" タブ、 "Create a new API token" の順にクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/206610/6358c363-fe31-a743-b4ad-111c8d9b42c9.png)

### PythonAnywhere の設定
PythonAnywhere の [Dashboard](https://www.pythonanywhere.com/) に戻り、左の "Consoles" 内の "$ Bash" をクリックする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/206610/8aa7f5d2-fd26-c113-3b86-d45cf6af8a5d.png)

表示されたコマンドライン（以下、PythonAnywhereコマンドラインと呼ぶ）上で以下のコマンドを実行し、 PythonAnywhere 用のツールをダウンロードする。

```shell-session:PythonAnywhereコマンドライン
$ pip3.6 install --user pythonanywhere
```

次に、以下のコマンドで先ほど GitHub にプッシュしたコードをダウンロードする。

```shell-session:PythonAnywhereコマンドライン
$ pa_autoconfigure_django.py https://github.com/<your-github-username>/my-first-blog.git
```

このコマンドは終了まで少々時間がかかるが、

- コードのダウンロード
- virtualenv による Python 環境の作成
- `manage.py migrate` コマンドの実行

まで自動的に行ってくれる。

`pa_autoconfigure_django.py` が無事終了したら、

```shell-session:PythonAnywhereコマンドライン
$ python manage.py createsuperuser
```

で blog のスーパーユーザーを作成する。

## ページの表示
PythonAnywhereコマンドラインページの右上のハンバーガーメニューから、 "Web" をクリックする。表示された画面上部の "Configuration for" に続くリンク "XXX.pythonanywhere.com" の URL に `admin/` を付けてページを開くと、 PythonAnywhere にデプロイされた blog ページが表示される。



[^1]: たとえば、[blog/models.py](https://tutorial.djangogirls.org/en/django_models/#creating-a-blog-post-model) 内の `models.ForeignKey` の引数が違うが、第二引数はデフォルト値になっているので django 1.11 を使用している場合には問題ないと思われる（[Django、on_deleteを使う(django2.0から必須)](https://torina.top/detail/297/)）。