はじめに
フロントエンド React + バックエンド Django REST Framework でアプリを作成したが、ローカル環境でしか動かすことができないので、AWS EC2 インスタンス上にデプロイして外部からもアクセスができるようにする。React アプリを AWS EC2 にデプロイにて、フロントエンド側をデプロイしたので、今回はバックエンドである DRF API をデプロイすることとし、Web サーバーソフトウェアには、nginx を用いる。なお DRF API はすでに作成されていることを前提とする。【丁寧解説】秒速でもDjango 3アプリをAWS EC2で公開【Nginx, gunicorn, postgresqlデプロイ】を参考にした。
GitHub への push
デプロイ前にコードを GitHub へ push する。DB との接続情報など機密情報があるので、(レポジトリ自体を private にしているが念のため)あらかじめ別ファイルとして GitHub 上へはあげないようにする。まず環境変数の管理を行う django-environ パッケージをインストールする。
$ pip install django-environ
[Django] django-environで環境変数を管理してみる djangoを参考に .env ファイルを作成する。ここでは SECRET_KEY, DEBUG, DATABASE_URL の3項目を記述している。.env ファイルは GitHub 上にあげないように、以下のような .gitignore ファイルも合わせて作成する。
.env
次に .env ファイルに分けた情報を settings.py にて読み込むために以下のようにコードを修正する。
import environ
import os
env = environ.Env()
env.read_env(os.path.join(BASE_DIR, '.env'))
SECRET_KEY = env('SECRET_KEY')
DEBUG = env('DEBUG')
DATABASES = {
'default': env.db(),
}
以下コマンドで、必要なライブラリを requirements.txt に書き出す。
$ pip freeze > requirements.txt
$ sudo apt update
$ sudo apt install python3-pip
$ pip install --upgrade pip
$ pip install -r requirements.txt
上記までを実行したら、GitHub のリモートレポジトリに push する。
EC2 インスタンスの作成、nginx のインストールおよびセットアップ
基本的には React アプリを AWS EC2 にデプロイと同様に実行するだけなので、ここでは割愛。
DRF API の起動
GitHub に push されているアプリをクローンして起動する。まず git をインストールして、レポジトリをクローンする。
$ sudo yum -y install git
$ git clone https://github.com/<your repository>
Django アプリが動作する環境を作成するため、Python3 およびパッケージ管理ツールである pip をインストールする。
$ sudo apt update
$ sudo apt install python3 python3-pip
アプリに必要なライブラリをインストールして、起動する。
$ cd <your repository>
$ pip install -r requirements.txt
$ python3 manage.py runserver
以上で、Django アプリが起動できる。
おわりに
1つのサーバーに1つのアプリをデプロイすることができた。nginx について理解を深め、より複雑な設定等も扱えるようにしたい。