0%

ts版的egg的部署

前面说过如何用egg.js的ts版本来进行开发,今天来说道下如何部署。ts版的还是有点差别的,在部署上也是。遇到的问题记录下。

首先我们将代码部署到服务器,可以用jenkins进行或者直接用ftp工具拖到服务器,方便点我们可以直接在服务器里面用git clone,然后又更新的话直接pull,这样更方便(对个人来讲)。

部署

按照egg.js文档上面的进行部署:

1
$ npm start

ok,这时候npm是没问题可以跑起来的,我们来访问一下看看请求的返回结果:

1
Internal Server Error, real status: 500

炸锅。。。。。

来看看日志上显示啥错误:

1
2
# common.error.log
nodejs.Error: Please set config.keys first

奇怪了,我们明明在config.default.ts里面配置了对应的key啊,而且config.{env}.js里面定义的属性是覆盖config.default.ts的,等于说都合并到config.default.ts里面,不肯能未定义的。难道是因为文件是ts?

egg.js的文档上有句话:

正式环境下,我们更倾向于把ts构建为js。

得,等于说我们在服务器里面运行之前,需要将ts都转换为js,这样才能正常运行。看看package.json,里面有对应的命令:

1
2
3
4
5
6
7
8
{
"scripts": {
"ci": "npm run lint && npm run cov && npm run tsc",
"autod": "autod",
"lint": "tslint --project . -c tslint.json",
"clean": "ets clean"
}
}

在服务器里面,我们需要先运行:npm run ci,将ts转化为js,然后再启动服务npm star

why?因为当有同名的ts和js文件时,egg会优先加载js文件。

在开发期间,egg-ts-helper会自动调用清除同名的js文件,也可以npm run clear手动清除。

ok,归根结底,我们在服务器中部署的时候需要运行两个命令:

1
2
$ npm run ci
$ npm start

再次访问下,发现请求是可以正常访问的。

域名访问

现在我们部署好了,但是访问的域名还是本地访问的形式:ip:7001,我们需要添加域名访问的形式,比如,我们需要使用域名api.tcs-y.com来作为我们的api的域名,现在我们需要和部署好的服务进行绑定。

首先申请好域名,做好解析,解析到对应的ip,然后需要在开启服务器的对应端口7001,如果是阿里云,需要开启对应的安全组。安装好nginx,我们使用nginx来做反向代理。

在nginx配置中做api的对应的配置:

1
2
3
4
5
6
7
8
 # api的配置
server {
listen 80;
server_name api.tcs-y.com;
location = / {
proxy_pass http://127.0.0.1:7001;
}
}

在egg的配置中,设置允许代理:

1
2
// config.prod.ts
config.proxy = true;

ok,现在我们就可以愉快的用域名访问我们的api服务了。😄

码字辛苦,打赏个咖啡☕️可好?💘