基于 Openresty 實現的高性能Web應用開發框架:Vanilla
香草/Vanilla 是一個基于 Openresty 實現的高性能Web應用開發框架。
安裝說明
-
Vanilla使用Luarocks管理包依賴
</li> -
安裝Luarocks(with lua5.1)
</li> -
使用Openresty最新穩定版
</li> </ol>安裝示例 / Linux平臺
yum install lua-devel luarocks -- 需要安裝Lua開發版 luarocks install vanilla
安裝示例 / MacOSX平臺
wget lua5.1(lua5.1 源碼地址) 源碼安裝lua5.1 wget luarocks(luarocks源碼地址) 源碼安裝luarocks luarocks install vanilla
為何建議Lua5.1版本
-
Openresty執行Lua需要基于Luajit加速,Luajit使用Lua5.1的ABI
</li> -
Luarocks會根據Lua版本識別相應的包
</li> -
Vanilla運行Openresty前需要基于Lua5.1做服務相關自動化配置
</li> </ol>為何建議源碼安裝
-
源碼安裝更方便版本控制
</li> -
尤其MacOSX10.9后brew默認安裝的Lua是5.2版本,而Openresty必須源碼安裝5.1
</li> </ol>使用
應用代碼骨架生成及服務啟動
vanilla new app_name cd app_name vanilla start [--trace] -- 默認運行在development環境 VA_ENV=production vanilla start [--trace] -- 運行在生產環境
代碼目錄結構說明
? /Users/zj-git/app_name/ tree ./ ./ ├── application(應用代碼主體目錄) │ ├── bootstrap.lua(應用初始化 / 可選<以下未標可選為必選>) │ ├── controllers(應用業務代碼主體目錄) │ │ ├── error.lua(應用業務錯誤處理,處理本路徑下相應業務報錯) │ │ └── index.lua(hello world示例) │ ├── library(應用本地類包) │ ├── models(應用數據處理類) │ │ ├── dao(數據層業務處理) │ │ │ └── table.lua │ │ └── service(服務化業務處理,對DAO的再次封裝) │ │ └── user.lua │ ├── nginx(*Openresty所封裝Nginx請求處理各Phase) │ │ └── init.lua(*init_by_lua示例) │ ├── plugins(插件目錄) │ └── views(視圖層,與controllers一一對應) │ ├── error(錯誤模板) │ │ └── error.html │ └── index(index controller模板) │ └── index.html ├── config(應用配置目錄) │ ├── application.lua(應用基礎配置 / 路由器、初始化等設置) │ ├── errors.lua(應用錯誤信息配置) │ ├── nginx.conf(nginx配置文件模板) │ ├── nginx.lua(服務各種運行環境配置 / 是否開啟lua_code_cache等) │ ├── waf-regs(應用防火墻規則配置目錄) │ │ ├── args │ │ ├── cookie │ │ ├── post │ │ ├── url │ │ ├── user-agent │ │ └── whiteurl │ └── waf.lua(服務防火墻配置) ├── logs(日志目錄) │ └── hack(攻擊日志目錄 / 保持可寫權限) ├── pub(應用Nginx配置根路徑) │ └── index.lua(應用請求入口) └── spec(基于busted的單元測試路徑) ├── controllers │ └── index_controller_spec.lua ├── models └── spec_helper.lua
業務代碼示例 IndexController
local IndexController = {}
function IndexController:index() local view = self:getView() local p = {} p['vanilla'] = 'Welcome To Vanilla...' p['zhoujing'] = 'Power by Openresty' view:assign(p) return view:display() end
return IndexController</pre>
模板示例 views/index/index.html
<!DOCTYPE html> <html> <body> <img src="https://simg.open-open.com/show/1259b4da0643e45dde70d24898253ede.jpg"> <h1><a href = 'https://github.com/idevz/vanilla'>{{vanilla}}</a></h1><h5>{{zhoujing}}</h5> </body> </html>
為什么需要 Vanilla
回答這個問題,我們只需要看清楚 Openresty 和 Vanilla 各自做了什么即可。
Openresty
-
提供了處理HTTP請求的全套整體解決方案
-
給Nginx模塊開發開辟了一條全新的道路,我們可以使用Lua來處理Web請求
-
形成了一個日趨完善的生態,這個生態涵蓋了高性能Web服務方方面面
Vanilla
-
基于Openresty開發,具備Openresty一切優良特性
-
實現了自動化、配置化的Nginx指令集管理
-
更合理的利用Openresty封裝的8個處理請求Phase
-
支持不同運行環境(開發、測試、上線)服務的自動化配置和運行管理
-
使復雜的Nginx配置對Web業務開發者更透明化
-
開發者不再需要了解Openresty的實現細節,而更關注業務本身
-
實現了Web開發常規的調試,錯誤處理,異常捕獲
-
實現了請求的完整處理流程和插件機制,支持路由協議、模板引擎的配置化
-
整合、封裝了一系列Web開發常用的工具集、類庫(cookie、應用防火墻等)
-
功能使用方便易于擴展
-
-
-