0.0.1 • Published 3 years ago
rootcloud-nodejs-cli v0.0.1
云柢Nodejs项目辅助工具
目标
为前端开发提供一个可以方便的其部署自己程序到云柢上的工具,其功能包含:
- 生成docker镜像并发布到harbor
- 生成云柢部署配置文件
- 生成云柢部署文件
- 部署项目到云柢
使用说明
0. 前置要求
机器上安装了docker,可以运行docker命令
$ docker -v Docker version 20.10.8, build 3967b7d
安装rootcloud-nodejs-cli
$ npm install rootcloud-nodejs-cli -g --registry=http://it-npm.pkg.devops.sinochem.com/rootcloud/npm/ $ rootcloud -v Usage: index [options] [command] 云柢祝你工作愉快! Options: -V, --version output the version number -h, --help display help for command Commands: init|i 初始化云柢部署基本配置 imageBuild|b [options] 构建docker镜像 genDeploy|g 生成部署描述文件 deploy|d [options] 发布应用到云柢 help [command] display help for command
docker登录到harbor
$ docker login https://harbor-dev.sinochem.com/ Authenticating with existing credentials... Login Succeeded
1. 使用流程
1.1 初始化云柢配置
在项目根目录下运行以下命令
$ rootcloud init
🕑 开始生成云柢部署配置文件,请稍后...
生成成功!
1. 请调整根目录下的rootcloud-config.yaml里的配置
2. 可运行rootcloud deploy命令可发布到云柢
!!!建议将rootcloud deploy命令配置到package.json的script下以便使用npm run来执行!!!
玩起来吧 !!!
运行完成后可以在根目录下看到生成的文件rootcloud-config.yaml
,打开文件
rootCloud:
api:
# 以下两个参数比较敏感,将使用 -ak <accessKey>和-sk <secretKey>两个选项在命令行传入,或是设置环境变量RC_ACCESS_KEY和RC_SECRET_KEY
accessKey:
secretKey:
project:
# 必填
url:
# 必填
namespace:
# 必填
name: rootcloud-node-tool-example
version: 0.1.0
image: harbor-dev.sinochem.com/com.sinochem/rootcloud-node-tool-example:0.1.0
replicas: 2
ports:
- name: http
port: 80
domain: rootcloud-node-tool-example.rootcloud.sinochem.com
labels:
- key: deployer
value: com.sinochem.rootcloud.rootcloud-nodejs-cli.1.0.0
backend:
enable: false
# 反向代理配置
services:
# 服务名、端口、代理匹配前缀
- name:
port:
proxyPath:
enable:
service: true
ingress: true
deployFile:
path: .
name: deployments.yaml
overwrite: true
以下三项为必填
rootCloud.project.url
rootCloud.project.namespace
部署的命名空间,请保证不要和云柢里已有的命名空间冲突rootCloud.project.name
默认会使用项目下package.json
文件中的name
配置项
rootCloud.project.url
对应云柢项目的首页地址
1.2 生成项目部署文件(可选)
$ rootcloud genDeploy
🕑 开始生成云柢部署文件,请稍后...
生成成功,文件名为deployments.yaml
deployments.yaml
文件是一个k8s的标准部署文件,如果你对k8s非常熟悉可以自己进行修改(能不改就不要改)
1.3 打包docker镜像(可选)
$ rootcloud imageBuild
🔔 Dockerfile文件不存在,使用默认模板
🕑 docker镜像构建中,请稍后...
[+] Building 18.5s (8/8) FINISHED
=> [internal] load .dockerignore 0.2s
=> => transferring context: 2B 0.1s
=> [internal] load build definition from Dockerfile 0.3s
=> => transferring dockerfile: 294B 0.1s
=> [internal] load metadata for docker.io/library/nginx:1.21.1-alpine 16.4s
=> [1/3] FROM docker.io/library/nginx:1.21.1-alpine@sha256:8adf52321abdb31a00ce98888d4ac5e32fdeeabed0862ef2ff738618a38bdffc 0.0s
=> [internal] load build context 0.3s
=> => transferring context: 4.46MB 0.3s
=> CACHED [2/3] RUN echo Asis/Shanghai > /etc/timezone && sed -i 's@http://dl-cdn.alpinelinux.org/@https://mirrors.aliyun.com/@g' /etc 0.0s
=> [3/3] COPY dist /usr/share/nginx/html 0.5s
=> exporting to image 0.5s
=> => exporting layers 0.5s
=> => writing image sha256:cf7a2eca737283e514c1c58863b2733aab4f060b11924acf3b1339a504eb0ee3 0.0s
=> => naming to harbor-dev.sinochem.com/com.sinochem/rootcloud-node-tool-example:0.1.0 0.0s
🍺 docker镜像构建完成,正在推送到harbor,请稍后...
The push refers to repository [harbor-dev.sinochem.com/com.sinochem/rootcloud-node-tool-example]
623f67f3d485: Pushed
e66366125e24: Mounted from com.sinochem/remove-console-webpack-plugin
cb460864147e: Mounted from com.sinochem/remove-console-webpack-plugin
c126a1b4f317: Mounted from com.sinochem/remove-console-webpack-plugin
a33cbf3e5439: Mounted from com.sinochem/remove-console-webpack-plugin
b9239390c1b8: Mounted from com.sinochem/remove-console-webpack-plugin
82c3b921d80c: Mounted from com.sinochem/remove-console-webpack-plugin
bc276c40b172: Mounted from com.sinochem/remove-console-webpack-plugin
0.1.0: digest: sha256:bd8bb5d07cf7b0e8e12ffa4c752dca7796a644a622b725ce610b82a9b5bb21e3 size: 1990
The push refers to repository [harbor-dev.sinochem.com/com.sinochem/rootcloud-node-tool-example]
623f67f3d485: Layer already exists
e66366125e24: Layer already exists
cb460864147e: Layer already exists
c126a1b4f317: Layer already exists
a33cbf3e5439: Layer already exists
b9239390c1b8: Layer already exists
82c3b921d80c: Layer already exists
bc276c40b172: Layer already exists
latest: digest: sha256:bd8bb5d07cf7b0e8e12ffa4c752dca7796a644a622b725ce610b82a9b5bb21e3 size: 1990
🍺 docker镜像推送完成,你可以使用下面的命令去部署到云柢:
💡 rootcloud deploy
如果项目根目录下没有Dockerfile
文件,这里将使用默认的配置生成一个Dockerfile
到根目录下,下次打包时就不会再次生成这个文件了(这个文件建议不要修改,如果修改了打包镜像里会使用修改后有Dockerfile进行打包)
镜像将会被打成两个tag
分别是:
harbor-dev.sinochem.com/${group}/${name}:${version}
harbor-dev.sinochem.com/${group}/${name}:latest
这里的${group}
是package.json
中的配置项group
,${name}
是package.json
中的配置项name
,${version}
是package.json
中的配置项version
。如果没有配置package.json
中没有配置group
,那么将使用默认的com.sinochem
。注意: 这里的group对应的是harbor上的项目名,如下图
1.4 部署到云柢
部署之前我们需要做以下几个检查
- 如果有后端服务,后端服务在云柢上的服务名和端口是什么
- 当前服务对外访问开放的域名和端口是什么
- 前端访问后端服务时各服务对应的前缀path是什么
以上图为例:
- 后端服务名为backend,端口8080
- 前端域名为example.com,端口80
- 前端访问后端的前缀path是/api
因此需要在上面生成的rootcloud-config.yaml
文件中调整几处配置如下图所示
至此已完成所有配置,运行以下命令发布到云柢
$ rootcloud deploy
✔🍺🍺🍺✔
deployment.apps/deployment-rootcloud-node-tool-example created
service/service-rootcloud-node-tool-example created
ingress.extensions/ingress-rootcloud-node-tool-example-web created
ingress.extensions/ingress-rootcloud-node-tool-example-backend created
1.5 验证
配置域名的A记录到集群中的任意一个node的IP,或者你只想自己使用,请配置hosts中的域名映射,配置完成后打开浏览器检查是否成功
配置说明
1. rootcloud-config.yaml
配置项 | 说明 | 是否必填 | 可选值 |
---|---|---|---|
rootCloud.api.accessKey | 云柢中rancher的api accessKey,可在命令行中使用-ak <accessKey> 传入,也可以通过设置环境变量RC_ACCESS_KEY 来配置 | 是 | |
rootCloud.api.secretKey | 云柢中rancher的api secretKey,可在命令行中使用-sk <secretKey> 传入,也可以通过设置环境变量RC_SECRET_KEY 来配置 | 是 | |
rootCloud.project.url | 云柢项目首页地址 | 是 | |
rootCloud.project.namesapce | 项目发布的命名空间 | 是 | |
rootCloud.project.name | 项目名 | 是 | |
rootCloud.project.version | 项目版本 | 否 | 建议填写 |
rootCloud.project.image | 项目docker镜像 | 是 | 建议使用自动生成的 |
rootCloud.project.replicas | 部署副本数 | 否 | 默认为1 |
rootCloud.project.ports | 服务端口 | 是 | 与镜像中暴露的服务端口一致 |
rootCloud.project.domain | 绑定到的域名 | 是 | |
rootCloud.project.labels | 自定义标签 | 否 | |
rootCloud.project.backend.enable | 是否开启反向代理 | 是 | true、false |
rootCloud.project.backend.services.name[] | 代理到服务的名字 | 如果rootCloud.project.backend.enable=true, 则该项必填 | 请保证该服务存在 |
rootCloud.project.backend.services.port[] | 代理到服务的服务端口 | 如果rootCloud.project.backend.enable=true, 则该项必填 | 请保证该服务开启的端口与此配置一致 |
rootCloud.project.backend.services.proxyPath[] | 代理匹配的路径前缀 | 如果rootCloud.project.backend.enable=true, 则该项必填 | |
rootCloud.project.backend.enable.service | 是否开启服务 | 是 | true、false |
rootCloud.project.backend.enable.ingress | 是否开启负载均衡 | 是 | true、false |
rootCloud.deployFile.path | 生成的部署文件目录 | 否 | 默认为当前配置文件所在目录 |
rootCloud.deployFile.name | 生成的配置文件名称 | 否 | 默认为deployments.yaml |
rootCloud.deployFile.overwrite | 是否覆盖配置文件 | 否 | true、false,默认为true |
0.0.1
3 years ago