[url href=https://leancloud.cn/docs/leanengine_cli.html]官方文档[/url]

 

命令行工具是用来管理和部署云引擎项目的工具。它不仅可以部署、发布和回滚云引擎代码,对同一个云引擎项目做多应用管理,还能查看云引擎日志,批量将文件上传到 LeanCloud 云端。

+

安装命令行工具

macOS

使用 Homebrew 进行安装:

+
brew update
brew install lean-cli
+

如果之前使用 npm 安装过旧版本的命令行工具,为了避免与新版本产生冲突,建议使用 npm uninstall -g leancloud-cli 卸载旧版本命令行工具。或者直接按照 homebrew 的提示,执行 brew link --overwrite lean-cli 覆盖掉之前的 lean 命令来解决。

+

Windows

Windows 用户可以在 Github releases 页面 根据操作系统版本下载最新的 32 位 或 64 位 msi 安装包进行安装,安装成功之后在 Windows 命令提示符(或 PowerShell)下直接输入 lean 命令即可使用。

+

也可以选择编译好的绿色版 exe 文件,下载后将此文件更名为 lean.exe,并将其路径加入到系统 PATH 环境变量(设置方法)中去。这样使用时在 Windows 命令提示符(或 PowerShell)下,在任意目录下输入 lean 就可以使用命令行工具了。当然也可以将此文件直接放到已经在 PATH 环境变量中声明的任意目录中去,比如 C:\Windows\System32 中。

+

Linux

Github releases 页面 下载预编译好的二进制文件 lean_linux_amd64,重命名为 lean 并放到 已经在 PATH 环境变量中声明的任意目录中即可。

+

通过源码安装

请参考项目源码 README

+

使用

安装成功之后,直接在 terminal 终端运行 lean -h,输出帮助信息:

+
$ lean help


 _                        ______ _                 _
| |                      / _____) |               | |
| |      ____ ____ ____ | /     | | ___  _   _  _ | |
| |     / _  ) _  |  _ \| |     | |/ _ \| | | |/ || |
| |____( (/ ( ( | | | | | \_____| | |_| | |_| ( (_| |
|_______)____)_||_|_| |_|\______)_|\___/ \____|\____|
NAME:
   lean - Command line to manage and deploy LeanCloud apps

USAGE:
   lean [global options] command [command options] [arguments...]

VERSION:
   0.7.0

COMMANDS:
     login     登录 LeanCloud 账户
     info      查看当前登录用户以及应用信息
     up        本地启动云引擎应用
     init      初始化云引擎项目
     switch    切换当前项目关联的 LeanCloud 应用
     deploy    部署云引擎项目到服务器
     publish   部署当前预备环境的代码至生产环境
     upload    上传文件到当前应用 File 
     logs      查看 LeanEngine 产生的日志
     env       输出运行当前云引擎应用所需要的环境变量
     cache     LeanCache 管理相关功能
     cql       进入 CQL 交互查询
     search    根据关键词查询开发文档
     help, h   显示全部命令或者某个子命令的帮助

GLOBAL OPTIONS:
   --version, -v  print the version
+

可以通过 --version 选项查看版本:

+
$ lean --version
lean version 0.3.0
+

下文中凡是以 $ lean 开头的文字即表示在终端里执行命令。

+

登录

安装完命令行工具之后,首先第一步需要登录 LeanCloud 账户。

+
# 美国节点用户需要使用参数 `--region=US` 进行登录。
$ lean login
+

然后按照提示输入 LeanCloud 用户名和密码完成登录。

+

以 GitHub、微博或 QQ 这种第三方登录方式来注册 LeanCloud 账户的用户,如果未曾设置过账户密码,需要先使用 忘记密码 功能重新设置一个密码,再进行登录。

+

切换账户

要切换到另一账户,重新执行 lean login 即可。

+

初始化项目

登录完成之后,可以使用 init 命令来初始化一个项目,并且关联到已有的 LeanCloud 应用上。

+
$ lean init
[?] 请选择应用节点
 1) 国内
 2) 美国
 3) TAB
 =>
+

选择项目节点,然后会列示出所选节点上当前用户的所有应用:

+
[?] 请选择 APP
 1) AwesomeApp
 2) Foobar
+

选择项目语言/框架:

+
[?] 请选择需要创建的应用模版:
 1) node-js-getting-started
 2) python-getting-started
 3) slim-getting-started
 4) java-war-getting-started
 5) django-getting-started
 6) static-getting-started
+

之后命令行工具会将此项目模版下载到本地,这样初始化就完成了:

+
  下载模版文件 5.93 KB / 5.93 KB [=======================================] 100.00% 0s
  正在创建项目...
+

进入以应用名命名的目录就可以看到新建立的项目。

+

关联已有项目

如果已经使用其他方法创建好了项目,可以直接在项目目录执行:

+
$ lean switch
+

将已有项目关联到 LeanCloud 应用上。

+

本地运行

如果想将一份代码简单地部署到服务器而不在本地运行和调试,可以暂时跳过此章节。

+

进入项目目录:

+
$ cd AwesomeApp
+

之后需要安装此项目相关的依赖,需要根据项目语言来查看不同文档:

+

启动应用:

+
$ lean up
+
  • 如果想变更启动端口号,可以使用 lean up --port 新端口号 命令来指定。
  • 命令行工具的所有命令都可以通过 -h 参数来查看详细的参数说明信息,比如 lean up -h

旧版命令行工具可以在 $ lean up 的过程中,监测项目文件的变更,实现自动重启开发服务进程。新版命令行工具移除了这一功能,转由项目代码本身来实现,以便更好地与项目使用的编程语言或框架集成。

+
  • 使用旧版命令行工具创建的 Node.js 项目,请参考 Pull Request #26 来配置。
  • 使用旧版命令行工具创建的 Python 项目,请参考 Pull Request #12 来配置。

除了使用命令行工具来启动项目之外,还可以原生地启动项目,比如直接使用 node server.js 或者 python wsgi.py。这样能够将云引擎开发流程更好地集成到开发者管用的工作流程中,也可以直接和 IDE 集成。但是直接使用命令行工具创建的云引擎项目,默认会依赖一些环境变量,因此需要提前设置好这些环境变量。

+

使用命令 lean env 可以显示出这些环境变量,手动在当前终端中设置好之后,就可以不依赖命令行工具来启动项目了。另外使用兼容 sh shell 的用户,还可以直接使用 eval $(lean env),自动设置好所有的环境变量。

+

更多关于云引擎开发的内容,请参考 云引擎服务总览

+

部署

从本地代码部署

当开发和本地测试云引擎项目通过后,你可以直接将本地源码推送到 LeanCloud 云引擎平台运行:

+
$ lean deploy
+

对于使用了免费版云引擎的应用,这个命令会将本地源码部署到线上的生产环境,无条件覆盖之前的代码(无论是从本地仓库部署、Git 部署还是在线定义);而对于使用了专业版云引擎的应用,这个命令会先部署到预备环境,后续需要使用 lean publish 来完成向生产环境的部署。

+

部署过程会实时打印进度:

+
  获取应用信息
  准备部署至目标应用:AwesomeApp (xxxxxx)
  获取应用分组信息
  准备部署应用到生产环境: web
  检测到 Python 运行时
  压缩项目文件
  上传应用文件 6.41 KB / 6.41 KB [=======================================] 100.00% 0s
  开始构建 20161021-171836
  正在下载应用代码 ...
  正在解压缩应用代码 ...
  运行环境: python (leanengine/python-base-2.7)
  从之前的构建中恢复依赖项 ...
  正在下载和安装依赖项 ...
  缓存最新的依赖项 ...
  存储镜像到仓库 ...
  镜像构建完成:20161021-171836
  开始部署 20161021-171836  web1
  正在创建新实例 ...
  正在启动新实例 ...
  实例启动成功:{"version": "1.6.5", "runtime": "cpython-2.7.6"}
  正在统一切换新旧实例 ...
  正在更新云函数信息 ...
  部署完成:1 个实例部署成功
  删除临时文件
+

默认部署备注为「从命令行工具构建」,显示在 应用控制台 > 云引擎 > 日志 中。你可以通过 -m 选项来自定义部署的备注信息:

+
$ lean deploy -m 'Be more awesome! 这是定制的部署备注'
+

部署之后可以通过 curl 命令来测试你的云引擎代码,或者访问你已设置的二级域名的测试地址 stg-${应用的域名}.leanapp.cn

+

部署时忽略部分文件

部署项目时,如果有一些临时文件或是项目源码管理软件用到的文件,不需要上传到服务器,可以将它们加入到 .leanignore 文件。

+

.leanignore 文件格式与 Git 使用的 .gitignore 格式基本相同,每行写一个忽略项,可以是文件或者文件夹。如果项目没有 .leanignore 文件,部署时会根据当前项目所使用的语言创建一个默认的 .leanignore 文件。请确认此文件中的默认配置是否与项目需求相符。

+

从 Git 仓库部署

如果代码保存在某个 Git 仓库上,例如 Github,并且在 LeanCloud 控制台已经正确设置了 git repo 地址以及 deploy key,你也可以请求 LeanCloud 平台从 Git 仓库获取源码并自动部署。这个操作可以在云引擎的部署菜单里完成,也可以在本地执行:

+
$ lean deploy -g
+
  • -g 选项要求从 Git 仓库部署,Git 仓库地址必须已经在云引擎菜单中保存。
  • 默认部署使用 master 分支的最新代码,你可以通过 -r <revision> 来指定部署特定的 commit 或者 branch。
  • 设置 git repo 地址以及 deploy key 的方法可以参考云引擎网站托管指南 · Git 部署

发布到生产环境

以下步骤仅适用于 专业版云引擎 用户。

+

如果预备环境如果测试没有问题,此时需要将预备环境的云引擎代码切换到生产环境,可以在 应用控制台 > 云引擎 > 部署 中发布,也可以直接运行 publish 命令:

+
$ lean publish
+

这样预备环境的云引擎代码就发布到了生产环境:

+
  获取应用信息
  准备部署至目标应用:AwesomeApp (xxxxxx)
  开始部署 20161021-173118  web1,web2
  正在创建新实例 ...
  正在创建新实例 ...
  正在启动新实例 ...
  实例启动成功:{"version": "1.6.5", "runtime": "cpython-3.5.1"}
  正在启动新实例 ...
  实例启动成功:{"version": "1.6.5", "runtime": "cpython-3.5.1"}
  正在统一切换新旧实例 ...
  正在更新云函数信息 ...
  部署完成:2 个实例部署成功
+

查看日志

使用 logs 命令可以查询云引擎的最新日志:

+
$ lean logs
2016-05-16 16:03:53 [PROD] [INFO]
2016-05-16 16:03:53 [PROD] [INFO] > playground@1.0.0 start /home/leanengine/app
2016-05-16 16:03:53 [PROD] [INFO] > node server.js
2016-05-16 16:03:53 [PROD] [INFO]
2016-05-16 16:03:54 [PROD] [INFO] Node app is running, port: 3000
2016-05-16 16:03:54 [PROD] [INFO] connected to redis server
2016-05-16 16:03:54 [PROD] [INFO] 实例启动成功:{"runtime":"nodejs-v4.4.3","version":"0.4.0"}
2016-05-16 16:03:54 [PROD] [INFO] 正在统一切换新旧实例 ...
2016-05-16 16:03:55 [PROD] [INFO] 正在更新云函数信息 ...
2016-05-16 16:03:55 [PROD] [INFO] 部署完成:2 个实例部署成功
+

默认返回最新的 30 条,最新的在最下面。

+

可以通过 -l 选项设定返回的日志数目,例如返回最近的 100 条:

+
$ lean logs -l 100
+

也可以加上 -f 选项来自动滚动更新日志,类似 tail -f 命令的效果:

+
$ lean logs -f
+

新的云引擎日志产生后,都会被自动填充到屏幕下方。

+

多应用管理

一个项目的代码可以同时部署到多个 LeanCloud 应用上。

+

查看当前应用状态

使用 lean info 可以查看当前项目关联的应用:

+
$ lean info
当前登录用户: asaka (lan@leancloud.rocks)
当前目录关联应用:AwesomeApp (xxxxxx)
+

此时,执行 deploypublishlogs 等命令都是针对当前被激活的应用。

+

切换应用

如果需要将当前项目切换到其他 LeanCloud 应用,可以通过 checkout 命令来添加一个应用:

+
$ lean switch
+

之后运行向导会给出可供切换的应用列表。

+

另外还可以直接执行 $ lean checkout 其他应用的id 来快速切换关联应用。

+

上传文件

使用 upload 命令既可以上传单个文件,也可以批量上传一个目录下(包括子目录)下的所有文件到 LeanCloud 云端。

+
$ lean upload public/index.html
Uploads /Users/dennis/programming/avos/new_app/public/index.html successfully at: http://ac-7104en0u.qiniudn.com/f9e13e69-10a2-1742-5e5a-8e71de75b9fc.html
+

文件上传成功后会自动生成在 LeanCloud 云端的 URL,即上例中 successfully at: 之后的信息。

+

上传 images 目录下的所有文件:

+
$ lean upload images/
+

CQL 交互查询

可以通过 $ lean cql 命令来使用 CQL 语言查询存储服务数据:

+
$ lean cql
CQL > select objectId, mime_type, createdAt, updatedAt from _File where mime_type != null limit 10;
objectId                   mime_type                                   createdAt                  updatedAt
5583bc44e4b0ef6154cb1b9e   application/zip, application/octet-stream   2015-06-19T06:52:52.106Z   2015-06-19T06:52:52.106Z
559a63bee4b0c4d3e72432f6   application/zip, application/octet-stream   2015-07-06T11:17:18.885Z   2015-07-06T11:17:18.885Z
55cc4d3b60b28da5fc3af7c5   image/jpeg                                  2015-08-13T07:54:35.119Z   2015-08-13T07:54:35.119Z
55cc4d7660b2d1408c770cde   image/jpeg                                  2015-08-13T07:55:34.496Z   2015-08-13T07:55:34.496Z
55cc4df460b2c0a2834d63e2   image/jpeg                                  2015-08-13T07:57:40.013Z   2015-08-13T07:57:40.013Z
55cc4eb660b2597462bc093e   image/jpeg                                  2015-08-13T08:00:54.983Z   2015-08-13T08:00:54.983Z
55cc4ece60b2597462bc0e06   image/jpeg                                  2015-08-13T08:01:18.323Z   2015-08-13T08:01:18.323Z
563b2fc360b216575c579204   application/zip, application/octet-stream   2015-11-05T10:30:27.721Z   2015-11-05T10:30:27.721Z
564ae21400b0ee7f5ca4e11a   application/zip, application/octet-stream   2015-11-17T08:15:16.951Z   2015-11-17T08:15:16.951Z
564da57360b2ed36207ad273   text/plain                                  2015-11-19T10:33:23.854Z   2015-11-19T10:33:23.854Z
+

如果需要查询的 Class 有大量 Object / Array 等嵌套的数据结构,但以上的表格形式不便于查看结果,可以尝试用 $ lean cql --format=json 将结果以 JSON 格式来展示:

+
$ lean cql --format=json
CQL > select objectId, mime_type from _File where mime_type != null limit 3;
[
  {
    "createdAt": "2015-06-19T06:52:52.106Z",
    "mime_type": "application/zip, application/octet-stream",
    "objectId": "5583bc44e4b0ef6154cb1b9e",
    "updatedAt": "2015-06-19T06:52:52.106Z"
  },
  {
    "createdAt": "2015-07-06T11:17:18.885Z",
    "mime_type": "application/zip, application/octet-stream",
    "objectId": "559a63bee4b0c4d3e72432f6",
    "updatedAt": "2015-07-06T11:17:18.885Z"
  },
  {
    "createdAt": "2015-08-13T07:54:35.119Z",
    "mime_type": "image/jpeg",
    "objectId": "55cc4d3b60b28da5fc3af7c5",
    "updatedAt": "2015-08-13T07:54:35.119Z"
  }
]
+

其他命令

使用 search 命令可以方便地查询文档和资料:

+
$ lean search AVObject
+

这将打开浏览器,显示 搜索结果

+

也可以查询多个关键字,空格隔开即可:

+
$ lean search 云引擎 命令行
+

自定义命令

有时我们需要对某个应用进行特定并且频繁的操作,比如查看应用 _User 表的记录总数,这样可以使用命令行工具的自定义命令来实现。

+

只要在当前系统的 PATH 环境变量中存在一个以 lean- 开头的可执行文件,比如 lean-usercount,那么执行 $ lean usercount,命令行工具就会自动调用这个可执行文件。与直接执行 $ lean-usercount 不同的是,这个命令可以获取与应用相关的环境变量,方便访问对应的数据。

+

相关的环境变量有:

+
环境变量名 描述
LEANCLOUD_APP_ID 当前应用的 app id
LEANCLOUD_APP_KEY 当前应用的 app key
LEANCLOUD_APP_MASTER_KEY 当前应用的 master key
LEANCLOUD_APP_HOOK_KEY 当前应用的 hook key
LEANCLOUD_APP_PORT 使用 $ lean up 启动应用时,默认的端口
LEANCLOUD_API_SERVER 当前应用对应 API 服务的 host
LEANCLOUD_REGION 当前应用对应区域信息,可能的值有 cnustab

例如将如下脚本放到当前系统的 PATH 环境变量中(比如 /usr/local/bin):

+
#! /bin/env python

import sys

import leancloud

app_id = os.environ['LEANCLOUD_APP_ID']
master_key = os.environ['LEANCLOUD_APP_MASTER_KEY']

leancloud.init(app_id, master_key=master_key)
print(leancloud.User.query.count())
+

同时赋予这个脚本可执行权限 $ chmod +x /usr/local/bin/lean-usercount,然后执行 $ lean usercount,就可以看到当前应用对应的 _User 表中记录总数了。

+

贡献

lean-cli 是开源项目,基于 Apache 协议,源码托管在 https://github.com/leancloud/lean-cli,欢迎大家贡献。