WebアプリケーションサーバーのNGINX UnitをRaspberry Piで稼働させてPythonのアプリケーションを動かせるように試してみました。今のところ、公式サイトでRaspbian用パッケージは公開されていないので、ソースからビルドしてsystemdで制御できるところまでを残しておきます。
gccなど、コンパイルに必要なパッケージはインストール済みな環境です。
以下の内容で保存
以下の内容で保存
以下の内容で保存
環境
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/
$ 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
$ ./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
$ 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
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
$ 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 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": {}
}
$
{
"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
}
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
}
コメント
コメントを投稿