RaspberryPI で nginx + uwsgi 最小構成

# はじめに
今回は最小構成で nginx と uwsgi を raspberry pi 上で動かしたいと思います。
ブラウザから80番ポートで「http://(IP address)/uwsgi 」にアクセスして、「Hello World」 が表示できたら完成とします。

# nginx の準備
まずは nginx を準備します。

## インストール

apt-get で nginx インストールします。

```
 $ sudo apt-get install nginx
```

## conf の設定
インストールが完了すると ```/etc/nginx```ディレクトリ作成されるので conf を作成していきます。
base と なる conf は ```/etc/nginx/nginx.conf``` となりますが、中を見てみると、下記のように include しているので、 
include 先に conf ファイルを追加していきます。

```bash

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
```

### sites-enabled/default の無効化
今回は ```/etc/nginx/conf.d```に conf を追加するのですが、 ``` include /etc/nginx/sites-enabled/default ``` という conf がすでに存在していたので、そちらを無効化しておきます。
sites-enabled の下には sites-available からの シンボリックリンクが貼られています。
このシンボリックシンクを削除することで、無効化します。

```bash

$ ls -al /etc/nginx/sites-enabled/default
lrwxrwxrwx 1 root root 34  3月  5 19:22 /etc/nginx/sites-enabled/default -> /etc/nginx/sites-available/default

$ sudo unlink /etc/nginx/sites-enabled/default
```

## nginx の起動
それでは nginx を起動させてみます。

```bash

$ sudo /etc/init.d/nginx start
[ ok ] Starting nginx (via systemctl): nginx.service.
```

問題なく起動できたら、ブラウザから ``` http://(IP address) ``` にアクセスすると 「Welcome to nginx!」 と表示されます。
これで nginx は問題なく起動できました。


# uwsgi の準備
次に uwsgi を 準備していきます。
[公式のクイックスタート](http://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html)を参考にしていきたいと思います。

## インストール

pip で uwsgi をインストールします。

```bash

$ sudo pip install uwsgi
```

## application の用意
次に 「Hello World」と表示する application を用意します。
内容は公式にのっとって作成します。

```/home/pi/web/foobar.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]
```

## 試しに uwsgi 単体で起動
では、試しに uwsgi 単体で起動して、接続確認をして見ます。

```bash

$ uwsgi --http :9090 --wsgi-file /home/pi/web/foobar.py
*** Starting uWSGI 2.0.17 (32bit) on [Tue Mar  6 11:36:09 2018] ***
```

起動できたら、ブラウザから ``` http://(IP address):9090 ``` にアクセスすると、「Hello World」が表示されました。
これで uwsgi も単体で問題なく動作することが確認できました。

# nginx と uwsgi を繋げる
では、最後に nginx がリクエストを受け付けて、uwsgi に渡すように設定して行きます。

### /etc/nginx/conf.d に conf の追加

では nginx に設定を追加するために、```/etc/nginx/conf.d/default.conf```を作成します。
80番ポートで ```http://(IP address)/uwsgi``` にアクセスが来た時に、uwsgi にリクエストを渡すように location を設定します。

```/etc/nginx/conf.d/default.conf
server {
    listen 80 default;
    server_name 127.0.0.1 localhost;

    location /uwsgi/ {
        include uwsgi_params;
        uwsgi_pass unix:/home/pi/web/web.sock;
    }
}
```

## uwsgi.ini を追加
次に uwsgi にも設定を行うために、 ```/etc/uwsgi/uwsgi.ini```を追加します。

```/etc/uwsgi/uwsgi.ini
[uwsgi]
socket = /home/pi/web/web.sock
chmod-socket = 666
chdir = /home/pi/web/
wsgi-file = /home/pi/web/foobar.py
```

## nginx と uwsgi を起動

conf の追加が完了したら、nginx と uwsgi を起動させてみます。

nginx の起動

```
$ sudo /etc/init.d/nginx start
[ ok ] Starting nginx (via systemctl): nginx.service.
```

uwsgi の起動
uwsgi は ```/etc/uwsgi/uwsgi.ini``` を指定して起動させます。

```
$ uwsgi /etc/uwsgi/uwsgi.ini
[uWSGI] getting INI configuration from /etc/uwsgi/uwsgi.ini
*** Starting uWSGI 2.0.17 (32bit) on [Tue Mar  6 11:48:44 2018] ***
```

## ブラウザから確認
それでは、ブラウザから ``` http://(IP address)/uwsgi ```にアクセスして見ます。
そうすると 「Hello World」 が表示されました。

## ログの確認
念のためログも確認して見ます。

### nginx
nginx は access.log を確認してみると ログが確認できます。

```
$ tail -f /var/log/nginx/access.log
172.00.0.100 - - [06/Mar/2018:11:51:43 +0900] "GET /uwsgi/ HTTP/1.1" 200 42 "-" "... 
```

### uwsgi 
uwsgi は先ほど起動させた画面に直接ログが出ています。

```
[pid: 7451|app: 0|req: 1/1]172.00.0.100 () {40 vars in 701 bytes} [Tue Mar  6 11:51:43 2018] GET /uwsgi/ => generated 11 bytes in 0 msecs (HTTP/1.1 200) 1 headers in 44 bytes (2 switches on core 0)
```

これで nginx + uwsgi の最小構成の完成です。