我們剛剛新增了針對 Fedora 32, Ubuntu 20.04 Focal 和 Alpine 3.7 ~ 3.11 的 OpenResty 官方二進位制倉庫。

類似於原有的 RPM,Deb 包,新增的 Alpine APK 包,同樣提供了以下幾個安裝包

openresty

這是用於核心 OpenResty 服務的生產版本。

這個包註冊在 /usr/bin/openresty, 它是 OpenResty 的 nginx 可執行檔案 /usr/local/openresty/nginx/sbin/nginx 的符號連結。 預設的,你應該能在你的 PATH 環境變數中看到 openresty 命令。當你想呼叫這個包提供的 nginx 可執行檔案時,記得總是用 openresty 而不是 nginxnginx 預設並不在你的 PATH 環境變數中,這是為了避免和同一個系統中其他 NGINX 包發生衝突。

你可以使用這個命令來啟動預設的 OpenResty 服務

sudo rc-service openresty start

stopreloadupgradereopencheckconfig 這些指令也是支援的。

預設的服務字首是 /usr/local/openresty/。對於你自己的 OpenResty 應用,強烈推薦指定你自己的字首,並指向你自己應用的目錄,像這樣:

sudo openresty -p /opt/my-fancy-app/

然後在 /opt/my-fancy-app/ 目錄下會有一些 conf/, html/logs/ 這樣的子目錄。 用這種方法,我們可以避免汙染 /usr/local/openresty/ 下的 OpenResty 安裝目錄樹,並且允許多個不同的 OpenResty 應用共享同一個 OpenResty 服務程式。但是你需要為每一個自己的 OpenResty 應用寫一份啟動指令碼。你可以使用預設的 /etc/init.d/openresty/etc/conf.d/openresty 啟動指令碼作為參考模板。

我們使用了我們自己的 OpenSSL(透過 openresty-openssl 包)、PCRE、zlib 和 LuaJIT 版本,來保證這些關鍵元件是最新的並且可以一起工作。

openresty-resty

這個包裡面有 resty 命令列程式,它可以在你的 PATH 環境變數(做為 /usr/bin/resty)中看到。你可以這樣嘗試用下

$ resty -e 'ngx.say("hello")'
hello

這個包依賴標準 perl 包以及我們的 openresty 包才能正常工作。

你可以從 resty-cli 這個專案得到更多細節。

openresty-restydoc

這個包包含 OpenResty 文件工具鏈和文件資料。最有用的工具是 restydoc 命令列程式,預設應該能在你的 PATH 環境變數(做為 /usr/bin/restydoc)裡面看到。

這樣嘗試:

restydoc ngx_lua

restydoc -s content_by_lua

restydoc -s proxy_pass

可以從 restydoc -h 命令的輸出中看到更多使用的細節。

為了達到最佳結果,請確保你的 terminal 使用的是 UTF-8 字元編碼,並且安裝的 perlgroff 是比較新的版本。否則那些非 ASCII 的字元可能顯示不正常。

openresty-debug

這個是 OpenResty 的正常除錯版本。和 openresty 包比起來,它有以下不同:

  • 這個版本禁止了 C 編譯器的各種最佳化。
  • 它開啟了 NGINX 除錯日誌功能。
  • 除了 NGINX 中預設的 epoll 模組,它額外開啟了 poll 模組,以便能用上 mockeagain 這個測試工具。
  • 對於 OpenSSL 庫,它使用 openresty-openssl-debug 包替代了 openresty-openssl
  • 它在 LuaJIT 版本中開啟了 API 檢查和斷言。
  • ngx_http_lua 模組中開啟了斷言。
  • 它讓 ngx_http_lua 模組在 LuaJIT 自己的垃圾回收管理記憶體分配失敗時,立即退出當前的 nginx 工作程序(預設行為是記錄錯誤資訊並優雅退出當前工作程序)。
  • NGINX 預設的服務字首是 /usr/local/openresty-debug/
  • 你在 PATH 環境變數裡面看到的入口點是 openresty-debug 而不是 openresty
  • 它沒有帶啟動指令碼。

你永遠都不應該在生產環境上使用這個包。這個包是僅供開發使用。

openresty-valgrind

這是 OpenResty 的一個特別除錯版本,為了配合 Valgrind 工具鏈。Valgrind 是一個檢測各種記憶體問題的強大工具,比如記憶體洩露和記憶體非法訪問。為了用 Valgrind 最大限度的捕獲到記憶體 bug,這個版本在 openresty-debug 基礎上增加了如下操作:

  • 它打上了 “no-pool” 的補丁,禁止 NGINX 中記憶體池的使用。
  • 它強制 LuaJIT 使用系統分配記憶體而不是 LuaJIT 自己分配。
  • 在 LuaJIT 版本中開啟內部 Valgrind 協作。
  • NGINX 預設的服務字首是 /usr/local/openresty-valgrind/
  • 你在 PATH 環境變數裡面看到的入口點是 openresty-valgrind 而不是 openresty-debug

想了解更多在 OpenResty 中基於 Valgrind 的測試細節,可以看下面的教程:

https://openresty.gitbooks.io/programming-openresty/content/testing/test-modes.html#_valgrind_mode

openresty-openssl

這是我們自己維護的 OpenSSL 庫。特別的,我們為了節省一些開銷,在這個版本中已經禁用了對多執行緒的支援。

openresty-openssl-debug

這是 OpenSSL 庫的除錯版本。和 openresty-openssl 相比,有這些不同:

  • 禁止了所有 C 編譯器最佳化。
  • 它沒有 Valgrind 錯誤也沒有任何 Valgrind 誤報。
  • 彙編程式碼被禁止,所以我們總是有完美的基於 C 的回溯以及類似的。

perl-lemplate

這個包提供了 lemplate 這個命令列程式,它可以把使用 perl TT2 模板語言語法的模板檔案編譯成 OpenResty 的獨立 Lua 模組。

比如 OpenResty 的官方網站,openresty.org,就使用 Lemplate 作為 HTML 頁面的模板編譯器。

perl-test-nginx

這是我們的測試框架 Test::Nginx。從下面章節中可以看到對這個測試框架的一個完整介紹:

https://openresty.gitbooks.io/programming-openresty/content/testing/

由於 Alpine 官方的 community 倉庫已經提供了這個包,我們就不自己打包了。

除錯符號包

我們為那些包含二進位制元件的包,比如 openrestyopenresty-openssl 提供除錯符號包。 除錯符號包和其他標準的 APK 包一樣,只是包名加了 -dbg 的字尾。比如 openresty 的除錯符號是 openresty-dbg

打包原始碼

build 這些包的原始檔都放在 openresty-packaging GitHub 倉庫中:

https://github.com/openresty/openresty-packaging/tree/master/alpine/

更多

OpenResty 官方已經提供了 Ubuntu, Debian, CentOS, Red Hat 企業版 Linux (RHEL), Fedora, Amazon Linux, OpenSUSE Leap, Alpine 這些系統的二進位制包。

檢視 Linux Packages 頁面獲取更多關於官方 OpenResty 包倉庫的資訊。

新版本 OpenResty

新的 OpenResty 1.17.8.1 RC1 釋出後,收到了一些反饋,我們將在近期釋出 RC2 版本。