はじめに
今回は最小構成で 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 を用意します。
内容は公式にのっとって作成します。
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 を設定します。
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
を追加します。
[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 の最小構成の完成です。