これはNginx のお話ではなく普通のCentOS にNGINX Unit というミドルウェアをインストールして静的ファイルをいくつかのhosts で設定していくのを寝る前にやっていく今日は書き終えて寝たい。何としても床を得たい。
環境構築
現環境
# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core)
インストール
nginx Unit のCentOS用の手順 を参考にしながら設定を行う
/etc/yum.repos.d/unit.repo
の設定
/etc/yum.repos.d/unit.repo
に下記の設定を入れる
[unit] name=unit repo baseurl=https://packages.nginx.org/unit/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
パッケージインストール
Unit パッケージと使用するその他のパッケージをインストールします
# yum install unit -y # yum install unit-devel unit-go unit-jsc8 unit-jsc11 \ unit-perl unit-php unit-python27 unit-python36 -y
確認 及び起動と有効化
インストールされているか各種確認を行い、設定の諸々の有効化を行います。あと、起動コマンドがあるのであれば -h
もしくはそれらに準ずるオプションは絶対に入力をしましょう。人は救われることが大いにあります。
# which unitd /usr/sbin/unitd # unitd --version unit version: 1.19.0 configured as ./configure --prefix=/usr --state=/var/lib/unit --control=unix:/var/run/unit/control.sock --pid=/var/run/unit/unit.pid --log=/var/log/unit/unit.log --tmp=/var/tmp --tests --openssl --modules=/usr/lib64/unit/modules --libdir=/usr/lib64 --cc-opt='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fPIC' --ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
人を救う-h
での確認
# 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/unit/control.sock" --pid FILE set pid filename default: "/var/run/unit/unit.pid" --log FILE set log filename default: "/var/log/unit/unit.log" --modules DIRECTORY set modules directory name default: "/usr/lib64/unit/modules" --state DIRECTORY set state directory name default: "/var/lib/unit" --tmp DIRECTORY set tmp directory name default: "/var/tmp" --user USER set non-privileged processes to run as specified user default: "nobody" --group GROUP set non-privileged processes to run as specified group default: user's primary group
有効化及びスタートしていきます
# systemctl enable unit Created symlink /etc/systemd/system/multi-user.target.wants/unit.service → /usr/lib/systemd/system/unit.service. # systemctl start unit # ps auxf | grep [u]nit root 27237 0.0 0.3 65968 5620 ? Ss 23:02 0:00 unit: main v1.19.0 [/usr/sbin/unitd --log /var/log/unit/unit.log --pid /var/run/unit/unit.pid --no-daemon] nobody 27239 0.0 0.0 65968 664 ? S 23:02 0:00 \_ unit: controller nobody 27240 0.0 0.1 66108 2636 ? S 23:02 0:00 \_ unit: router ll /var/run/unit/control.sock srw------- 1 root root 0 9月 16 23:02 /var/run/unit/control.sock
ログの確認
cat /var/log/unit/unit.log 2020/09/16 23:02:40 [info] 27238#27238 discovery started 2020/09/16 23:02:40 [notice] 27238#27238 module: java 11.0.6 "/usr/lib64/unit/modules/java11.unit.so" 2020/09/16 23:02:40 [notice] 27238#27238 module: java 1.8.0_242 "/usr/lib64/unit/modules/java8.unit.so" 2020/09/16 23:02:40 [notice] 27238#27238 module: perl 5.26.3 "/usr/lib64/unit/modules/perl.unit.so" 2020/09/16 23:02:40 [notice] 27238#27238 module: php 7.2.11 "/usr/lib64/unit/modules/php.unit.so" 2020/09/16 23:02:40 [notice] 27238#27238 module: python 2.7.16 "/usr/lib64/unit/modules/python2.7.unit.so" 2020/09/16 23:02:40 [notice] 27238#27238 module: python 3.6.8 "/usr/lib64/unit/modules/python3.6.unit.so" 2020/09/16 23:02:40 [info] 27237#27237 controller started 2020/09/16 23:02:40 [notice] 27237#27237 process 27238 exited with code 0 2020/09/16 23:02:40 [info] 27240#27240 router started 2020/09/16 23:02:40 [info] 27240#27240 OpenSSL 1.1.1c FIPS 28 May 2019, 1010103f
Quick Start
Quick Start を見ながら最初のアプリケーションをデプロイしていく
# cat << EOF > config.json { "type": "php", "root": "/www/blogs/scripts" } EOF # curl -X PUT --data-binary @config.json --unix-socket /var/run/unit/control.sock http://localhost/config/applications/blogs { "error": "Failed to apply new configuration." }
かなCのでログを見る。
2020/09/16 23:22:03 [alert] 27309#27309 root realpath(/www/blogs/scripts) failed (2: No such file or directory) 2020/09/16 23:22:03 [notice] 27237#27237 process 27309 exited with code 1 2020/09/16 23:22:03 [warn] 27240#27240 failed to start application "blogs" 2020/09/16 23:22:03 [alert] 27240#27240 failed to apply new conf
あ、ディレクトリがありませんっておしゃってますね。作って再実行する。
# mkdir -p /www/blogs/scripts # curl -X PUT --data-binary @config.json --unix-socket /var/run/unit/control.sock http://localhost/config/applications/blogs { "success": "Reconfiguration done." }
次は成功した。ドキュメントへの過度な信頼はいつなくなったんだろう...。眠いので感傷的になっているかもしれないですが下記のコマンドで確認できます。
# curl -XGET --unix-socket /var/run/unit/control.sock http://localhost/config/ { "listeners": {}, "applications": { "blogs": { "type": "php", "root": "/www/blogs/scripts" } } }
# curl -XDELETE --unix-socket /var/run/unit/control.sock http://localhost/config/ { "success": "Reconfiguration done." } # curl -XGET --unix-socket /var/run/unit/control.sock http://localhost/config/ {}
各種メゾットがちゃんと役割を果たしていて個人的には非常に嬉しいです。ほかに言うことはありません。 適当にアプリなど配置すれば確認できるのでしょうが今回はターゲットではないので設定の投入だけ確認できたので終わり
静的なファイルの配置
mkdir -p /www/data/static/
とかでファイルを作って index.html
を直下に配置する。
<!doctype html> <html> <head> <title>This is the title of the webpage!</title> </head> <body> <p>welcome to Nginx Unit </p> </body> </html>
# cat << EOF > config.json { "listeners": { "127.0.0.1:8300": { "pass": "routes" } }, "routes": [ { "action": { "share": "/www/data/static/" } } ] } EOF
設定ファイルの設定を行い確認する。
# curl -X PUT --data-binary @config.json --unix-socket /var/run/unit/control.sock http://localhost/config/ { "success": "Reconfiguration done." } ]# curl -XGET --unix-socket /var/run/unit/control.sock http://localhost/config/ { "listeners": { "127.0.0.1:8300": { "pass": "routes" } }, "routes": [ { "action": { "share": "/www/data/static/" } } ] }
curl
を行う
ポートが解放されているか確認する
# netstat -nltp | grep [u]nit tcp 0 0 127.0.0.1:8300 0.0.0.0:* LISTEN 27240/unit: router
実際に公開したものを取得してみる...
# curl 127.0.0.1:8300/index.html <!doctype html> <html> <head> <title>This is the title of the webpage!</title> </head> <body> <p>welcome to Nginx Unit </p> </body> </html>
一旦、検証のブログとしては完成しました(完成したんです)。本当は図などがあればいいのですがよいです。