【Ubuntu】OpenRestyのインストール

【Ubuntu】OpenRestyのインストール サーバー

「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の起動エラーへの対応方法を説明しました。

タイトルとURLをコピーしました