#概要
Djangoアプリを、最短かつ最小構成で公開する準備をしてみる。
値段が最小とは限らないため注意。
サーバー:AWS Lightsail(一番安い3.5ドル/月プラン)
OS:Ubuntu
Webサーバーアプリ:Nginx
Webアプリ:Django
NginxとDjangoの橋渡し:Gunicorn
ローカルPC:Win10 1909
SSH通信アプリ:Win10のコマンドプロンプト
#1.【AWS Lightsail】サーバーを契約、起動
・AWS Lightsailは月々定額でサーバーが使える。
・最初からDjango付きのパッケージを選ぶと1か月無料プランが使えない。OSだけにする。
インスタンスロケーションを変えると、選べるアプリは変わるようだ。
下はアメリカのバージニアの場合。
・下図の構成でインスタンスを作成。他の設定はデフォルトのまま。
#2.【AWS Lightsail】通信設定
・静的IPアドレスを設定
・秘密鍵をダウンロード
DjangoコードをローカルPCからSSH通信でアップロードするために必要。
下図一番下の「アカウントページ」からダウンロード
#3.【AWS Lightsail】Ubuntuに必要アプリ導入
・「SSHを使用して接続」からコンソールを起動
・Django, Nginx, Gunicornをインストールする
# Ubuntuのパッケージ一覧更新
sudo apt-get update
# Djangoインストール(python3はUbuntuに最初から入っているとする)
sudo apt install python3-pip
sudo pip3 install django
# Nginxインストール
sudo apt-get install nginx
# Gunicornインストール
sudo pip3 install gunicorn
#4.【ローカルPC】Djangoの設定
・ローカルPC側に移動
・「mysite」という名前でDjangoのプロジェクトを作っているとする。
またUbuntu側では/home/ubuntu/にDjangoのソースを置くとする。
違うファイル名前やパスの場合は、以降の設定を全て読み替え。
・mysite/setting.pyの以下3つを編集。
STATIC_ROOTは最初から無いため追加する。
DEBUG = False
ALLOWED_HOSTS = ['※AWS Lightsailで取得した静的IPアドレス、またはドメイン名']
STATIC_ROOT = '/home/ubuntu/mysite/static'
#5.【ローカルPC】ディレクトリやファイル事前作成
・manage.pyと同じフォルダに、「static」フォルダを作成。Ubuntuで後から作っても良い。
・manage.pyと同じフォルダに、Nginx用のmysite.confファイルを作成。
内容は以下を書き込む。
server_nameは人により異なるため注意。
server {
listen 80;
server_name ※AWS Lightsailで取得した静的IPアドレス、またはドメイン名;
location /static {
alias /home/ubuntu/mysite/static; #setting.pyのSTATIC_ROOTと同じ場所
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
#6.【ローカルPC】AWSにアップロード
・コマンドプロンプトのscpを使用する。scpはssh通信でデータを交換する仕組み。
・コマンドプロンプトで以下を起動。※長いので適当に改行を入れている
scp -i ※秘密鍵ファイルへの絶対パス -P 22 -r
※Djangoプロジェクトのフォルダ絶対パス
※Ubuntuのユーザー名@静的IPアドレスorドメイン名:ディレクトリ絶対パス
# 以下は例
scp -i C:\Work\LightsailDefaultKey-us-east-1.pem -P 22 -r C:\Work\mysite ubuntu@???.???.???.???:/home/ubuntu
#7.【AWS Lightsail】Djangoの設定
・Ubuntuで以下を実行
# Djangoソース場所に移動
cd /home/ubuntu/mysite
# 必要であればマイグレーション
python3 manage.py makemigrations
python3 manage.py migrate
# Web公開前に静的データは抽出。/home/ubuntu/mysite/staticに置かれる。項目5のlocationも関連
python3 manage.py collectstatic
#8.【AWS Lightsail】Nginxの設定
・Nginx用のconfファイルを移動し、リロード
# ファイル移動
sudo mv /home/ubuntu/mysite/mysite.conf /etc/nginx/conf.d/mysite.conf
# 正しいかチェック。successfulが出ればよい。
sudo nginx -t
# リロード
sudo systemctl reload nginx
#9.【AWS Lightsail】Djangoアプリ起動 & 公開
・DjangoアプリをGunicorn経由で起動する。runserverではないので注意。
デフォルトでは127.0.0.1:8000で起動される。
項目5のlocationと一致していることに注目。
参考[https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/gunicorn/]
#サーバー起動。-Dはバックグラウンド起動
gunicorn mysite.wsgi -D
#止めるとき
pkill gunicorn
#10.【ローカルPC】ブラウザで開く
・ブラウザで静的IPアドレスを入力してWebアプリが動くか確認。
#終わり
可能な限り操作を少なくすることを目指しました。
後はセキュリティを設定したいところです。
とりあえずの足掛かりとして、宜しければお使いください。