前面说过如何用egg.js
的ts版本来进行开发,今天来说道下如何部署。ts版的还是有点差别的,在部署上也是。遇到的问题记录下。
首先我们将代码部署到服务器,可以用jenkins进行或者直接用ftp工具拖到服务器,方便点我们可以直接在服务器里面用git clone
,然后又更新的话直接pull
,这样更方便(对个人来讲)。
部署
按照egg.js文档上面的进行部署:
1 | $ npm start |
ok,这时候npm是没问题可以跑起来的,我们来访问一下看看请求的返回结果:
1 | Internal Server Error, real status: 500 |
炸锅。。。。。
来看看日志上显示啥错误:
1 | common.error.log |
奇怪了,我们明明在config.default.ts
里面配置了对应的key啊,而且config.{env}.js
里面定义的属性是覆盖config.default.ts
的,等于说都合并到config.default.ts
里面,不肯能未定义的。难道是因为文件是ts?
egg.js的文档上有句话:
正式环境下,我们更倾向于把ts构建为js。
得,等于说我们在服务器里面运行之前,需要将ts都转换为js,这样才能正常运行。看看package.json
,里面有对应的命令:
1 | { |
在服务器里面,我们需要先运行:npm run ci
,将ts转化为js,然后再启动服务npm star
。
why?因为当有同名的ts和js文件时,egg会优先加载js文件。
在开发期间,egg-ts-helper
会自动调用清除同名的js文件,也可以npm run clear
手动清除。
ok,归根结底,我们在服务器中部署的时候需要运行两个命令:
1 | npm run ci |
再次访问下,发现请求是可以正常访问的。
域名访问
现在我们部署好了,但是访问的域名还是本地访问的形式:ip:7001
,我们需要添加域名访问的形式,比如,我们需要使用域名api.tcs-y.com
来作为我们的api的域名,现在我们需要和部署好的服务进行绑定。
首先申请好域名,做好解析,解析到对应的ip,然后需要在开启服务器的对应端口7001,如果是阿里云,需要开启对应的安全组。安装好nginx,我们使用nginx来做反向代理。
在nginx配置中做api的对应的配置:
1 | api的配置 |
在egg的配置中,设置允许代理:
1 | // config.prod.ts |
ok,现在我们就可以愉快的用域名访问我们的api服务了。😄