Ubuntu 22.04LTS へ Nginx Unit をインストールする
今回は Ubuntu 22.04LTS へ Nginx Unit をインストールします。 インストール手順は Installation に記載されています。
Ubuntu 用のパッケージは Index of /unit/ubuntu/dists/ で公開されています。 現時点では Ubuntu 24.04LTS 用のパッケージが無い為、Ubuntu 22.04LTS へインストールします。
検証環境¶
対象 | バージョン |
---|---|
Ubuntu | 22.04.4LTS |
Nginx Unit | 1.32.1 |
インストールする¶
公式のインストール手順では unit-jsc16
をインストールしていますが、現時点ではこのパッケージが存在せず、エラーになってしまいます。 その為、unit-jsc16
はインストール対象から外します。
sudo curl --output /usr/share/keyrings/nginx-keyring.gpg \
https://unit.nginx.org/keys/nginx-keyring.gpg && \
echo -e "deb [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit" \
"\ndeb-src [signed-by=/usr/share/keyrings/nginx-keyring.gpg] https://packages.nginx.org/unit/ubuntu/ jammy unit" \
| sudo tee /etc/apt/sources.list.d/unit.list && \
sudo apt update && \
sudo apt -y install unit && \
sudo apt -y install unit-dev unit-go unit-jsc11 unit-jsc17 unit-jsc18 \
unit-perl unit-php unit-python2.7 unit-python3.10 unit-ruby unit-wasm && \
sudo systemctl restart unit
Python の FastAPI アプリケーションを動作させる¶
Nginx Unit 上で Python の FastAPI アプリケーションを動作させます。 正式な手順は 公式サイトの FastAPI チュートリアル ページに記載されています。
まず Python 仮想環境を作成します。 後の手順で Nginx Unit にアプリケーション設定を行う際に必要となる為、Python のバージョンを確認しておきます。 今回の環境では Python 3.10.12 でした。
mkdir /opt/myproject && \
cd /opt/myproject && \
python3 --version && \
python3 -m venv .venv && \
source .venv/bin/activate && \
pip install fastapi && \
deactivate
FastAPI によるサンプルアプリケーションを作成します。 今回はチュートリアルに従って asgi.py
というファイル名にしました。
asgi.py | |
---|---|
1 2 3 4 5 6 7 |
|
アプリケーションを配置したディレクトリを Nginx Unit が参照出来るように所有者・所有グループを Nginx Unit へ変更しておきます。
chown -R unit:unit /opt/myproject
Nginx Unit は REST API で設定を行う為、設定用の .json ファイルを用意します。 今回は ~/config.json
を以下の内容で新規作成しました。
config.json | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
設定用の .json ファイルが作成出来たら Nginx Unit へ Unix Socket 経由で POST します。 Unix Socket のデフォルト位置は /var/run/control.unit.sock
です。 デフォルト値は unitd -h
で参照出来る Nginx Unit のヘルプファイルに記載されています。
sudo curl -X PUT --data-binary @config.json --unix-socket \
/var/run/control.unit.sock http://localhost/config/
実際の実行例は以下の通りです。
# sudo curl -X PUT --data-binary @config.json --unix-socket \
/var/run/control.unit.sock http://localhost/config/
{
"success": "Reconfiguration done."
}
別のコンピュータから curl
でアクセスし、FastAPI アプリケーションとして設定した内容が返ってくれば成功です。
$ curl http://10.0.0.1
{"message":"Hello, World!"}
参考¶
unitd のヘルプ表示¶
# unitd -h
unit options:
--version print unit version and configure options
--no-daemon run unit in non-daemon mode
--control ADDRESS set address of control API socket
default: "unix:/var/run/control.unit.sock"
--control-mode MODE set mode of the control API socket
default: 0600
--control-user USER set the owner of the control API socket
--control-group GROUP set the group of the control API socket
--pid FILE set pid filename
default: "/var/run/unit.pid"
--log FILE set log filename
default: "/var/log/unit.log"
--modulesdir DIR set modules directory name
default: "/usr/lib/unit/modules"
--statedir DIR set state directory name
default: "/var/lib/unit"
--tmpdir DIR set tmp directory name
default: "/var/tmp"
--modules DIR [deprecated] synonym for --modulesdir
--state DIR [deprecated] synonym for --statedir
--tmp DIR [deprecated] synonym for --tmpdir
--user USER set non-privileged processes to run as specified user
default: "unit"
--group GROUP set non-privileged processes to run as specified group
default: "unit"