#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が同じリージョンにある場合セキュリティの問題はなさそう