0.0.10 • Published 1 year ago

rootcloud-cli v0.0.10

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

云柢Node命令行工具

目标

为前端开发提供一个可以方便的其部署自己程序到云柢上的工具,其功能包含:

  • 生成docker镜像并发布到harbor
  • 生成云柢部署配置文件
  • 生成云柢部署文件
  • 部署项目到云柢

使用说明

0. 前置要求

  • 机器上安装了docker,可以运行docker命令

    $ docker -v
    Docker version 20.10.8, build 3967b7d
  • 安装rootcloud-cli

    $ npm install rootcloud-cli -g
    $ 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-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对应云柢项目的首页地址

image-20210827170727273

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上的项目名,如下图

image-20210827173554496

1.4 部署到云柢

部署之前我们需要做以下几个检查

  • 如果有后端服务,后端服务在云柢上的服务名端口是什么
  • 当前服务对外访问开放的域名端口是什么
  • 前端访问后端服务时各服务对应的前缀path是什么

image-20210827175508727

以上图为例:

  • 后端服务名为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.10

1 year ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.3

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago