LoginSignup
24
17

More than 3 years have passed since last update.

【最短、最小構成】DjangoのWebアプリ公開方法。AWS Lightsail + Nginx + Gunicorn

Last updated at Posted at 2020-10-05

概要

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アプリが動くか確認。

終わり

可能な限り操作を少なくすることを目指しました。
後はセキュリティを設定したいところです。
とりあえずの足掛かりとして、宜しければお使いください。

24
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
17