Raspbian(Buster)でNGINX Unitを動かす

WebアプリケーションサーバーのNGINX UnitをRaspberry Piで稼働させてPythonのアプリケーションを動かせるように試してみました。今のところ、公式サイトでRaspbian用パッケージは公開されていないので、ソースからビルドしてsystemdで制御できるところまでを残しておきます。

環境

Raspberry Pi:Raspberry Pi Model A(初代です。まだ現役!!)
OS:Raspbian Buster
Python:3.7.3
NGINX Unit:1.17.0

gccなど、コンパイルに必要なパッケージはインストール済みな環境です。

構築

ソースコードの入手と展開

$ curl -O https://unit.nginx.org/download/unit-1.17.0.tar.gz
$ tar xvf unit-1.17.0.tar.gz
$ cd unit-1.17.0/

パッケージインストール

$ sudo apt install python3-dev

configure

Unit本体と、Pythonモジュールに対して行っています。初代Raspiだと2分くらいかかりました。
$ ./configure --state=/var/lib/unit --pid=/var/run/unit.pid --log=/var/log/unit.log --control=unix:/var/run/control.unit.sock --prefix=/usr/local/ --openssl
$ ./configure python --config=/usr/lib/python3.7/config-3.7m-arm-linux-gnueabihf/python-config.py --module=python37

ビルド

初代Raspiだとmakeコマンドは8分くらいかかりました。
$ make
$ sudo make install

systemd設定

ユニットファイル

$ sudo vi /etc/systemd/system/unit.service

以下の内容で保存
[Unit]
Description=NGINX Unit
Wants=network.target
After=network.target

[Service]
Type=forking
PIDFile=/var/run/unit.pid
EnvironmentFile=-/etc/default/unit
ExecStart=/usr/local/sbin/unitd $DAEMON_ARGS
ExecReload=

[Install]
WantedBy=multi-user.target


環境変数ファイル

$ sudo vi /etc/default/unit

以下の内容で保存
DAEMON_ARGS="--log /var/log/unit.log --pid /var/run/unit.pid"


起動と自動起動設定

$ systemctl daemon-reload
$ systemctl start unit
$ systemctl 

動作確認


バージョン確認

$ sudo /usr/local/sbin/unitd --version
unit version: 1.17.0
configured as ./configure --state=/var/lib/unit --pid=/var/run/unit.pid --log=/var/log/unit.log --control=unix:/var/run/control.unit.sock --prefix=/usr/local/ --openssl
$

Unit設定

$ sudo curl --unix-socket /var/run/control.unit.sock http://localhost/config
{
        "listeners": {},
        "applications": {}
}
$

ログローテーションの設定

$ sudo vi /etc/logrotate.d/unit

以下の内容で保存
/var/log/unit.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    nocreate
    notifempty
    su root root
    postrotate
        if [ -f /var/run/unit.pid ]; then
            /bin/kill -SIGUSR1 `cat /var/run/unit.pid`
        fi
    endscript
}

コメント