「OpenRestyをインストールしたい」
「LuaをWebサーバーで動かしたい」
「高速に処理できるWebサーバーを知りたい」
このような場合には、この記事の内容が参考となります。
この記事では、OpenRestyについて解説しています。
本記事の内容
- OpenRestyとは?
- nginxの無効化・停止
- 最新版OpenRestyのパッケージ取得
- 最新版OpenRestyのインストール
- OpenRestyの起動エラーへの対応方法
それでは、上記に沿って解説していきます。
OpenRestyとは?
OpenRestyは、nginxを改良したWebサーバーです。
また、OpenRestyはLuaを動かすように特化されています。
Luaについては、次の記事で説明しています。
それも通常版のLuaよりも高速なLuaJITが、OpenRestyでは動きます。
そんなOpenRestyですが、まだまだ世間的には認知が低いところがあります。
しかし、Webサーバーのシェアでは上位に来ています。
2021年12月におけるシェア率は、3番目です。
参考情報として、各ソフトウェアのシェア率の推移も載せておきます。
これを見ても、OpenRestyの勢いは注目すべきと言えます。
これだけの注目株であるOpenRestyですが、インストールはお手軽ではありません。
Ubuntuであれば、まだ公式のリポジトリに登録されていません。
そのため、デフォルトでは何もパッケージが見当たりません。
$ sudo apt info openresty N: パッケージ openresty が見つかりません N: パッケージ openresty が見つかりません E: パッケージが見つかりません
以上、OpenRestyについて説明しました。
以下では、OpenRestyをインストール方法を説明していきます。
その前に、すでにnginxが動いているなら、それを止める必要があります。
そもそも、OpenRestyはnginxでもある訳ですからね。
nginxの無効化・停止
nginxをインストールしていない場合は、ここの説明はスルーできます。
nginxが起動中であれば、以下の対応が必要となります。
- nginxの無効化
- nginxの停止
それぞれを以下のコマンドで実行します。
sudo systemctl disable nginx sudo systemctl stop nginx
nginxをインストールしていない場合は、次のようなエラーが出ます。
$ sudo systemctl disable nginx Failed to disable unit: Unit file nginx.service does not exist.
もちろん、未インストールなら停止する際にもエラーは出ます。
$ sudo systemctl stop nginx Failed to stop nginx.service: Unit nginx.service not loaded.
以上、nginxの無効化・停止についての説明でした。
次は、最新版OpenRestyのパッケージ取得について説明します。
最新版OpenRestyのパッケージ取得
最新版OpenRestyのパッケージ取得を行います。
次の3つの手順を踏んでいきます。
- 公開鍵のインポート
- リポジトリの追加
- パッケージの更新
それぞれを下記で説明します。
公開鍵のインポート
公開鍵のインポートは、取得するパッケージの身元を保証するために必要な作業です。
どこの馬の骨かわからないパッケージを受け入れるのは危険と言えます。
そのため、公開鍵のインポートが必要になります。
まずは、公開鍵をインポートするための準備からです。
sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates
上記インストールが完了したら、公開鍵をインポートします。
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
実行して、「OK」が出ることを確認しましょう。
これで公開鍵のインポートは完了です。
リポジトリの追加
リポジトリの追加には、以下の方法があります。
- /etc/apt/sources.listに追記
- /etc/apt/sources.list.dにファイルを設置
公式では、「/etc/apt/sources.list.d」へのファイル設置の方法を載せています。
推奨している方法で行います。
echo "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/openresty.list
上記を実行したら、ファイルが作成されていることを確認します。
$ cat /etc/apt/sources.list.d/openresty.list deb http://openresty.org/package/ubuntu focal main
上記のように確認できれば、成功です。
ただし、それぞれのOS毎に「focal」の部分は異なります。
今回は、次のOSで検証しています。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
だから、「focal」となります。
とにかく、ファイルができていればリポジトリの追加は完了です。
パッケージの更新
パッケージ管理システムを更新します。
sudo apt-get update
途中でエラーなく完了していれば、パッケージの更新は成功しているはずです。
openrestyがパッケージとして認識されていることを確認します。
$ sudo apt info openresty Package: openresty Version: 1.19.9.1-1~focal1 Priority: optional Section: httpd Maintainer: OpenResty Admin <admin@openresty.com> Installed-Size: 3,981 kB Depends: libc6 (>= 2.29), libcrypt1 (>= 1:4.1.0), libgcc-s1 (>= 3.3), openresty-openssl111 (>= 1.1.1h), openresty-pcre (>= 8.44), openresty-zlib Recommends: openresty-resty, openresty-opm Suggests: openresty-restydoc Homepage: https://openresty.org/ Download-Size: 1,054 kB APT-Sources: http://openresty.org/package/ubuntu focal/main amd64 Packages Description: core server of OpenResty for production use This package contains the core server for OpenResty. Built for production uses. . OpenResty is a full-fledged web platform by integrating the standard Nginx core, LuaJIT, many carefully written Lua libraries, lots of high quality 3rd-party Nginx modules, and most of their external dependencies. It is designed to help developers easily build scalable web applications, web services, and dynamic web gateways. . By taking advantage of various well-designed Nginx modules (most of which are developed by the OpenResty team themselves), OpenResty effectively turns the nginx server into a powerful web app server, in which the web developers can use the Lua programming language to script various existing nginx C modules and Lua modules and construct extremely high-performance web applications that are capable to handle 10K ~ 1000K+ connections in a single box.
現時点(2022年1月)における、OpenRestyの最新版のパッケージを確認できています。
このことにより、最新版OpenRestyをインストールする準備は整いました。
最新版OpenRestyのインストール
OpenRestyのインストールは、次のコマンドを実行するだけです。
このお膳立てをするのに上記で手順を踏んでてきています。
sudo apt-get install -y openresty
途中でエラーが出る場合は、「OpenRestyの起動エラーへの対応方法」をご覧ください。
インストールが完了したら、以下のコマンドで状況を確認します。
$ systemctl status openresty.service | grep Active Active: active (running) since Sat 2022-01-15 13:45:32 JST; 4min 6s ago
「active」と確認できれば、OpenRestyは正常に起動しています。
最後に、ブラウザでも確認しておきましょう。
「http://サーバーIP」へブラウザでアクセス。
デフォルトでは、OpenRestyはポート80で起動しています。
上記のように表示されることが確認できます。
以上、最新版OpenRestyのインストールの説明でした。
OpenRestyの起動エラーへの対応方法
OpenRestyのインストール中や起動時に次のような表示が出ることがあります。
systemd[1]: openresty.service: Control process exited, code=exited, status=1/FAILURE systemd[1]: openresty.service: Failed with result 'exit-code'. systemd[1]: Failed to start The OpenResty Application Platform.
まず、インストール中であれば慌てないようにしましょう。
OpenRestyのインストール自体は、おそらく成功しています。
以下のコマンド実行時に、[インストール済み]が確認できているはずです。
$ apt list openresty 一覧表示... 完了 openresty/不明,now 1.19.9.1-1~focal1 amd64 [インストール済み]
では、なぜエラーが表示されるのでしょうか?
これは、OpenRestyの起動に失敗しているのです。
それを確かめるには、下記のコマンドで状況を確認します。
systemctl status openresty.service
表示されるメッセージの中に、次のような表示が確認できます。
nginx[103572]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx[103572]: nginx: [emerg] still could not bind()
これの意味するところは、ポート80が利用できないということです。
すでに、Apacheなど別のWebサーバーがポート80で起動しています。
そのため、OpenResty(nginx)がポート80を利用できません。
だから、OpenRestyは起動もできません。
このエラーを解消するには、次の方法が考えられます。
- ポート80を強奪する
- 別のポート(例えば、8000など)をOpenRestyで利用する
状況によると思いますが、今回は平和的に解決を目指します。
OpenRestyをポート80以外で動かします。
そのためには、OpenRestyの設定ファイルを修正します。
/usr/local/openresty/nginx/conf/nginx.conf(35行目付近)
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; }
「listen」の値を別のポートに変更します。
今回は、以下のように変更。
server { listen 8000; server_name localhost;
変更したら、次のOpenRestyを再起動します。
sudo systemctl restart openresty.service
ブラウザで確認する場合、設定したポートは開放する必要があります。
次のコマンドでポートの開放状況を確認できます。
$ sudo ufw status | grep 8000 8000 ALLOW Anywhere 8000 (v6) ALLOW Anywhere (v6)
以上、OpenRestyの起動エラーへの対応方法を説明しました。