# 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
并且在域名管理中添加自定义域名

# 添加路由配置
在域名管理中添加自定义域名,并配置路由,指定哪一个路径由哪一个函数进行处理
