AWSにDjango環境を構築する

More than 1 year has passed since last update.


versions

Python : 2.7

Django : 1.10


Environment

EC2インスタンス : Amazon Linux

WSGI : gunicorn

Proxy : nginx


install python packages

sudo yum update

sudo yum install gcc
sudo yum install python-devel
sudo yum install python-psycopg2
sudo yum install postgresql-devel
pip install -r requirements.txt

sudoをつけてpip installをするとpkg_resources.DistributionNotFound: pip==6.1.1と表示されインストールができない場合

sudo vi /usr/bin/pip

pip==6.1.1と記載されている部分を現在インストールされているpipのバージョンに書き換えてあげましょう


reverse proxy

sudo yum install nginx

sudo vi /etc/nginx/nginx.conf


  • nginx.confに追記 line : 49

location / {

proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# http://mydomain/static/ をDjangoのsettings.pyでSTATIC_ROOTに指定したディレクトリへルーティング
location /static/ {
autoindex on;
alias /usr/share/nginx/html/django-project-name/staticfiles/;
}

sudo chmod 777 -R /usr/share/nginx/html ※1

sudo service nginx restart
gunicorn django-project-name.wsgi -D


gunicornの再起動

サービスを止めずにソースコードの変更を反映する場合

pgrep gunicorn

kill -HUP masterpid


Memo

python manage.py runserver 0.0.0.0:8000  # 全てのホストアドレスからのアクセスを許可

python manage.py migrate
python manage.py createsuperuser

# 事前にsettings.pyにSTATIC_ROOTを設定する (defaultでは記載されていない)
python manage.py collectstatic # STATIC_ROOTに指定したディレクトリに静的ファイルが生成される

※1 : このディレクトリ下にDjangoプロジェクトを設置

当初はSTATIC_ROOTに設定したディレクトリのシンボリックリンクのみをここに貼ったが

静的ファイルを読み込む際に403エラーが発生してしまうためプロジェクトごとこのディレクトリに設置

所有がrootのディレクトリに対して、パーミッションを777に設定してしまうのは多少疑問が残るところ


SSL証明書

証明書はAWS Certificate Managerで発行し、Elastic Load Balancerにインストール

ELBとEC2間の通信はhttpとなるが、ELBとEC2が同じリージョンにある場合セキュリティの問題はなさそう