Vanilla 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Vanilla 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 MIT
开发语言 Perl Lua
操作系统 跨平台
软件类型 开源软件
所属分类 服务器软件HTTP服务器
开发厂商
地区 国产
提 交 者 叶秀兰
适用人群 未知
收录时间 2015-12-15

软件简介

香草/Vanilla

香草/Vanilla是一个基于Openresty实现的高性能Web应用开发框架.

Vanilla

邮件列表


安装

目前Vanilla支持两种安装方式

  • Make(推荐使用此种)

  • Luarocks

make install安装须知

Vanilla 支持的选项都提供了默认值,如果你的环境与默认值不一样,请configure时指定成你自己的。

特别注意选项--openresty-path,默认为/usr/local/openresty,请确保设置正确。

可以在源码目录下执行configure --help来查看安装选项的使用方法。

下面是一个简单的安装示例:

./configure --prefix=/usr/local/vanilla --openresty-path=/usr/local/openresty

make install (如果没有C模块【目前支持lua-filesystem】,则不需要make,直接make install)

luarocks install安装须知

可以使用luarocks安装vanilla,但是下面三点请注意 1. Luarocks应该基于lua5.1.x的版本安装,因为其他版本Lua和Luajit的ABI存在兼容性问题。 2. Luarocks安装的Vanilla在nginx.conf文件的NGX_PATH变量不可用。 3. 请确保nginx命令可以直接运行(nginx命令在你的环境变量中)

Vanilla 使用

Vanilla命令

Vanilla 目前提供了两个命令vanilla,和vanilla-console

  • vanilla用来初始化应用骨架,停启服务(添加--trace参数可以看到执行的命令)

  • vanilla-console是一个交互式命令行,主要提供一种方便学习Lua入门的工具,可以使用一些vanilla开发环境下的包,比如table输出的lprint_r方法。

命令行执行vanilla就能清晰看到vanilla命令提供的选项。

vanilla
Vanilla v0.1.0-rc3, A MVC web framework for Lua powered by OpenResty.

Usage: vanilla COMMAND [ARGS] [OPTIONS]

The available vanilla commands are:
 new [name]             Create a new Vanilla application
 start                  Starts the Vanilla server
 stop                   Stops the Vanilla server

Options:
 --trace                Shows additional logs

创建应用

vanilla new app_name
cd app_name
vanilla start [--trace]     -- 默认运行在development环境

## 在linux的bash环境下:
VA_ENV=production vanilla start [--trace]  -- 运行在生产环境
## 在BSD等tcsh环境下:
setenv 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(应用请求入口)

业务代码示例 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

模板示例 views/index/index.html

<!DOCTYPE html> <html> <body> <img src="http://m1.sinaimg.cn/maxwidth.300/m1.sinaimg.cn/120d7329960e19cf073f264751e8d959_2043_2241.png"> <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

  • 使复杂的Nginx配置对Web业务开发者更透明化

  • 开发者不再需要了解Openresty的实现细节,而更关注业务本身

  • 实现了Web开发常规的调试,错误处理,异常捕获

  • 实现了请求的完整处理流程和插件机制,支持路由协议、模板引擎的配置化

  • 整合、封装了一系列Web开发常用的工具集、类库(cookie、应用防火墙等)

  • 实现了自动化、配置化的Nginx指令集管理

  • 更合理的利用Openresty封装的8个处理请求Phase

  • 支持不同运行环境(开发、测试、上线)服务的自动化配置和运行管理

  • 功能使用方便易于扩展

  • 基于Openresty开发,具备Openresty一切优良特性


展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (10)

加载中
iDev_周晶软件作者
#Vanilla#早安
2015/12/20 08:35
回复
举报
iDev_周晶软件作者
#Vanilla#早安
2015/12/22 06:46
回复
举报
iDev_周晶软件作者
#Vanilla#欢迎大家一起讨论OpenResty高性能Web应用开发
2015/12/23 21:52
回复
举报
iDev_周晶软件作者
今天怎么没有人问答了?大家对#OpenResty##Vanilla#不感兴趣吗?http://www.oschina.net/question/865233_2146261
2015/12/24 13:45
回复
举报
iDev_周晶软件作者
欢迎一起讨论#OpenResty# #Vanilla#高性能Web服务开发 http://www.oschina.net/question/865233_2146261
2015/12/26 08:48
回复
举报
iDev_周晶软件作者
#Vanilla#祝大家新年快乐
2016/01/01 23:20
回复
举报
iDev_周晶软件作者
#Vanilla# 坚持很不易
2016/01/08 12:01
回复
举报
iDev_周晶软件作者
#Vanilla##OpenResty#文档,不仅能学技术还能学英语。@章亦春
2016/01/10 21:03
回复
举报
iDev_周晶软件作者
#Vanilla#gogogo
2016/01/16 18:44
回复
举报
iDev_周晶软件作者
@红薯 怎么给我的#Vanilla# 加一个标签啊http://www.oschina.net/code/tag/openresty 像这样的?否则我分享代码的时候无法关联上#Vanilla# 求大招。。
2016/01/16 23:15
回复
举报
更多评论
暂无内容
发表了博客
2018/03/18 09:50

Openresty

一:简介 OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。 OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以 快速构造出足以胜任 10...

0
0
发表了博客
2019/11/29 00:17

openresty配置

[toc] openresty配置的一些问题总结! <!-- more --> 环境 win10下的linux子系统ubuntu(wsl) openresty版本:ngx_openresty-1.7.7.2.tar.gz wsl安装 请移步 {% post_link wsl笔记 %} openresty安装 请参考安装OpenResty(Nginx+Lua)开发环境 或者参考 {% post_link openresty安装笔记 %} openssl版本问题 需要指定旧版本...

0
0
发表了博客
2015/07/07 11:39

openresty 安装

openresty 安装

0
0
发表了博客
2019/12/18 17:12

OpenResty部署

简介 OpenResty又被称为ngx_openresty,基于nginx核心和许多第三方模块组成,默认继承了Lua开发环境,使得nginx可以做为一个web服务使用 原理 Nginx采用master-worker模型,也就是一个master进程管理多个worker进程,基本的时间处理都放在worker进程中,master进程负责全局初始化以及对worker进程的管理,OpenResty利用 ...

0
0
发表了博客
2018/12/13 14:02

浅谈 OpenResty

一.前言 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开发者对其望而生畏。为了开发人员方便,所以接下来我们要介绍一种整合了Nginx和lua的框架,那就是OpenResty,它帮我们实现了可以用...

0
0
发表了博客
05/24 10:40

OpenResty 教程

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 在游戏服务器里,OpenResty一般担任网关的角色,但是我想用OpenResty 来作为http服务器,以应付sdk登录、sdk...

0
1
发表了博客
2018/06/19 08:44

OpenResty创造者

OpenResty 是一个开源的 Web 平台,用于开发高性能和高动态的 Web 网关或者 Web 应用。OpenResty 最早是为了支持全网搜索引擎周边的相关搜索的 API 接口,后来我们基于 Nginx 和 LuaJIT 重写了 OpenResty,用于支持淘宝量子统计这款产品的所有数据 API,再后来,我加入美国的 CDN 公司 Cloudflare,使用 OpenResty 驱动 ...

0
0
发表了博客
2018/01/16 11:46

Openresty 与 Tengine

Openresty和Tengine基于 Nginx 的两个衍生版本,某种意义上他们都和淘宝有关系,前者是前淘宝工程师agentzh主导开发的,后者是淘宝的一个开源项目; Openresty的最大特点是引入了ngx_lua模块,支持使用lua开发插件; Tengine的特点是融入了因淘宝自身的一些业务带来的新功能; Tengine 简介 tengine官方网站:http://te...

0
0
发表于开发技能专区
02/24 15:20

OpenResty--【ngx.location.capture】

介绍 描述 在openResty中,ngx.location.capture_multi是一个非常强大的功能, 其可以达到极大的减少浏览器的http连接数量,并且可以异步并发的访问后台 Java/PHP/Python 等等接口。 可以应用于并发多个相互之间没...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2015/12/22 17:42

OSC 第 105 期高手问答 —— 高性能 Web 应用开发

OSCHINA 本期高手问答( 12月23日- 12月29日)我们请来了 Vanilla 的开发者@iDev_周晶 来解答 从 Vanilla 开始做 OpenResty 高性能 Web 应用开发 方面的问题。 周晶,@iDev_周晶 ,新浪移动事业部技术经理,系统架构组负责人,主要负责新浪移动事业部后端服务的架构优化及性能调优,专注高性能后端服务开发,Vanilla作者。...

41
73
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
10 评论
73 收藏
分享
返回顶部
顶部