「DjangoアプリをAWSのEC2でデプロイしたいんだけど簡単な方法ってないの?」
NginxとUwsgiを使うと簡単にデプロイ可能。
さて、じゃあAWSでのデプロイのやりかたを話していこうか。
AWS × NginxでDjangoをデプロイしよう
・デプロイする流れ
- AWS/EC2の中に必要なものを構築
- Nginx用に.confファイルを作成/編集する
- .iniファイルを作成/編集する
- Nginxとuwsgiを起動する
・Djangoデプロイに必要なもの
- Nginx
- Uwsgi
- Django用のPython仮想環境
- AWS用のアカウント
- AWS EC2 または VPS(Virtual Private Server)
- できれば独自ドメイン
・ドメインを取得してますか?
fa-angle-double-right■ドメイン取るならお名前.com■
AWS/EC2の中に必要なものを構築する
- EC2のインスタンス起動(ubuntu)
- セキュリティグループのインバウンドで22ポート設定
- セキュリティグループのインバウンドで80ポートを設定
- コマンドプロンプト、または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用の仮想環境を作成する
- Pythonのインストール
$ sudo apt install python3-venv python3-pip python3-dev
- Pythonの仮想環境をDjangoのmanage.pyがあるフォルダに作成
$ python -m venv vdjango
- 仮想環境を起動
$ . vdjango/bin/activate
- 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』を作成しよう
- conf.dのディレクトリに移動
$ cd /etc/nginx/conf.d
- 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ファイルを作成/編集する
- Djangoプロジェクトフォルダ内(manage.pyがあるフォルダ)にdjango.iniを作成
$ type nul > django.ini
- 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
- 独自ドメイン
どれかを開いて確認してみよう。起動できてれば成功。