基于 Openresty 實現的高性能Web應用開發框架:Vanilla

jopen 9年前發布 | 23K 次閱讀 Vanilla Web框架

香草/Vanilla 是一個基于 Openresty 實現的高性能Web應用開發框架。

安裝說明

  1. Vanilla使用Luarocks管理包依賴

    </li>

  2. 安裝Luarocks(with lua5.1)

    </li>

  3. 使用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版本

    1. Openresty執行Lua需要基于Luajit加速,Luajit使用Lua5.1的ABI

      </li>

    2. Luarocks會根據Lua版本識別相應的包

      </li>

    3. Vanilla運行Openresty前需要基于Lua5.1做服務相關自動化配置

      </li> </ol>

      為何建議源碼安裝

      1. 源碼安裝更方便版本控制

        </li>

      2. 尤其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、應用防火墻等)

        • 功能使用方便易于擴展

          項目主頁:http://www.baiduhome.net/lib/view/home/1450187767688

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!