NGINX UnitをUbuntuに導入。PHPを動かす

2018-09-12
nginxunit
    

目次

概要

Ubuntu 18.04にNGINX Unitを導入し、PHPを動かしてみる。

環境

  • Ubuntu 18.04
  • PHP7
  • NGINX Unit 1.3

NGINX Unitについて

about

NGINX Unit is a dynamic web and application server, designed to run applications in multiple languages. Unit is lightweight, polyglot, and dynamically configured via API. The design of the server allows reconfiguration of specific application parameters as needed by the engineering or operations. Current latest version is 1.3, released on July 13, 2018.

See the changelog here: unit.nginx.org/CHANGES.txt.

The sources are distributed under the Apache 2.0 license. 引用 - https://unit.nginx.org

と言ってます。つまり NGINX Unitは複数の言語でアプリケーションを実行できるように設計されたWebおよびアプリケーションサーバであり、

軽量で、APIを介して動的に設定を変更できるのが大きな特徴ということでしょうか https://unit.nginx.org/

言語

Python、PHP、Go、Perl、Ruby、が利用可能であり、将来的にはJavaScript/Node.js、Javaが利用できるそう。

結論

先に結論から言うと、楽しかったです。ただ、導入はもう少し後かなと思いました。

情報量がまだまだ少ないかなぁと感じます。 また、Pythonも試しましたが、特別な理由がない限りgunicornやuWSGIを利用した方が良いと言う話もあります。 https://tokibito.hatenablog.com/entry/2018/04/25/045009 ただ、あらゆる言語を同じ設定、同じコマンドを利用して、サーバ立ち上げから、デーモン、設定の反映と再構成を行えることはとても魅了的だと思いました。 近いうちにNodeJS対応とかがあるらしいので、それを待って見るかな...思いました。

セットアップ

公式に基づいて導入していきます。 https://unit.nginx.org/installation/

NGINXサインインキーの登録

これを落としてきます。

https://nginx.org/keys/nginx_signing.key? ※リンク切れしていたらこの中にあると思うので探してください。 以下のコマンドで登録します。

apt-key add nginx_signing.key

リポジトリ取得の設定

Ubuntuのバージョンに合わせて

/etc/apt/sources.list.d/unit.list

に、

以下の内容を記述します。

16.04の場合

deb https://packages.nginx.org/unit/ubuntu/ xenial unit
deb-src https://packages.nginx.org/unit/ubuntu/ xenial unit

17.10の場合

deb https://packages.nginx.org/unit/ubuntu/ artful unit
deb-src https://packages.nginx.org/unit/ubuntu/ artful unit

18.04の場合

deb https://packages.nginx.org/unit/ubuntu/ bionic unit
deb-src https://packages.nginx.org/unit/ubuntu/ bionic unit

記述が追記できたら更新した後、Unitをインストールします。

apt update
apt install unit

続いてモジュール類をインストールします。

php以外のpythonやperlなどを利用する場合はこのようパッケージ名で取得できます。

apt install unit-php \ 
            unit-python2.7 \
            unit-python3.6 \
            unit-go1.9 \
            unit-go1.10 \
            unit-perl \
            unit-ruby

カーネルが古い状態でインストールすると不具合が発生したので注意が必要かもしれません。

https://tech-blog.s-yoshiki.com/2018/09/517/

Unitの開始

とりあえずスタートはこれ。

service unit start

その他にもこのようなコマンドが用意されてます。statusはよく使うと思います。

force-reload
loadconfig
reload
restart
saveconfig
status
stop

また、socketファイルは

/var/run/control.unit.sock

logは

/var/log/unit.log

にあります。 サーバーに構成が正しく反映されなかった場合はlogに何かしら吐かれると思います。

アプリケーションの準備と設定

とりあえずPHPのHelloWorldを準備します。

mkdir -p /var/www/app/
cd /var/www/app/
touch index.php

index.phpを編集します。

<?php
echo("Hello World");

そしたら適当なディレクトリにserver.jsonを作成します。

server.jsonは下記のように編集します。

{
  "listeners": {
    "*:8300": {
      "application": "php-app"
    }
  },
  "applications": {
    "php-app": {
      "type": "php",
      "processes": {
        "max": 10,
        "spare": 5
      },
      "root": "/var/www/app",
      "index": "index.php"
    }
  }
}

最後に設定ファイルをcurlでPUTすることでサーバに反映されます。

curl -X PUT -d @./server.json --unix-socket /var/run/control.unit.sock http://localhost

curlで--unix-socketが利用できない場合はこちらを参照してください。 https://tech-blog.s-yoshiki.com/2018/09/514/ 設定に関する部分は公式で丁寧に説明されてます。 https://unit.nginx.org/configuration/

良さそうなデモがあったので置いときます。

参考

https://dev.classmethod.jp/server-side/python/nginxunit-gunicorn-uwsgi/

    
s-yoshiki
s-yoshiki
githubtwitterqiita
Web作ってますが、インタラクティブなプログラミングも好きです。
JavaScript / Vue / node.js / PHP / AWS / OpenCV

関連記事

aptで取得したNginx Unitを利用すると「Memory allocation failed」が発生する on Ubuntu 14.04
事象 原因 今年の春に正式リリースされたNginx Unitを試してみたくWebに落ちてる情報を頼りにセットアップしたところMemory allocation failedが発生した。 https://unit.nginx.org…

最新の投稿

SQL整形ツールを作成した
特徴 使い方 FW/ライブラリ等 nuxt sql-formatter-plus Monaco Editor おまけ ソース SQL整形ツールを作成しました。 URLはこちらです。 SQL…

ファイルの1行目を表示 Linuxコマンド head
head コマンド例 headコマンドでファイルの 1行目もしくは指定した行数だけ表示する方法。 head 利用できるオプション コマンド例 の 1行目だけを表示 の 5行目までを表示 カレントディレクトリ以下の全てのtxtファイルの1行目を表示

Amazon S3 と ローカルファイルのチェックサムの比較
s3apiでEtagを取得 検証 マルチアップロード時の注意点 Amazon S3 の Etagを使ってファイルの整合性チェックをする。 s3apiでEtagを取得 S3 APIを利用するとEtagを取得します。この値はmd5のハッシュ値になります。 検証 MD…

github.io / gitlab.ioで公開されている質の高い技術ドキュメント
AWSによるクラウド入門 Pythonプログラミング入門 普通の人が資産運用で99点をとる方法とその考え方 2018年の段階で私が知らないこと github.io / gitlab.io で無料で公開されている興味深いドキュメントのmemo AWS…

10進数から2進数 2進数から10進数への変換 JavaScript
10進数から2進数 2進数から10進数 テスト 10進数から2進数、2進数から10進数への変換を行うJavaScriptのコードの紹介。 JSの場合、10進数から2進数への変換はメソッド。2進数から1…

JavaScriptの配列ショートハンド (AtCoder用)

JavaScriptでワーシャルフロイド法を実装
AtCoder ABC012 D問題 D - バスと避けられない運命 解説 実装 AtCoder ABC012 の D問題でワーシャルフロイド法が利用できる問題が出てきたので、 JavaScriptで実装しました。 AtCoder ABC012 D問題 D…

GitHub Actions で Gatsby をビルドし Amazon S3 にデプロイする
GitHub Actions について あらかじめ準備しておくもの AWS IAM ユーザを環境変数にセットする workflowの記述 ビルド バッジを利用する 終わりに 参考にしたところ Gatsbyで作った静的サイトを、GitHub Actions…

cloudinaryによる画像ファイルの管理 はじめてみる
目的 cloudinary について 他のサービスとの比較 料金プラン アカウントの登録 利用してみる ダッシュボード 画像の編集 APIベースでのアクセス 感想 参考 画像の管理や配信、さらには加工といった事ができるsaas型のcloud…

JavaScriptによる2分探索(バイナリサーチ) のサンプルコード
2分探索について ソース 参考 JavaScriptで2分探索(バイナリサーチ)を実装してみました。…

Tags

Dates

© 2020   404 motivation not found