超爆速でNginx+uWSGI+Django+AWS(EC2 Linux)環境を構築する方法

超爆速でNginx+uWSGI+Django+AWS(EC2 Linux)環境を構築するため無駄は一切省いています。
インストールしている時間を除くとNginx+uWSGI+Django+AWS(EC2)環境を約10分ほどで構築できます。

前提条件

・AWSでec2インスタンスを立ち上げてsshでアクセスできている状態であること
・ec2インスタンスを起動した初期状態であること

1. NginxやGitなど必要なものをインストールする

yumで必要なものをインストールします。インストールする前にyumをアップデートしておいたほうがよいです。

$ sudo yum update
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git nginx -y

2. pyenvとpythonのインストールと設定

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="/home/ec2-user/.pyenv/"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ pyenv install 3.6.5
$ pyenv global 3.6.5
$ pyenv rehash

3. pipのアップグレード

$ pip install --upgrade pip

4. uWSGIのインストール

$ pip install uwsgi

5. Djangoのインストール

$ pip install django

6. Djangoでウェブフレームワークを作成

$ sudo mkdir /var/www
$ sudo chown -R ec2-user:ec2-user /var/www
$ cd /var/www
$ django-admin startproject myweb
$ cd myweb
$ vi myweb/settings.py

の`ALLOWED_HOSTS`にec2のパブリックDNSを設定します。
(例) ALLOWED_HOSTS = [‘ec2-○○-○○○-○○○-○○○.ap-northeast-1.compute.amazonaws.com’]

7. uWSGIの設定

$ vi /var/www/myweb/uwsgi_params

で新規作成し下記コードを書きます。

uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;
uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;
uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;
 uwsgi --socket /tmp/myweb.sock --module myweb.wsgi --chmod-socket=666 --daemonize /var/www/myweb/uwsgi.log

上記コマンドを実行して失敗したときは、uwsgi実行時bind(): No such file or directory [core/socket.c line 230]の解決方法を確認してみてください。

8. Nginxの設定

$ sudo vi /etc/nginx/nginx.conf

server {} 部分を消します。

$ sudo vi /etc/nginx/conf.d/myweb.conf

で新規作成し下記コードを書きます。

server {
listen       80;
server_name  localhost;
root         /usr/share/nginx/html;
charset     utf-8;
location / {
uwsgi_pass unix:///tmp/myweb.sock;
include /var/www/myweb/uwsgi_params;
}
}
$ sudo service nginx start

で完了です!!

あとがき

はじめて環境構築したときはuWSGIでハマって数日かかりましたが、わかると一瞬で構築することができます。一番時間がかかる部分はpythonインストールぐらいですかね。各部分の説明については、はてなブックマークやツイッターなどで盛り上がったら追記します!!