实践案例丨教你一键构建部署发布前端和Node.js服务
如何使用华为云服务一键构建部署发布前端和Node.js服务
构建部署,一直是一个很繁琐的过程
作为开发,最害怕遇到版本发布,特别是前、后端一起上线发布,项目又特别多的时候。
例如你有10个项目,前后端都要同时发布,那么就需要多次合并代码、构建,重复很多动作..而且还要去关心构建机器环境是不是变了?配置是否能扛住同时构建多个应用?人为的操作次数多了,就很难保证万无一失。
那这种局面怎么破? 是不是要考虑从技术角度来提效? 假如我把所有的构建、发布都迁移到云端,可以一键push代码,然后自动完成构建,我只要执行一个命令就可以完成部署,又不需要关心机器配置和环境变化,那我们的工作效率是不是可以大大提升?
我之前的构建发布流程
之前我是使用Travis CI和gitHub以及docker-compose结合进行一键代码push构建发布。
但是有一个很明显的问题,gitHub和Travis这两个平台是完全独立的,特别是我代码托管在gitHub上,有时候访问速度还很慢,更要命的是没有在一个平台上形成完整的链路闭环。
于是我找了很多个平台,最终发现,华为云可以满足我的需求,既可以代码托管,也有可配置的自动化构建流程,而且访问速度快,纯中文界面友好。
新建项目 & 迁移到华为云
像我们前端和Node.js都是有一些脚手架,例如React这种框架,就有很多脚手架可以一键生成项目模板,让你不再关心工程化配置的问题,华为云的developer模块也提供了这个功能。
选择想要的模板。像我选择的是React+express模板,10秒钟左右就生成好了,此时就可以在我的模板产物中看。
此时下载压缩包,解压运行以下命令即可开始开发
npm run install-all
npm run dev
新建项目时候,我们可以选择上面这种模式快速根据模版生成代码,但是我今天是要把我的代码从gitHub迁移到华为云上托管,然后在华为云上完成整个开发流程的闭环。
将我gitHub仓库代码导入到华为云托管
进入华为云devcloud模块,输入想要导入的gitHub仓库地址和账号密码(如果需要),然后开始导入,大约耗时30S。
此时,在本地生成git ssh,将公钥放置到华为云上。
我们此时可以点击代码仓库,进去就可以看到仓库详情了(纯中文界面,真的友好)。
在本地使用以下命令即可完成clone和启动
git clone remoteurl
cd your projectName
npm install
npm run dev
以上完成了代码迁移,目前我们代码已经托管到华为云上。为了完成整套研发环节的闭环,我们需要将构建、发布都迁移到华为云鲲鹏服务器上。
改变我的构建策略
我之前是基于gitHub和Travis CI和docker-compose完成一键push代码,然后一键完成发布,现在要在华为云上实现一套自动化构建流程。
构建策略适配难度极低,远超我的想象
我的项目是一个前端基于React,后端基于Node.js的express框架,跟华为云的devstar的模板非常像。
如何设计这个任务流?
编写任务流
基于项目,新建编译构建任务。
编写任务流任务流,所谓任务流,就是完成一个,然后接着下一个。华为云这里比较贴心,根据不同的环境进行了区分环境,不像传统的服务器,你还要去装docker、node.js等等这些(PS:任务新建后可以修改任务~)。
这里默认使用了华为的镜像源仓库,解决了因为环境配置问题导致下载慢的问题~
如何编写任务流?
以我的一个资料网站项目为例子,基于docker-compose发布,前后端都打包在一个镜像中。
首先代码push后,构建任务不一定需要马上执行,而且我的推送次数可能很频繁,此时我可以调成定时任务,还能限制次数(真的很贴心)。
编写dockerfile
此时先编写dockerfile文件,用于docker,基于Node.js 12.16.3版本的镜像,指定端口
#引用镜像
FROM node:12.16.3
#执行命令,创建文件夹
RUN mkdir -p /usr/www
WORKDIR /usr/www
COPY . /usr/www
RUN npm run build
#配置环境变量ENV HOST 0.0.0.0ENV PORT 8080
#定义程序默认端口
EXPOSE 8080
#运行程序命令
CMD ["node","./server/index.js"]
此时可以想象,我们推送代码后(可以选择什么分支),根据配置定时自动构建,然后可以通过接口或者手动借助docker-compose命令进行一键更新发布。
简单三个命令,完成docker-image的制作和push(具体参数可以参考提示)。
首先登陆docker,然后build打包镜像,最后push即可完成构建这一步,我们本地完全是无感知的~也不需要考虑配置和环境的问题。
此时我们手动触发构建任务(像我们公司项目特别大,一台4核8G的机器可能就扛不住几个项目同时构建,在这里就不用担心)。
等待一段时间后,发现命令执行完成,docker镜像已经发布完成。
发布
两种手段
- 通过ssh连接华为云服务器,执行编写好的docker-compose文件
- 通过接口带token方式(有权限的人才可以发布)调用,执行docker-compose命令,达到发布目的
我们重点关注第一种,通过ssh连接到华为云鲲鹏服务器。
输入用户和ip地址后,ssh连接成功,编写docker-compose文件。
version: "3.7"
services:redis:image: redis:3container_name: redishostname: rediscommand: redis-server /usr/local/etc/redis/redis.conf --requirepass huaweiapp666volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.confports:- "6379:6379"huaweiapp:image: jinjietan/huaweiapp:latestports:- "8080:8080"restart: on-failure
执行命令,拉取镜像
docker-compose pull
拉取完成后,运行docker-compose
docker-compose up -d
启动成功,输入域名,即可访问到我的网站了。完成这个迁移和整套开发构建流程的闭,仅仅用了1个小时不到。
感受
华为云从开发者角度出来,项目模板一键生成,定时构建任务,任务流的定制化处理这些,非常人性化,大大降低了开发运维门槛,形成整套研发构建流程的闭环。
我司也正在准备购买迁移华为云产品,所有托管、构建发布都放在云端完成闭环。
相信你通过这篇文章,也可以快速的将你的代码托管、构建发布快速迁移到华为云鲲鹏服务器上。
点击这里→了解更多精彩内容
实践案例丨教你一键构建部署发布前端和Node.js服务相关推荐
- 使用华为云服务一键构建部署发布前端和Node.js服务
如何使用华为云服务一键构建部署发布前端和Node.js服务 构建部署,一直是一个很繁琐的过程 作为开发,最害怕遇到版本发布,特别是前.后端一起上线发布,项目又特别多的时候 例如你有10个项目,前后端都 ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计 1
前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...
- 拒做工具人!教你一键快速部署应用到容器镜像仓库
作者 | Cloud Toolkit 近年来,容器技术以迅雷不及掩耳之势迅速蔓延开来,容器技术基于各种场景的尝试与实践更是层出不穷,它的崛起改变了我们创建.发布与运行应用的方式,实现了资源的独立与隔离 ...
- 实践案例丨云连接CC实现跨区域多VPC与线下IDC Server互联
摘要:用实践案例带你掌握云连接CC如何实现跨区域多VPC与线下IDC Server互联. [背景] 当前在华为云华南.华东.香港region均部署了业务,同时在华南region通过云专线与线下IDC打 ...
- JAVA包可以构建一个子系统_Windows 10 用于 Linux 子系统的一键构建、打包脚本「 Node、Gradle 项目」...
最近正在开发一个 Java & Vue.js 全栈项目,该项目由以下几部分组成:Java 后端服务器.基于 Vue.js 的单页应用.基于 JavaFX 的 GUI 客户端以及其他辅助工具等. ...
- 从零开始部署Node.js服务至阿里云ECS服务器并通过express框架实现外网IP访问html项目
大致步骤(2017.07.25): 1.购买阿里云服务器 2.在云服务器上搭建node环境 3.上传Node.js代码,并测试通过 一.购买阿里云服务器 1.登陆阿里云 2.选择控制台 3.选择云服务 ...
- 实践案例丨基于Raft协议的分布式数据库系统应用
摘要:简单介绍Raft协议的原理.以及存储节点(Pinetree)如何应用 Raft实现复制的一些工程实践经验. 1.引言 在华为分布式数据库的工程实践过程中,我们实现了一个计算存储分离. 底层存储基 ...
- 13个Tensorflow实践案例,教你入门到进阶
向AI转型的程序员都关注了这个号??? 大数据挖掘DT数据分析 公众号: datadw 关于深度学习,每个人都有自己的看法.有人说就是炼丹,得个准确率召回率什么的,拿到实际中,问问为什么,都答不上来 ...
最新文章
- php利用mysql扩展库向数据库插入数据的步骤与案例
- java OpenCV 图片清晰度、色偏和亮度检测
- MySQL:给表的某个字段添加唯一性约束
- 使用Aptana搭建Python开发环境
- 基于RxJava2+Retrofit2简单易用的网络请求实现
- 微信小程序数据拼接_微信小程序使用原生WebSokcet实现断线重连及数据拼接
- linux下tools.jar,Linux android studio :'tools.jar' seems to be not in Android Studio classpath.
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
- Spark on Yarn遇到的几个问题
- vue 下载文件(后台返回为二进制流)
- 安卓gridview控件的使用
- oracle中间人投毒漏洞,‘TNS Listener’远程数据投毒漏洞
- Kali Linux查看信息
- Chrome+selenium+headless报错无法加载插件
- 2015十大CMS系统介绍
- import java.util.* cannot be resolved或import java.io.*cannot be resolved解决方案
- 襄阳联通推“终端+物联网卡+M2M”OA方案
- 面试:自我问题反思总结
- 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开
- Jira4系列、Jira6系列破解实战
热门文章
- mysql表设计很多非常大的varchar_聊一聊数据库(MySQL)设计中的数据类型优化
- python图像分类代码_Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛
- pcie16x能插1x的卡嘛?_5G手机插4G卡,在没有5G信号的地方,跟4G手机的网速一样吗?...
- java 一个大事务下的新增、修改、查询_一文带你轻松搞懂事务隔离级别(图文详解)...
- 软件测试2019:第五次作业
- 自定义的plot函数参数date坐标模型[x,y]的使用建议
- Gobblin编译支持CDH5.4.0
- 关于java和C语言i=i++问题描述
- IT创业公司如何选型,以避免未来出现的版权之争?
- Oracle 游标使用全解(转)