首页 > 编程语言 >从0快速部署云托管服务:node.js

从0快速部署云托管服务:node.js

时间:2022-10-29 10:23:32浏览次数:75  
标签:node 服务 托管 js 点击 微信云 版本 流水线

欢迎使用微信云托管,本文将带领你通过微信云托管创建一个服务,并在小程序和 WEB 端调用此服务(以 Node.JS 为例),本系列会继续更新 Java、PHP、Golang 等其他语言的部署教程(当然,你也可以使用云托管的一键部署功能,基于 Node.js 语言 Express 框架部署一个服务)。

你可以用趁手的代码编辑器来完成下述代码编辑操作,推荐「Visual Studio Code」

第一步:准备项目

1. 创建一个项目目录,名称任意,本示例中为 hello

你可以用 CLI 命令,或者可视化方式新建。

mkdir hello
cd hello

2. 在项目目录中,新建 Dockerfile 文件,并在文件中填入如下信息

FROM node:12-slim
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . ./
CMD [ "node", "index.js" ]

3. 创建 index.js 文件,并在文件中填入如下代码

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  res.send('欢迎使用微信云托管!')
})

const port = process.env.PORT || 80
app.listen(port, () => {
console.log('服务启动成功,端口:', port)
})

4. 新建 package.json 文件,并在文件中填入如下代码

{
"name": "werun-nodejs",
"version": "1.0.0",
"description": "Simple example in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
  },
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.16.4"
  }
}

你也可以自己 npm init , 然后安装 npm i express, 得到 package.json

第二步:服务的部署和发布

1. 访问微信云托管控制台

访问微信云托管控制台,用微信扫描网页上的登录二维码,进入控制台。

进入控制台之前,会提示要求你选择「小程序/公众号」,如果你选择的「小程序/公众号」没有微信云托管环境,则会提示新建。

如何选择「小程序/公众号」? 微信云托管环境是建立在腾讯云账号上的,基于选择的「小程序/公众号」,复用其主体信息,建立腾讯云账号。如果你选择的「小程序/公众号」是企业主体,则腾讯云账号就是对应的企业主体,个人主体同理。 如果你之前在某个「小程序/公众号」中开通过云开发,则会与其共用一个腾讯云账号。所以在这种情况下,可以实现微信云托管的资源和云开发的资源在内网联通(前提是要配置相同的vpc)

新建环境时,需要填写环境名称,微信云托管会在你的名称后面追加一串字符组成环境ID。

2. 创建服务

如果你已经有微信云托管环境,则可以直接进入控制台主平台。

点击服务列表中,右上角【新建服务】按钮,在微信云托管环境中创建一个服务。

弹出框中填写「服务名称」,在这里名称填写demo,并开启「允许公网访问」。

如何判断是否「允许公网访问」? 微信云托管的服务在运行过程中,可以接收公网和内网的访问。如果你是单一服务类型,则建议开启公网访问。 微服务类型时,如果你的业务是面向用户的,比如登录注册服务,则开启公网访问。 如果你的微服务模块用于支撑其他服务模块,比如令牌维护服务,则不要开启。 在不开启公网访问时,服务只能被同一环境下的其他服务调用,或同一VPC网络下的其他资源调用。公网其他资源将无法访问 不开启公网访问只是限制外向内访问,不会限制服务内向外发送网络请求

新建服务后,点击服务列表中新建的 demo 服务,进入服务详情。

进入服务详情后,点击部署发布下的「新建版本」按钮,与其同展示的还有一个「新建流水线」,这里我们在后面实践。

3. 新建版本

点击「新建版本」后调转到版本列表页,继续点击版本列表页中的「新建版本」按钮,弹出新建框。

在弹出框中,选择「上传方式」为文件夹,然后在选择附件中选择上传第一步创建的文件夹(注意一定选到文件夹)。

上传完毕后,效果如上图所示,点击「新建」按钮,完成版本创建。

新建过程最多2分钟,你可以点击版本列表中「日志」按钮,看到实时的构建日志,整体分为「构建」和「部署」两个步骤。

4. 部署发布

当版本列表中,版本的状态为 正常 后,点击服务列表下「部署发布」TAB栏,开始发布部署的版本。

在页面中,选择刚刚部署好的版本【demo-001】,然后点击右下角的「全量发布」按钮,确认发布。

至此我们完成了一个简单的服务部署和发布过程,你可以在「版本列表」中点击「访问公网域名」按钮,看到如下效果。

接下来,我们根据当前的状态,继续深入实践,去探索微信云托管的其他能力使用

第三步:流水线和灰度发布

1. 在项目目录中,新建 container.config.json 文件,并在文件中填入如下信息

{// 监听端口"containerPort": 80,// Dockerfile 路径"dockerfilePath": "Dockerfile",// 构建目录"buildDir": "",// 最小实例数"minNum": 0,// 最大实例数"maxNum": 50,// cpu 核数"cpu": 0.25,// 内存大小,单位:G"mem": 0.5,// 扩缩容指标类型"policyType": "cpu",// 扩缩容指标阈值"policyThreshold": 60,// 环境变量"envParams": {},// 日志采集路径"customLogs": "stdout",// 启动检测延迟"initialDelaySeconds": 2}

2. 将项目目录上传至自己的 git 网站,并建立 git 仓库

你可以选择 githubgitlabgitee 中的任意一个建立仓库,上传代码后得到仓库地址,保证根目录中有上述的3个文件

如果你暂时没有git网站账户或者git相关知识,可以先略过这一部分,直接看第四步。

3. 创建流水线

进入「微信云托管控制台」,按照之前的步骤进入 demo 服务详情,点击流水线TAB

在流水线页面点击「新建流水线」按钮,在弹出框中,填写流水线名称为 dev(也可以自己拟定名称)

选择自己仓库所在的代码源,如果第一次使用需要先进行授权,授权完毕后就可以在下面的「代码仓库」中加载账号下的仓库了。

选择刚才自己上传的仓库,分支根据自身仓库情况决定,一般是 main

以上完成后点击「确认」按钮,此时可以在流水线页面中看到流水线,点击「绿色三角icon」按钮,主动启动流水线。

你也可以直接尝试更改仓库代码,也可以由仓库变更触发流水线。

触发策略有「代码合并更新触发」和「定时触发」,你可以在之后真实业务时按自身情况选择相关策略。 同一个仓库可以用来触发多个服务的流水线,也可以用来配置单个服务多条流水线

流水线的任何动作都会展示在下面的日志中,你可以点击「日志」按钮来看具体的执行情况。

在流水线一次执行完毕后,就可以前往版本列表看到由流水线生成的版本【demo-002】。

流水线的发布策略默认是【构建镜像+版本】,所以上述流水线触发时会有新版本,你可以选择流水线的其他动作 选择【仅构建镜像】时,将不会生成版本,但会构建镜像并存放在镜像仓库中,后续你可以手动新建版本,选择【镜像仓库】作为源 选择【全量发布】时,除了构建镜像+版本之外,还会直接将此版本发布部署到线上 从上述描述中可以看出,微信云托管的容器服务,路径是「项目代码」-「项目镜像」-「项目版本」-「发布」,版本是切实拥有运行的资源,可以直接发布到线上接入流量,而版本的新建需要镜像(即使是代码,也要先完成构建镜像后才能建立版本)

当版本列表中,流水线【demo-002】版本的状态为 正常 后,点击服务列表下「部署发布」TAB栏,开始实践灰度发布部署。

4. 灰度发布

在部署发布页面中,点击「发布」按钮,建立发布单。

在发布单页面,选择版本【demo-002】,然后点击右下角的「进入测试」按钮,进入测试流程。

在测试页面中,你可以通过两种方式来配置测试策略,一种是「openid白名单」,一种是「URL参数」。

  • openid白名单:可以在「小程序/公众号」获取用户openid,填写在测试列表中的用户,会使用新的版本提供服务,其他用旧的
  • url参数:适合WEB网站,可以配置一个或多个get参数,符合条件的路径会使用新的版本提供服务,其他用旧的

填写后点击右下角「测试配置更新」使整个测试生效,以上两种方式可以同时配置

当你在真实项目中测试没有问题时,就可以开始灰度发布环节了,点击「灰度上线」按钮。

进入灰度过程后,你可以随意调整比例,来控制新版本在全网流量的占比,并随时在下面的监控中查看日志和运行情况,来判断版本的稳定性。如果有问题,可以点击「回退」按钮结束发布单,流量全部切换为之前的版本。

在整个灰度环节,你可以指定哪些用户一定打到最新版本。

当灰度流量比例设置100%后,就可以点击「结单」按钮,完成发布,此时所有流量都在新的版本中,一轮发布结束。

第四步:调用微信云托管服务

1. 微信小程序

首先,确认当前调试基础库版本为 2.13.1 以上,可以在开发者工具-详情-本地设置中查看当前的基础库版本。

在小程序中使用如下的代码:

// 确认已经在 onLaunch 中调用过 wx.cloud.init 初始化环境(任意环境均可,可以填空)
const res = await wx.cloud.callContainer({
config: {
env: '填入云环境ID', // 微信云托管的环境ID
  },
path: '/xxx', // 填入业务自定义路径和参数,根目录,就是 / 
  method: 'POST', // 按照自己的业务开发,选择对应的方法
  header: {
'X-WX-SERVICE': 'xxx', // xxx中填入服务名称(微信云托管 - 服务管理 - 服务列表 - 服务名称),在上述实践中是 demo
  }
// 其余参数同 wx.request
});

console.log(res);

wx.cloud.callContainer 其他参数,直接参考 wx.request API

以上 PHP 例子访问的代码如下(在小程序项目 app.js 中覆盖写入如下代码)

App({
onLaunch: async function () {
      wx.cloud.init({
// env: "其他云开发环境,也可以不填"    // 此处init的环境ID和微信云托管没有作用关系,没用就留空
      });
const res = await wx.cloud.callContainer({
config: {
env: "微信云托管ID", // 微信云托管环境ID,不能为空,替换自己的
        },
path: '/', 
method: 'GET',
header: {
'X-WX-SERVICE': 'demo',
        }
      });
console.log(res); // 在控制台里查看打印
    }
});

2、因篇幅限制,Web网页、公众号H5、服务端和其他客户端应用的调用,请参见文档:

https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/quickstart/custom/node.html

写到最后

到此,我们完成了微信云托管核心【容器服务】的入门,你可以继续探索控制台的其他能力,在这里做一个引述:

1、业务过程中需要存储数据到数据库、对象存储中;

2、绑定云托管的小程序/公众号在调用服务时,会带入微信生态信息;另外云托管服务可以免鉴权调用微信接口。

参考文档

上手指引

https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/quickstart/custom

微信云托管官方仓库

https://github.com/WeixinCloud

官方推荐「Visual Studio Code」

https://code.visualstudio.com/

公众号页面开发指引

https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/development/call/h5.html

数据库使用指引

https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/guide/mysql/

对象存储使用指引

https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/guide/storage/

微信开放能力

https://developers.weixin.qq.com/miniprogram/dev/wxcloudrun/src/guide/weixin/

标签:node,服务,托管,js,点击,微信云,版本,流水线
From: https://www.cnblogs.com/renhaoran/p/16838152.html

相关文章

  • JS中搜索数组的四种方法
    前端经常要通过javaScript来处理数组中的数据,其中就包括检查数组中是否包含满足特定搜索条件的单个或者多个值,这就需要我们关于用于确认的布尔值、数组中值得位置索引或包含......
  • js promise概念
    Promise构造函数接受一个函数作为参数。该函数的两个参数分别是resolve和reject,它们是两个函数,由JavaScript引擎提供,不用自己部署。//代码resolve函数的作用:将Promi......
  • Node.js
    Node.js是一个基于ChromeV8引擎的JavaScript运行环境。一、初识Node.js环境的安装安装途径:官网:https://nodejs.org/en/LTS版本是长期稳定版,建议安装源码下......
  • 单链表巧用dummy_head删除, 找目标位置的前一个node, Reverse考虑0/1的Corner Case,
    今天连续做了三道题,感觉越来越有感觉,第三题直接行云流水,10minAC目录203.移除链表元素单链表巧用dummy_head删除一开始犯的一个逻辑错误:val的节点可能连续出现......
  • 【JS】类继承
    类继承:    -可以实现一个类扩展另一个类    -使用extends关键字进行类继承      classChildextendsParent        ......
  • 搭建一个node+vue的项目
    一.使用express搭建一个服务//1.导入expressconstexpress=require('express')//2.调用express函数,它的返回值就是服务器的实例constapp=express()//TODO_01配置......
  • 今天,念念不忘一件事... ✅FastJson在调用JSON#toJSONString时,如何截取比较长的value串
    项目里前后端页面的http请求及dubbo服务间的RPC调用,返回值类型统一是一个Result<T>,其结构如下。@DatapublicclassResult<T>implementsSerializable{priv......
  • JavaScript--JSONP和Axios
    JSONP概述:JSONP(JSONwithpadding)是一种跨域解决方案,它主要是利用了script标签不受跨域影响的特性来完成对应的请求操作。实际上是一个get请求。JSONP格式包含两个部分:......
  • JS中数值类型的本质
    一、JS中的数值类型众所JS爱好友周知,JS中只有一个总的数值类型——number,它包含了整型、浮点型等数值类型。其中,浮点数的实现思想有点复杂,它把一个数拆成两部分来存储。第......
  • PYTHON JSON EXCEL
    #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#pipinstallpandas#pipinstallopenpyxl#importjsonimporttimeimportpandasimpor......