Github管理下のDjangoプロジェクト(mysql使用)をherokuに構築する(Part2)

:::note warn
2023/02/01現在、herokuは無料プランの提供を終了しており、有料プランのみの提供となっています。
:::

[この記事](https://qiita.com/tanipen/private/6193d6a975fecc42b303)の続きです。

# 2. GitHubの設定
次に、先ほど書いたコードをGitHubにアップします。
なお、本記事ではローカル環境へのGitインストール、GitHubアカウント作成等のステップは省略します。
なお、heroku Gitを使う場合はこの項目はスキップしてください。

## 2-1. リポジトリ作成
[いつものページ](https://github.com/new)から新たに作成。
今回は既存のフォルダからそのままコミットするので空のリポジトリを作ります。

## 2-2. 1で作ったコードのpush
[heroku_pj]の作業ディレクトリで以下のコマンドを叩きます。

```zsh:zsh
% git init
% git remote add origin [リポジトリのSSHリンク]
% git add .
% git commit -m "Initial commit"
% git push -u origin main
```

GitHubでやることは以上です。

# 3. heroku設定
続いてはherokuの設定です。
## 3-1. 初期設定
herokuを使ったことがあり、heroku CLIのインストールが済んでいる人は飛ばしてください。

### 3-1-1. herokuアカウントの作成
[herokuのSign upページ](https://signup.heroku.com)

herokuアカウントにクレジットカードを未登録の場合は、必ず登録してください(MySQLの利用に必要です。PostgreSQLでいい場合は不要)。

## 3-1-2. heroku CLIのインストール
ローカルにheroku CLIをインストールします。

```zsh:zsh
% brew tap heroku/brew && brew install heroku
```

## 3-2. herokuアプリケーションの作成
今回のサイトを作成します。

```zsh:zsh
% heroku login
# ここでブラウザが開き、ログインする
% heroku create [heroku-pj]
```

## 3-3. ClearDBの設定
herokuでMySQLを利用するには、[ClearDB](https://elements.heroku.com/addons/cleardb)と呼ばれるサービスを用いるのが便利です。

### 3-3-1. ClearDBをherokuアプリケーションに追加
herokuアプリケーションにClearDBを追加します。今回は`Ignite`という無料プランを適用します。

```zsh:zsh
% heroku addons:create cleardb:ignite
```


### 3-3-2. DB情報を環境変数に設定
続いて、DBの情報をherokuアプリケーションの環境変数に登録します。
ここで登録した値はコード上の`os.environ['key']`で取得できます。

まず、必要な情報を取得します。`heroku config`で確認できる`CLEARDB_DATABASE_URL`の値を確認してください。

```zsh:zsh
% heroku config
=== [heroku-pj] Config Vars
CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
```

上記の値を以下のように設定します。

```zsh:zsh
% heroku config:add DB_CONNECTION='mysql'
% heroku config:add DB_NAME='[データベース名]'
% heroku config:add DB_USERNAME='[ユーザー名]'
% heroku config:add DB_PASSWORD='[パスワード]'
% heroku config:add DB_HOSTNAME='[ホスト名]'
% heroku config:add DB_PORT='3306'
% heroku config:add CLEARDB_DATABASE_URL='mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]'
```

## 3-4. その他の環境変数の設定
```zsh:zsh
% heroku config:add SECRET_KEY='[settings.pyに書かれていたSECRET_KEY]'
% heroku config:add DJANGO_SETTINGS_MODULE='heroku_pj.settings.production'
```

- `DJANGO_SETTINGS_MODULE`の設定は、heroku環境で`python manage.py`コマンドを使用するのに必要になります。

## 3-5. GitHubとの連携設定
heroku Gitを使わずに、herokuアプリケーションをGitHubに連携する方法です。
この方法により、GitHubのmainブランチにpushされるたびに自動デプロイを走らせることができます。

1. ブラウザで[heroku.com](heroku.com)にアクセスし、ログイン
2. ダッシュボードから今回作成したアプリケーションを開き、Deployタブを選択
3. 「Connect to GitHub」をクリックし、GitHubの認証にログイン
4. 認証したら以下のテキストボックスにリポジトリ名を入力し、「Search」をクリック
![Connect to GitHub_Search.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614520/5c0b474c-a536-c580-0b05-de95723012e1.png)

5. 表示されたリポジトリを「Connect」する
6. 「Automatic deploys」の項目で「Enable Automatic deploys」をクリック
![Enable Automatic deploys.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614520/0f36b7d6-764a-4260-f214-1f21401a472f.png)

これで自動デプロイの設定が完了です。
今回は既にリモートにpushしているので、手動でデプロイします。
やり方はManual Deployから「Deploy Branch」をクリックするだけです。
![Manual Deploy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614520/6ad2ee5c-0892-dd89-4fe9-778a4128189c.png)

# 最後に
これで一通りのデプロイは完了となります。

気が向いたらトラブルシューティングについても書きたいと思います。