本文演示内容如下:
构建节点和用户,应用的开发和发布,数据的生成和展示,绑定域名,应用和数据可以在浏览器中展示,也可以在微信中传播。
整个过程系三个节点,四个用户互相协作完成。
相关展示细节如下:
演示不同节点的配置
演示服务授权
演示应用的开发和发布
演示如何將家用节点和应用映射到指定的域名上
演示命令行角本方式调用Api
演示js通过rpc方式调用Api
演示用户认证鉴权API
演示不同方式的文件操作
目录结构
根目录
|Leither-----------------系统程序
|SystemVars.json---------配置文件
|temp.html---------------域名模板
|--service---------------服务目录,存放服务端角本
| |----RequestService--处理服务请求的角本
|--webdav----------------缺省的webdav目录
获取Leither执行程序
Leither可执行程序大约6MB,可以从Leither/bin下载,根据所用硬件选择正确版本。Leither即是云操作系统,也是功能强大的命令行工具。下述内容默认的系统构成是Leither云服务节点一台,开发机一台,域名节点一个。开发机上执行命令行前也需要启动Leither,并在后台运行。本文描述开发机的设置和使用。
点击下载
设置配置文件
文件格式为json,参考如下:
{
"ServicePort":8000,
"LogAdapter":"file",
"LogConfig":"{"filename":"Leither.log","level":1}",
}
SystemVars.json文件跟Leither可执行文件放同一目录下。设置运行参数,一般只需要设置ServicePort, Gateway, FixedAddr, LAN
-
ServicePort
服务端口
不设置的情况,系统缺省值为9000,对于家用节点,不可以设置80,8080端口。通常是被运营商封掉了
配置示例{ ...... "ServicePort":8000, ...... }
-
FixedAddr
域名或固定的ip
用于有独立ip的云主机 不设置的情况,程序会通过网关或好友节点自动探查自己的外网地址
配置示例{ ...... "FixedAddr":"121.44.244.138", ...... }
-
LogConfig
日志配置
配置示例- 文件日志:
{ ...... "LogAdapter":"file", "LogConfig":"{\"filename\":\"Leither.log\",\"level\":1}", ...... }
- 控制台日志:
{ ...... "LogAdapter":"console", "LogConfig":"{\"level\":1}", ...... }
-
LAN
多网卡的情况下,绑定服务的网卡
配置示例- 绑定Mac
{ ...... "LAN":"98-5F-D3-46-17-A8", ...... }
- 绑定IP
{ ...... "LAN":"192.168.1.24", ...... }
-
Gateway
对于有动态ip的节点,启动时会通过网关节点获取自己当前的外网ip
节点定期(当前是15分钟)会向网关节点上报自己的地址
可以通过网关节点,找到指定的节点或内容
通过网关节点帮助,可以把节点、应用、内容绑定在设定的域名上{ ...... "Gateway":["18.222.243.60","121.40.244.135","112.126.60.40"], ...... }
运行Leither
./Leither &
Leither运行成功后,会在本地创建多个目录,包括service,WebDav等。
本文涉及三个节点:开发节点、应用节点、域名节点
开发节点
开发程序时使用的节点
通常在开发机上,这个节点用于应用的开发和调试
需要配置的文件
Leither(.exe), SystemVar.json
初次使用,只需要这两个文件便可运行,根目录会生成密钥文件 hostkey.cfg。这个文件代表节点身份。
域名节点
域名节点是帮应用节点解析域名的节点
有固定ip的主机,节点会把提前设定的域名请求转到家用节点,整个过程中除了开始的2.7k的引导包,其他流量是直接访问家用节点
需要的文件比开发节点多一个模板文件temp.html
应用节点 这个节点通常布置在用户家里的设备上,使用家用网络,运行应用,保存用户数据。
本文案例涉及多个用户:
-
三个节点用户
对应管理三个节点,密钥存放在节点程序的根目录,文件名为hostkey.cfg。 -
开发者用户
开发者用户开发维护并发布程序,密钥需要通过Leither lpki 命令单独生成,单独保存 -
数据所有者用户
应用数据的所有者
为了简单,在下面的示例中缺省使用了应用节点的用户存放测试数据。
这个用户便是下文中讲的测试用户"lsb"
为了演示简单,省去注册用户环节,这用户写在了代码里。 -
数据查看者用户 查看使用数据的用户
在下面的示例中,是通过角本执行register产生的,这种方式密钥保存在当前节点中,需要对当前节点有信赖关系。 -
域名节点用户
域名节点的所有者,帮助其它节点解析域名,在本案例中是使用域名节点用户
生成测试用户
测试用户指的是上文中的数据查看者用户。
在应用节点根目录下,用Leither命令行运行脚本,生成一个测试用户"lsb"
./Leither lpki runscript -s "local auth=require('auth'); return auth.Register('lsb', '123456');"
在这个目录下执行命令,缺省会使用当前节点信息,使用当前节点身份,连接当前节点进行操作 本例中,lpki是安全相关的命行集,Register是认证API中的用户注册
授权测试用户访问权限
设置数据目录权限
后面应用中操作的数据目录是webdav目录,对应的名称是“mmroot”,缺省是不对外开放的。 需要修改对外权限
./Leither lpki runscript -s "local node=require('mimei'); return node.MMSetRight(request.sid, 'mmroot', '', 0x07276707);"
生成测试用户并授权后,lsb用户便可以查看这个目录下的数据。
可以在WebDav目录下放一些图片视频,下面的测试应用会显示这些文件列表。
生成开发者用户
生成密钥和通行证, 用以发布代码数据到服务节点上
密钥相关信息应该单独保存,切勿和节点放在一起
- 生成key
包含公钥和私钥,公钥取摘要生成代表用户身份的唯一idLeither lpki genkey -o my.key
- 生成ca
-m message 可以省略
Leither lpki genca -k my.key -m "name=my" -o my.ca
- 生成自签名cert
Leither lpki gencert -k my.key -c my.ca -m "name=forapp" -o my.cert
- 生成登录用passport(ppt)
通行证中包含了一个时效信息,缺省72小时Leither lpki signppt -c my.cert -m "CertFor=Self" -o mylogin.ppt
开发者获取权限
开发者获取发布应用权限
-
节点设置授权角本
节点处理服务权限的角本都放在“根目录/service/RequestService”,参考结构如下
根目录
|
|--service---------------服务目录,存放服务端角本
| |----RequestService--处理服务请求的角本在Leither中,应用和数据都是弥媒对象,处理弥媒权限的角本是mimei.lua
下载角本 点击下载
角本中代码如下:local log = require("log"); log.Debug("request service mimei request=%v", request) return true
在service目录下建立目录RequestService,把mimei.lua放进去,节点重启后生效。
-
申请应用发布权限(弥媒权限) -c 后面是开发者的通行证
-n 后面是申请的节点地址,包括本地调试程序的开发节点或实际运行的应用节点./Leither lpki reqservice -c my.cert -m RequestService=mimei -n http://192.168.3.29:4800/
下载要发布的测试应用 点击下载
应用代码目录 应用代码
在开发的工作目录中展开压缩包,目录名就是测试应用名,当前的应用名就是“dav”,可以手工修改
Leither lapp uploadapp -p mylogin.ppt -i 应用路径 -n http://192.168.3.29:4800
-i 后面是要发布的应用路径
-n 后面是要发布的节点链接,可以是应用节点,也可以是开发节点
这时候,应用发布的是一个当前版本,可以通过显示信息中的链接检查应用是否正常。在确定应用无误之后,可以把当前版本入库。
固化发布
把版本号的cur内容入库,并更新版本号,第一个版本为1,第二个版本为2,last通常为最后版,也可以是指定版本。
./Leither lapp backup -a dav -p mylogin.ppt -n http://192.168.3.29:4800/
-
确保节点能够被外网访问
有些用户没有分配外网ip,这时候需要向运营商索取,或者向第三方借用ip(这个话题暂不展开)
通常路由器都屏蔽了局域网内的设备,这时候可以通过配置端口转发使外网可以访问到节点 -
域名设置
./Leither lapp setdomain -d fangpi.leither.cn -n http://192.168.3.29:4800/ -a dav -p mylogin.ppt -m gwaddr=leither.cn
fangpi是开发者创建的Leither二级域名,dav是测试应用名称
也可设置自己的域名,需要把域名解析指向域名节点的ip便可
可以在Webdav目录中创建目录,复制文件,通过域名便可以访问到这些信息。
webdav目录也可以映射到电脑里的资源管理器中
后续单独介绍操作细节
至此,应用发布完成,可以在外网访问 http://fangpi.leither.cn, 其结果与内网访问 http://192.168.3.29:4800 相同。
如果从内网访问发布后的公网URL,同时又开启VPN的话,可能会出现网页无法打开。此时关闭vpn即可。
以上流程是为了了解所有相关概念,并展开所有细节。在实际的业务系统中通常会通过业务代码把整个流程处理到极简。
leither早期版本封装过的极简流程:
优化过的流程视频文件,一分钟安装私有云