Fedora 32, Ubuntu 20.04 Focal 和 Alpine 3.7 ~ 3.11 的 OpenResty 官方二進位制倉庫
我們剛剛新增了針對 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
而不是 nginx
。 nginx
預設並不在你的 PATH
環境變數中,這是為了避免和同一個系統中其他 NGINX 包發生衝突。
你可以使用這個命令來啟動預設的 OpenResty 服務
sudo rc-service openresty start
stop
、reload
、upgrade
、reopen
和 checkconfig
這些指令也是支援的。
預設的服務字首是 /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 字元編碼,並且安裝的 perl
和 groff
是比較新的版本。否則那些非 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 倉庫已經提供了這個包,我們就不自己打包了。
除錯符號包
我們為那些包含二進位制元件的包,比如 openresty
和 openresty-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 版本。