【AWS】LinuxとNginxでDjangoをデプロイするもっとも簡単な方法

「DjangoアプリをAWSのEC2でデプロイしたいんだけど簡単な方法ってないの?」

NginxとUwsgiを使うと簡単にデプロイ可能。
さて、じゃあAWSでのデプロイのやりかたを話していこうか。

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

・デプロイする流れ

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

・Djangoデプロイに必要なもの

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

・ドメインを取得してますか?
■ドメイン取るならお名前.com■

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

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

AWSは無料枠内で十分。

AWSのEC2Linux2を操作してPython3をインストールする方法からAWSでEC2を起動しよう。

Ubuntuを選択しておくこと。
できたら、AWSにSSH接続した状態でやっていきます。

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

$ sudo apt install nginx

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

sudo/aptとは?

  • sudoは管理者権限
  • aptはパッケージ管理、ここから色んなライブラリをインストールできる

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

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

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

(vdjango)$ pip install uwsgi

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

$ sudo ufw allow 80

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

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

FTPソフトでDjangoアプリをアップロードしよう。

無料で使えるFFFTPをどうぞ。

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

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

  1. conf.dのディレクトリに移動
    $ cd /etc/nginx/conf.d
  2. vimでproject.confを編集
    /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を作成
    $ type nul > django.ini
  2. vimでdjango.iniを編集
    $ 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を止める

まとめ: URLをひらいて確認してみよう

  • パブリックDNS
  • IPv4パブリックIP
  • 独自ドメイン

どれかを開いて確認してみよう。起動できてれば成功。

あなた向け今まさに「きれいなコードを書かなくちゃ...」と考えているあなたへ。

本で学習【初心者用】Pythonで自動化したいなら学習に最適な2冊はこれ