![見出し画像](https://assets.st-note.com/production/uploads/images/98566035/rectangle_large_type_2_b9bb2a2fa3c6beffadefa844df96f1d4.png?width=1200)
初めてのNGINX UNIT。
はじめに
ハローワールド!マイクです。
Python+FLASKを勉強している今日この頃です。Pythonのアプリケーションサーバは何種類かあるようですが、ウェブサーバをNGINXにしたいと思っているので今回はNGINX UNITをセットアップしてみました。そのときの記録です。
今回の環境です
Python 3.10.6
Ubuntu Server 20.04
NGINX UNIT 1.29.0
まずはインストール
公式ドキュメントどおりに操作したら普通にインストールできました。
1.鍵をダウンロードします。これがないとパッケージをインストールするときにWARNINGがでるようです。
sudo curl --output /usr/share/keyrings/nginx-keyring.gpg
https://unit.nginx.org/keys/nginx-keyring.gpg
![](https://assets.st-note.com/img/1676173628968-XEUfDX1oOt.png?width=1200)
2.NGINX UNITのリポジトリを追加します。
/etc/apt/source.list.d/unit.listというファイルを作成して、
![](https://assets.st-note.com/img/1676173613464-neRzC0Bvay.png)
debとdeb-srcから始まる行を追加して保存します。Ubuntuのバージョンによって書く内容が違いますので注意が必要です。
deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit
deb-src [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit
![](https://assets.st-note.com/img/1676173639566-p2WUPWncjc.png?width=1200)
3.Ubuntuのパッケージを更新しておきます。
sudo apt update
sudo apt upgrade
![](https://assets.st-note.com/img/1676173646543-HttL8Vz2nj.png?width=1200)
4.いよいよNGINX UNITのインストールです。
sudo apt install unit
![](https://assets.st-note.com/img/1676173653556-kxd9Nvv5TZ.png?width=1200)
5.言語パッケージを追加します。今回はPythonしかインストールしていません。unit_devってなんとなく必要そうに見えたので入れてあります。この人が何者なのか判明したら追記したいと思います。w
sudo apt install unit-dev unit-python3.10
![](https://assets.st-note.com/img/1676173660440-BJkQv75BKe.png?width=1200)
6.NGINX UNITを再起動します。再起動することで、言語パッケージを入れたときの変更が反映されるそうです。
再起動が完了したらNGINX UNITのインストールは完了です。
sudo systemctl restart unit
![](https://assets.st-note.com/img/1676173667952-2tEDWLXGHS.png)
Pythonのサンプルアプリを追加してみましょう。
NGINX UNITはcurlコマンドをつかってアプリを登録するようです。登録するアプリの定義はjson形式で書きます。
サンプルがありましたので、test_appというディレクトリを作成して、ここを作業ディレクトリにしました。
今回サンプルコードは上手に追加したり削除したりできたのですが、自分で作成したアプリは登録でエラーになってしまい、原因の調査をしています。原因が分かり次第、記事を書きたいと思っています。
追伸:どうも自分で作成したアプリが登録できない理由には.pyファイルと設定ファイル、.pyファイルの設置場所に関係があったようです。Flaskを追加したときに解決できましたので、参考までにそちらの記事もどうぞ。
![](https://assets.st-note.com/img/1676173674677-1YFq217dzy.png)
1.サンプルの定義ファイル(unit.config)をコピーしてきました。
sudo cp /usr/share/doc/unit-python3.10/examples/unit.config ./
![](https://assets.st-note.com/img/1676173682626-cmZLJR9W9U.png?width=1200)
unit.configの中身はこんな感じです。pathの先にmoduleが無いと登録の際にエラーになるそうなので、moduleも確認しておきます。
![](https://assets.st-note.com/img/1676173691187-dKA6uRPqNW.png?width=1200)
wsgi.pyの中身はこんな感じです。
![](https://assets.st-note.com/img/1676173698810-ajGh24x7UC.png?width=1200)
2.PUTコマンドでアプリケーションを追加します。
sudo curl -X PUT --data-binary @unit.config --unix-socket /var/run/control.unit.sock http://localhost/config
![](https://assets.st-note.com/img/1676173705384-gO5ajYa1To.png?width=1200)
3.アプリケーションを呼んでみましょう。動きました。w
![](https://assets.st-note.com/img/1676173717045-9d563T4eSx.png)
4.NGINX UNITに登録済みのアプリとリスナーを確認します。上で登録したアプリのそのアプリのリスナーが見えます。
sudo curl --unix-socket /var/run/control.unit.sock http://localhost
![](https://assets.st-note.com/img/1676173723645-tuOLMxsz5Y.png?width=1200)
サンプルアプリを削除してみましょう。
1.リスナーから削除します。アプリを先に消そうとしたらエラーが発生しました。
sudo curl -X DELETE --unix-socket /var/run/control.unit.sock http://localhost/config/listeners/*:8400/
sudo curl --unix-socket /var/run/control.unit.sock http://localhost
![](https://assets.st-note.com/img/1676173730445-0yzh0z7iWm.png?width=1200)
2.次にアプリを削除します。これで、今NGINX UNITにはアプリは登録されていません。
sudo curl -X DELETE --unix-socket /var/run/control.unit.sock http://localhost/config/applications/example_python
sudo curl --unix-socket /var/run/control.unit.sock http://localhost
![](https://assets.st-note.com/img/1676173736925-yTMp9ivr0R.png?width=1200)
最後に
お疲れ様でした。以上がNGINX UNITのインストールとアプリの追加・削除の方法でした。
アプリを登録するときに使う定義ファイルを、もう一度見ておきましょう。
![](https://assets.st-note.com/img/1677351383234-SD76cNeAX5.png?width=1200)
次回はここの環境にFLASKを入れてみたいと思います。最後まで読んで頂きありがとうございます。
参考
履歴
2023年02月12日:投稿