OpenResty パッケージ管理ツール opm の導入と設定詳細

OpenResty 公式パッケージマネージャ opm の概要

opm(OpenResty Package Manager)は、Perl で実装された OpenResty 標準のパッケージ管理ツールです。Node.js の npm や Perl の CPAN に相当する機能を持ちます。中央リポジトリ(opm.openresty.org)から Lua ライブラリの取得や、自作ライブラリの公開を可能にします。

LuaRocks との比較

OpenResty 環境において、一般的に使われる LuaRocks ではなく opm を推奨する理由があります。LuaRocks の多くのライブラリは、OpenResty の非同期イベントループをブロッキングする可能性があり、これがパフォーマンス低下の主要因となります。opm はこれらの問題点を考慮して設計されているため、高性能な NGINX ルートでの運用に適しています。

基本コマンドの使用法

opm コマンドは、パッケージの検索、インストール、更新、削除などの操作を行います。

# ヘルプの表示
opm --help

# パッケージ名の検索
opm search mylib

# 特定の作者によるライブラリのインストール
opm get developer/lua-resty-toolkit

# 全作者リストから特定ライブラリを検索してインストール
opm get lua-resty-toolkit

# インストール済み情報の確認
opm info lua-resty-toolkit

# 現在のインストール状況一覧
opm list

# 特定のライブラリを最新版へアップデート
opm upgrade lua-resty-toolkit

# すべてのパッケージを更新
opm update

# ライブラリのアンインストール
opm remove lua-resty-toolkit

オプション --cwd を指定することで、システム全体へのインストールではなく、カレントディレクトリ配下 (./resty_modules/) へのローカルインストールが可能になります。

# ローカルディレクトリへのインストール
opm --cwd get dev/mymod

# ローカル環境のパッケージ一覧確認
opm --cwd list

# ローカル環境からの削除
opm --cwd remove mymod

開発者向けのワークフロー

パッケージを作成してサーバーにアップロードするには、以下の手順が必要です。

  1. ソースツリーのルートに dist.ini メタファイルを作成します。
  2. ~/.opmrc に認証情報を設定します。
  3. opm build でアーカイブを生成し、opm upload で公開します。
# ビルド実行
cd /path/to/my-lua-library
opm build

# サーバー向け最終ビルド(任意)
cd my-lua-library-VERSION && opm server-build

# アップロード(自動的にビルドも呼び出されます)
opm upload

# ビルド残留物のクリーンアップ
opm clean dist

設定ファイルの詳細

dist.ini ファイル

パッケージのメタデータ定義を行います。INI 形式で記述され、必須項目には name, abstract, author, license などが含まれます。

[package]
name = lua-resty-sample-tool
abstract = Sample utility for testing purposes
author = Jane Doe (janedoe)
is_original = yes
license = mit
lib_dir = lib
doc_dir = doc
repo_link = https://github.com/example/lua-resty-sample-tool
main_module = lib/resty/sample/tool.lua
requires = luajit, openresty/lua-resty-core >= 1.0.0
  • version: バージョン番号(任意)。主モジュールから自動抽出される場合は省略可能です。
  • requires: 依存関係の定義。>=, =, > による制約指定が可能です。
  • exclude_files: パッケージ作成時に除外するファイルパターン。

.opmrc ファイル

ユーザーごとの認証情報やサーバー設定を保持します。ホームディレクトリ (~/.opmrc) に配置します。

github_account=janedoe
github_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
upload_server=https://opm.openresty.org
download_server=https://opm.openresty.org

Github トークンの付与においては、セキュリティを考慮し、必要最小限のスコープ (user:email, read:org) を使用することが推奨されます。

インストール方法

OpenResty v1.11.2.2 以降ではデフォルトで付属していますが、旧バージョンやバイナリパッケージを使用している場合は別途インストールが必要になる場合があります。

# ソースから bin/opm をコピーする場合
sudo cp bin/opm /usr/local/openresty/bin/

# 必要なディレクトリの作成(必要な場合)
mkdir -p site/lualib site/manifest site/pod

動作には Perl, tar, curl が必要です。curl は SNI サポートが要求されます。

安全性について

opm クライアントおよびサーバー間通信はデフォルトで HTTPS 経由で行われ、SSL 証明書検証が有効になっています。GitHub トークンはサーバー側でハッシュ化されて保存され、管理者でも復元できないよう保護されています。また、転送データの整合性を保証するため MD5 チェックサムも実施されます。

今後の予定

現在サポートされているのは純粋な Lua ライブラリですが、将来的には C 拡張モジュールやサードパーティ製 NGINX C モジュールの動的配布、LuaRocks パッケージの一部互換性(名前空間 luarocks 経由など)の実装が検討されています。

ローカルインストール時の設定

プロジェクトごとにパッケージを隔離して使用する (--cwd) 場合、nginx.conf 内に以下のようにパスを設定する必要があります。

http {
    lua_package_path "$prefix/resty_modules/lualib/?.lua;;";
    lua_package_cpath "$prefix/resty_modules/lualib/?.so;;";
    ...
}

変数 $prefix は実行時に resolve されるため、絶対パスを書き換えないでください。アプリケーション起動時には -p $PWD/ オプションを使用してください。

openresty -p $PWD/

タグ: openresty lua nginx package-manager opm

5月27日 09:01 投稿