manifest.yml渲染
lzcos-v1.3.8+ 支持 manifest.yml 文件的动态渲染,以便开发者可以更好的控制部署参数。
manifest.yml 的渲染流程为
- 开发者在项目根目录下创建一个 lzc-deploy-params.yml 文件,并使用
lzc-cli project build
打包到 lpk 中(需要 lzc-cli 版本 v1.3.7+) - 在运行前会跳转到一个参数补充的UI界面,要求用户补充开发者在
lzc-deploy-params.yml
中定义的所有参数 - 系统获取到用户提供的参数,并将其作为模板参数
U
与 lpk 中的 lzc-manifest.yml 一起渲染为最终结果 - 将最终的manifest存放在
/lzcapp/run/manifest.yml
(相对于原始文件/lzcapp/pkg/manifest.yml
)并以此作为最终文件
- 用户可以在应用列表中主动重新进入修改部署参数的页面,点击后进入步骤 2。每次修改部署参数后应用实例会被停止并重新走上述流程
- 多实例应用下,每个用户的部署参数都是独立的,由每个用户自行填写。
- 即使应用没有配置
lzc-deploy-params.yml
依旧会进行 manifest 渲染流程
渲染机制
使用 golang 的 text/template
对 lpk 中的 manifest.yml 进行渲染,您需要先熟悉一下Go官方的模板语法外 以下为一些内置的模板函数和模板参数。
内置模板函数
- spring 支持的函数。( env 相关除外)
stable_secrt "seed"
模板函数,用来产生稳定的密码。此函数需要传递一个任意字符串。- 同样的 seed,不同应用的结果保证不相同
- 同样的 seed,同样的应用不同的微服结果保证不相同
- 同样的 seed,相同的应用相同的微服(未重新恢复出厂设置)保证多次调用结果相同
模板参数
主要为两个大参数(括号内为其简写方式)
.UserParams(.U)
lzc-deploy-params.yml 中要求的参数.SysParams(.S)
系统相关参数.BoxName
微服的名称.BoxDomain
微服的域名.OSVersion
微服系统版本号,注意如果是测试版则会强制修改为v99.99.99-xxx
.AppDomain
应用的域名,注意此域名目前是根据开发者写死,将来会动态分配并支持管理员动态调整。.IsMultiInstance
是否为多实例部署方式,目前是开发者写死,将来版本会调整为管理员可以动态调整最终值。.DeployUID
实际部署时的用户ID,单实例部署方案下无此字段。.DeployID
实例本身的唯一ID
小技巧
调试阶段,您可以在 lzc-manifest.yml 任意位置添加来渲染出所有的可用参数
xx-debug: {{ . }}
xx-debug: {{ . }}
您可以在 application.route
里增加一条规则来查看最终的 manifest.yml
application:
route:
- /m=file:///lzcapp/run/manifest.yml
application:
route:
- /m=file:///lzcapp/run/manifest.yml
或直接使用 devshell 后 cat /lzcapp/run/manifest.yml
示例
完整 demo 示例可以参考这里
更安全的内部密码
yml
package: cloud.lazycat.app.redmine
name: Redmine
services:
mysql:
binds:
- /lzcapp/var/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD={{ stable_secret "root_password" }}
- MYSQL_USER=LAZYCAT
- MYSQL_PASSWORD={{ stable_secret "admin_password" | substr 0 6 }}
image: registry.lazycat.cloud/mysql
redmine:
environment:
- DB_PASSWORD={{ stable_secret "root_password" }}
package: cloud.lazycat.app.redmine
name: Redmine
services:
mysql:
binds:
- /lzcapp/var/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD={{ stable_secret "root_password" }}
- MYSQL_USER=LAZYCAT
- MYSQL_PASSWORD={{ stable_secret "admin_password" | substr 0 6 }}
image: registry.lazycat.cloud/mysql
redmine:
environment:
- DB_PASSWORD={{ stable_secret "root_password" }}
多实例/单实例不同配置
如果是单实例应用,则将数据放到每个用户的文稿目录下
如果是多实例应用,则将用户数据放到应用内部
yml
#lzc-manifest.yml
services:
some_service_name:
binds:
{{ if .S.IsMultiInstance }}
- /lzcapp/run/mnt/home:/home/
{{ else }}
- /lzcapp/run/mnt/home/{{ .S.DeployUID }}/the_name:/home/
{{ end }}
#lzc-manifest.yml
services:
some_service_name:
binds:
{{ if .S.IsMultiInstance }}
- /lzcapp/run/mnt/home:/home/
{{ else }}
- /lzcapp/run/mnt/home/{{ .S.DeployUID }}/the_name:/home/
{{ end }}
启动参数由用户配置
yml
#lzc-deploy-params.yml
params:
- id: target
type: string
name: "target"
description: "the target IP you want forward"
- id: listen.port
type: string
name: "listen port"
description: "the forwarder listen port, can't be 80, 81"
default_value: "33"
optional: true
#lzc-deploy-params.yml
params:
- id: target
type: string
name: "target"
description: "the target IP you want forward"
- id: listen.port
type: string
name: "listen port"
description: "the forwarder listen port, can't be 80, 81"
default_value: "33"
optional: true
yml
#lzc-manifest.yml
package: org.snyh.netmap
version: 0.0.1
name: netmap
application:
subdomain: netmap
upstreams:
- location: /
backend_launch_command: /lzcapp/pkg/content/netmap -target={{ .U.target }} -port={{ index .U "listen.port" }}
#lzc-manifest.yml
package: org.snyh.netmap
version: 0.0.1
name: netmap
application:
subdomain: netmap
upstreams:
- location: /
backend_launch_command: /lzcapp/pkg/content/netmap -target={{ .U.target }} -port={{ index .U "listen.port" }}