54
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NginxとuWSGIでHelloWorld

Last updated at Posted at 2018-09-06

Nginx上でuWSGIを動かしてHelloWorldするのに苦労したのでメモしておきます。
各種インストールは終わっているものとします。

環境は以下です。

  • CentOS7
  • Nginx
  • uWSGI 2.0.17.1

目次

ではいきましょう!

とりあえずhttpでuWSGIを動かす

uWSGIに直接httpで接続できるようにします。
まずは表示用のpythonファイルをつくります。
ディレクトリは何でもいいですが、とりあえず/var/www/uwsgi/にindex.pyを置くようにしました。

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

では早速、以下のコマンドでつないでみます。

uwsgi --http 127.0.0.1:3031 --wsgi-file /var/www/uwsgi/index.py

ブラウザでlocalhost:3031にアクセスすると、'HelloWorld'が出力されるのを確認できます。

uwsgiを停止して抜けるにはctrl+cを使います。
なお、上述のコマンドだとuwsgiの起動中はコマンドを叩けなくなってしまいます。

uwsgi --http 127.0.0.1:3031 --wsgi-file /var/www/uwsgi/index.py &

として、最後尾に'&'をつけることで、ctrl+cで抜けた後もプロセスを実行し続けることができます。
この場合、プロセスを停止するには

killall -9 uwsgi 

として、強制終了してしまいます。
また、実行時にpidファイルを設定している場合は、これを指定して停止させることができます。

uwsgi --stop [好きなディレクトリ]/uwsgi.pid

NginxからuWSGIにsocketでつなぐ

とりあえずuWSGIに直接httpでつなぎましたが、実際はNginxを通してuWSGIに接続するような形になります。
今回は/var/www//uwsgi/に80番ポートでアクセスしたときにuWSGIに接続するような設定にしましょう。

まずはNginx側の設定ファイルをいじります。

/etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  hoge;

    location / {
        root   /var/www;
        index  index.html index.htm;
    }

    #--------------------------------------------
    #ここを追記
    location /uwsgi {
        include uwsgi_params;
        uwsgi_pass unix:///[好きなディレクトリ]/uwsgi.sock;
    }
    #--------------------------------------------
}

uwsgi.sockはソケットファイルです。勝手に作られるので特に用意しておく必要はありません。

uWSGIをiniファイルで起動できるようにする

uWSGIをiniファイルを使って起動できるようにします。
uwsgi.iniを好きなディレクトリにつくりましょう。

uwsgi.ini
[uwsgi]
module = index
master = true
socket = [好きなディレクトリ]/uwsgi.sock
chmod-socket = 666
wsgi-file = /var/www/uwsgi/index.py
pidfile = [好きなディレクトリ]/uwsgi.pid
logto = [好きなディレクトリ]/uwsgi.log

uwsgi.sockのディレクトリはNginx側の設定と合わせるようにします。
ここまで設定すると、80番ポートからNginxを通してuwsgiにアクセスできるようになります。

systemctl restart nginx
uwsgi --ini [好きなディレクトリ]/uwsgi.ini

ブラウザでlocalhost/uwsgiにアクセスすると、index.pyが動いて'HelloWorld'が出力されるのを確認できます。
今回はpidファイルを指定して起動しているので、終了には以下のコマンドが使えます。

uwsgi --stop [好きなディレクトリ]/uwsgi.pid

uWSGIをsystemctlで起動できるようにする

以上でHelloWorldまではできましたが、ついでにsystemctlに登録して自動起動もできるようにしてしまいます。
systemctlに登録するために、/etc/systemd/system/内にuwsgi.serviceファイルをつくりましょう。

/etc/systemd/system/uwsgi.service
[Unit]
Description = uWSGI
After = syslog.target

[Service]
ExecStart = /usr/bin/uwsgi --ini [好きなディレクトリ]/uwsgi.ini
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

これでsystemctlが使えるようになっているはずなので確認しましょう。

systemctl status uwsgi

ついでに自動起動の設定もしておきます。

systemctl enable uwsgi
54
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?