「DjangoアプリをAWSのEC2でデプロイしたいんだけど簡単な方法ってないの?」
NginxとUwsgiを使うと簡単にデプロイできるよ。

さて、じゃあAWSでのデプロイのやりかたを話していこうか。

AWS × NginxでDjangoをデプロイしよう

  1. AWS/EC2の中に必要なものを構築
  2. Nginx用に.confファイルを作成/編集する
  3. .iniファイルを作成/編集する
  4. Nginxとuwsgiを起動する

大きな流れとしては、上記の4つ。

下記はDjangoをデプロイするために必要なものだよ。

デプロイに必要なもの
  • Nginx
  • Uwsgi
  • Django用のPython仮想環境
  • AWS用のアカウント
  • AWS EC2 または VPS(Virtual Private Server)
  • できれば独自ドメイン

ドメインが必要な場合は、下記から取っておこう。
■ドメイン取るならお名前.com■

AWS/EC2の中に必要なものを構築する

AWS/EC2でまずやること
  1. EC2のインスタンス起動(ubuntu)
  2. セキュリティグループのインバウンドで22ポート設定
  3. セキュリティグループのインバウンドで80ポートを設定
  4. コマンドプロンプト、またはBashでSSH接続

AWSは無料枠内で十分。
下記の記事からAWSでEC2を起動しよう、Ubuntuを選択しておくこと。

そしたら、AWSにSSH接続した状態でやっていくよ。

1. Linuxサーバー(ubuntu)にNginxをいれる

まず、NginxをLinuxサーバー(EC2)にいれよう。

$ sudo apt install nginx
sudo/aptとは?
  • sudoは管理者権限でやりますよ
  • aptはパッケージ管理というもの

2. Linuxサーバー(ubuntu)にDjango用の仮想環境を作成する

次は、仮想環境を作ってPythonとDjangoのインストールしていこう。

  1. Pythonのインストール
  2. $ sudo apt install python3-venv python3-pip python3-dev
  3. Pythonの仮想環境をDjangoのプロジェクトフォルダ内(manage.pyがあるフォルダ)に作成
  4. $ python -m venv vdjango
  5. 仮想環境を起動
  6. $ . vdjango/bin/activate
  7. Djangoをインストール
  8. (vdjango)$ pip install django

3. Django用の仮想環境にuwsgiをインストールする

そしたら、Pythonの仮想環境のままUwsgiをインストールする。

(vdjango)$ pip install uwsgi

4. Firewallで特定のポートを解放する

そして、80番(http)ポートを解放しておく。

$ sudo ufw allow 80

5. Djangoのアプリをサーバーにアップロードする

FTPソフトでDjangoアプリをアップロードしておこう。
無料で使えるFFFTPがオススメ。

Nginx用に.confファイルを作成/編集する

cond.dディレクトリに『project.conf』を作成しよう。

  1. conf.dのディレクトリに移動
  2. $ cd /etc/nginx/conf.d
  3. vimでproject.confを編集
  4. /etc/nginx/conf.d$ vim project.conf
project.confの編集内容
server{
    listen 80;
    server_name crb.logss.net;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}
  • httpを開くには、【80番ポート】を開きます
  • server_nameにはEC2でインスタンス起動した【IPv4パブリックIP】か【独自ドメイン】を入力
  • proxy_passはDjangoで使ってる【http://127.0.0.1:8000】を使用

.iniファイルを作成/編集する

  1. Djangoプロジェクトフォルダ内(manage.pyがあるフォルダ)にdjango.iniを作成
  2. $ type nul > django.ini
  3. vimでdjango.iniを編集
  4. $ vim django.ini
django.iniの編集内容
[uwsgi]
module          =  project.wsgi:application
master          =  true
pidfile         =  django.uwsgi.pid
enable-threads  = true
http            =  127.0.0.1:8000
processes       =  5
harakiri        =  50
max-requests    =  5000
vacuum          =  true
home            =  vdjango
daemonize       =  django.uwsgi.log

Nginxとuwsgiを起動する

Nginxの起動

$ sudo service nginx start
Nginxのstopとrestart
  • sudo service nginx stop・・・Nginxをストップさせる
  • sudo service nginx restart・・・Nginxを再起動する

Uwsgiの起動、Djangoのプロジェクトフォルダ内(manage.pyがあるディレクトリ)で

uwsgi django.ini
Uwsgiが起動してるかの確認と止めかた
  • lsof -i・・・uwsgiの起動確認
  • kill -9 uwsgi・・・uwsgiを止める

最後に【パブリックDNS】【IPv4パブリックIP】【独自ドメイン】のどれかを開いて確認してみよう。
起動できてれば成功。

人気記事【必読】"見やすく修正しやすいコード"につながる本『リーダブルコード』