# Midway 应用迁移
更多内容,可查阅官方文档 Midway Serverless (opens new window)
我们在初始 Midway
项目时, 选用的是纯 Node.js
这种方式,并以 koa
作为了项目的 context
。
当初选这项方式的原因是,这项方式可以在部署时将 纯 Node.js
方式创建的项目平滑过渡到 Serverless
部署,同时这两种方式还都可以保留。
最终在测试环境,将项目通过 docker compose
的方式进行部署,在生产环境使用 Serverless
部署。
# 创建 f.yml 文件
关于什么是 f.yml 文件 和关于此文件的更多配置,请见文档 (opens new window)
在项目的根目录下创建,与 package.json
同级
service:
name: tutu-list-web-server
provider:
name: aliyun
runtime: nodejs14
package:
exclude:
- package-lock.json
- bootstrap.js
deployType:
type: koa ## 部署的应用类型
version: 3.0.0
# 不自动生成域名,最终方式时需要手动配置域名
custom:
customDomain: false
# 自动生成域名,但是有时效性,过期该域名就会失效
# custom:
# customDomain:
# domainName: auto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 创建 app.js
const WebFramework = require('@midwayjs/koa').Framework;
const { Bootstrap } = require('@midwayjs/bootstrap');
module.exports = async () => {
// 加载框架并执行
await Bootstrap.run();
// 获取依赖注入容器
const container = Bootstrap.getApplicationContext();
// 获取 koa framework
const framework = container.get(WebFramework);
// 返回 app 对象
return framework.getApplication();
};
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 修改 package.json 文件
添加 deploy
部署命令,并在发布时自动执行 npm run build
"midway-integration": {
"lifecycle": {
"before:package:cleanup": "npm run build"
}
},
"scripts": {
"deploy": "midway-bin deploy"
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 执行部署命令
cnpm run deploy
1
强烈大家在 midway
项目中使用 cnpm
,毕竟都是一家子,使用 npm
在部署 Serverless
环境的过程中,会install
一个 layers
(层),它会很慢很慢,我从来没见到过 install
完成的样子
# 输入 AccessKeyID 和 AccessKeySecret
在首次部署时,会让你键入 AccessKeyID
和 AccessKeySecret
,以部署到阿里云为例,AccessKey
的位置在这;
部署完成后,云厂商会自动创建一个域名,点击此域名就可以进行访问了
# 添加访问域名
如果你有自己的域名,那么要在 f.yml 中设置 customDomain: false
并且在域名管理中添加自定义域名
# 添加路由配置
在域名管理中添加自定义域名,并配置路由,指定哪一个路径由哪一个函数进行处理