nginx
RaspberryPi
uwsgi

RaspberryPI で nginx + uwsgi 最小構成

More than 1 year has passed since last update.


はじめに

今回は最小構成で 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 ファイルを追加していきます。


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 からの シンボリックリンクが貼られています。

このシンボリックシンクを削除することで、無効化します。


$ 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 を起動させてみます。


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

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

これで nginx は問題なく起動できました。


uwsgi の準備

次に uwsgi を 準備していきます。

公式のクイックスタートを参考にしていきたいと思います。


インストール

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


$ 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 単体で起動して、接続確認をして見ます。


$ 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 の最小構成の完成です。