type
status
date
summary
tags
category
icon
背景
开发一个Nodejs的项目,项目使用的是 Koa + Typescript
代码托管在腾讯的Coding平台
购买了一个腾讯云服务器,需要将代码部署至这上面
思路
Coding平台构建 → 输出一个代码 zip 包 → 部署至服务器 → 服务器使用PM2启动项目
过程
配置堡垒机 + 云主机
我们把购买的云主机当成 堡垒机和目标的云主机,两个是可以一体的。简单理解堡垒机其实就是需要启动的一个服务用于部署服务,一般情况分开比较好,可以提升服务的稳定性。
其页面的路径为:全部功能 → 基础设施 → 主机组
按照堡垒机的提示,在购买的云主机上面执行一段类似以下的脚本:
然后就可以看到堡垒机配置好了。
如果云主机重启了,需要在其执行上面脚步的目录中,手动执行下面命令启动堡垒机:
然后基于该堡垒机配置云主机:
添加一个云主机组,然后选择密钥的方式,实例IP填写 127.0.0.1 即可
接下来需要配置云主机的ssh登录,这个流程大致是:
- 部署代码时,会推送代码到堡垒机(可以理解为就是一个服务器,提供上传功能)
- 接收到代码时,堡垒机会使用ssh方式登录到目标机器(也就是云服务器)上面
- 上传代码,然后执行一些脚本
登陆我们选择的是ssh方式,所以需要在堡垒机上面上面配置 ssh的私钥,但我们的堡垒机和云服务器是同一个,也得同时有公钥。
接下来需要在购买的云主机上面操作:
- 先在云主机的控制后台的 SSH密钥页面生成一个 SSH密钥,记得下载私钥,私钥是一个 pem文件
- 复制公钥
- 登陆云主机,可以直接网页登陆,方便一些
- 进入
.ssh
目录, 修改authorized_keys
文件,粘贴上面复制的公钥,保存文件
- 使用
cp authorized_keys ./id_rsa.pub
生成一个公钥
- 在网页左上角有一个上传文件的 sftp 图标,点击上传刚下载的私钥
- 复制私钥到
.ssh
目录:cp xxx.pem .ssh/id_rsa
注意事项,出现以下异常:
connect to 127.0.0.1:22 by PUBLIC_KEY failed, retry 1: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
可能原因有两个:
- 没有配置 id_rsa.pub 文件
- 配置文件,但是权限不正确
我因为瞎操作,文件配置好,但是权限啥的不对,开始为:

有两个问题:
- 第一个
authorized_keys
用户组不对,使用chown -R root:root .ssh/authorized_keys
修改root
id_rsa.pub
的权限不对,因为是直接copy了authorized_keys
文件,需要修改为chmod 644 id_rsa.pub
正确的格式为:

验证是否可用,可以到coding平台的云主机组看看云主机的实例是否连接正确。
如果还是有问题,有一个小技巧可以方便定位:
在购买的云主机上面,先停止 堡垒机的服务:
然后不以后台方式启动
这样就可以看到访问的日志了,方面定位问题
配置构建计划
先在项目 → 制品管理 → 制品仓库 中新增一个Generic类型的仓库,内容随意填写一些
然后在项目 → 持续集成 → 构建计划 → 新建的一个构建计划
我们新建一个空白的计划(点击右上角的 自定义构建计划 按钮),关联仓库,配置构建流程,过程比较简单,贴一个图片说明一下:

我们依赖Nodejs,默认的镜像使用的比较老的版本,建议构建时自定义一个镜像

后面的上传制品库也比较简单,把生成的zip包上传过去

配置部署计划
在全部功能 → 应用中心 → 创建一个应用, 部署方式选择主机组
再创建一个空白流程,按需配置,基础配置中可以新增触发器,例如制品有更新时,自动执行,然后部署步骤就是下载制品,然后配置上传之后一些行为,例如重启服务等。

其他一些衡量
为什么不使用docker,有一些本地数据例如上传的图片放本地,使用docker镜像需要做一些额外的配置,故使用pm2 + 源码方式更加方面一些。
为什么不使用密码方式登录,密码可能会有过期,获取忘记密码而修改情况,使用ssh方式避免后面的维护问题