# 阿里云公测版迁移到正式版

为了开发者更方便的将业务从公测版迁移到正式版，我们提供了公测版一键迁移到正式版的功能，开发者可在[uniCloud控制台](https://unicloud.dcloud.net.cn)操作迁移，流程如下：

## 购买正式版迁移空间
公测版迁移正式版，需通过`迁移正式版`操作来下单购买待迁移的正式版空间，该操作会为两个空间增加迁移绑定关系，方便后续迁移配置。

![](https://web-assets.dcloud.net.cn/unidoc/zh/%E8%BF%81%E7%A7%BB%E6%AD%A3%E5%BC%8F%E7%89%88%E6%8C%89%E9%92%AE.png)

迁移时，可以选择新空间使用**按量计费**或**包月套餐**。

如选择套餐，目前会根据公测版老服务空间最近三十天的平均用量水位，一共十二项计费指标，然后分别和不同档位套餐的阈值相比较。最低套餐满足了每一项指标都不超限。

经与阿里云协调，已上线新版推荐套餐方案，改为只强制校验5个计费指标：
- 云数据库容量
- 云存储容量
- 前端网页托管容量
- 过去30天云存储累计CDN流量
- 过去30天前端网页托管累计CDN流量

满足这5个指标，就可以迁移。其他指标超过使用的套餐会发出警告，但也允许迁移。

如果你的迁移选项里只有按量计费，没有套餐，那说明即便是最高档的套餐也无法满足。

因为老空间未提供流量统计，且一直免费。导致很多开发者不知道自己的流量和存储消耗多大，可能会惊讶于最低套餐的标准。

对于认为套餐超过预期的开发者，可能是存储里过多无用文件或代码需要优化，推荐改用按量付费，跑1天看看使用量消耗到底在哪里，问题出在哪里，然后优化下代码和存储，把成本降下来。

虽然用户量小，但套餐推荐较高，常见的问题有：

1. 存储文件体积太大，低档套餐的存储不够，迁移不了
2. 定时任务导致云函数使用量和数据库读写量偏高
3. 不合理的代码设计，一个页面发起太多请求次数
4. 云函数运行内存设的太高。正常情况下256M内存是够的。可以在[云函数package.json](https://uniapp.dcloud.net.cn/uniCloud/cf-functions.html#memory)或web控制台调整。
5. 如果之前使用uni统计，建议调整下统计的上报数据频率和云端跑批频率。不能太造资源。[详见](https://uniapp.dcloud.net.cn/uni-stat-v2.html#savemoney)

DCloud始终是为开发者提供更高性价比方案的产品服务公司，DCloud不会为了挣钱故意推荐开发者用不着的高档套餐。

目前包月套餐可以转按量计费，但按量计费还不能转包月套餐。我们会推进阿里云尽快解决。

在购买待迁移空间前，已经可以获取到迁移后云存储上传及下载的域名，**开发小程序的话，由于小程序安全域名白名单在客户端有缓存，建议迁移前两天将云存储域名添加到白名单**。

下单时可设置迁移任务执行的时间，迁移时间仅支持两小时后到三天内的时间点，在未开始执行之前可更改迁移时间。

由于待迁移正式版空间是一个全新且独立的空间，所以在创建后会分配新的SpaceId，规则为`mp-公测版SpaceId`。

为了更好的在云函数/云对象中兼容，购买待迁移正式版空间时， 可选择`是否在云函数/云对象代码中兼容 SpaceID`，如果开启该选项，迁移后在云函数/云对象内获取的`context.SPACEINFO.spaceId` 及 `cloudInfo` 内的 SpaceId 将保持不变，仍为原公测版SpaceId。开发者可以通过`context.SPACEINFO.useOldSpaceId` 或 `cloudInfo.useOldSpaceId`判断当前获取的spaceId是不是迁移前的，true表示当前服务空间在云函数内取到的服务空间id为迁移前的服务空间id，否则为新空间id。如运行本地云函数，此特性于`HBuilderX 3.6.13`起支持，云端默认支持此特性。**迁移后的新服务空间id为旧空间id加`mp-`前缀。**

![](https://web-assets.dcloud.net.cn/unidoc/zh/%E8%BF%81%E7%A7%BB%E4%B8%8B%E5%8D%95.png)


**注意**：
- 公测版不可迁移到正式版的免费版（开发者版）
- 如有跨账号迁移需求，需使用空间所属账号邮箱发送邮件至 service@dcloud.io 说明新账号及服务空间进行申请
- 购买待迁移正式版空间后，为了保证数据迁移的一致性，此时的正式版空间无法在HBuilderX关联、无法在控制台创建数据表、无法在云存储及前端网页托管上传文件等操作，直至迁移完成。
- 购买待迁移正式版空间后，云存储及前端网页托管cdn流量便会开始计费并出账到正式版空间
- 使用旧空间的链接产生的云存储及前端网页托管的CDN流量会在第二天的某个时间统计出来并加到正式版空间上
- 只有通过`迁移正式版`完成创建的正式版服务空间才支持一键迁移，原已创建的正式版空间无法使用该功能。
- 如果客户端为小程序，请在迁移前先到小程序后台配置新的上传域名到上传域名白名单（注意不要移除公测版服务空间的上传下载域名），**由于小程序安全域名在微信客户端内有缓存，建议再迁移前两天进行配置**
- 如果文件较多，建议在半夜等用户不访问的时间进行迁移。迁移过程耗时数分钟（具体取决于云存储的文件量），迁移中大多数功能仍可以使用，但云存储的上传功能在迁移中会关闭。如果文件不多，建议在工作时间迁移，万一有问题可以及时联系到DCloud和阿里云的技术支持。
- 正式版固定IP代理出口IP和公测版不同，如有在三方平台配置域名白名单请自行修改，参考：[阿里云固定IP](cf-functions.md#aliyun-eip)
- 迁移到正式版后公测版服务空间的数据库备份不会被迁移过来
- 迁移到正式版后开发者下次在HBuilderX打包发行时会使用正式版服务空间ID。请注意这时候需要修改小程序request域名白名单，将`api.next.bspapp.com`添加到request域名白名单内
- 迁移到正式版后公测版服务空间前端网页托管默认域名将在公测结束后自动回收  
- 迁移到正式版后不可删除公测版服务空间，需等待公测结束后自动回收

## 迁移开始

系统会在设置的迁移时间自动开始执行迁移任务，迁移逻辑及注意事项如下：

### 云数据库

- 云数据库无需迁移，会将公测版服务空间的数据库关联到正式版上，所以**请勿删除公测版数据**

迁移期间是否可正常服务：<font color=#42b983>是</font>

迁移类型：<font color=#42b983>无感迁移</font>

迁移耗时：无

### 云函数

- 云函数定时任务、url化配置及自定义域名会一并迁移，公测版服务空间的url化请求会自动转发到正式版服务空间上
- 如果绑定了自定义域名，此时仍会请求到公测版空间然后转发到正式版空间，您也可以将域名解析到正式版服务空间，免去请求转发的逻辑

阿里云公测版callFunction请求、云对象调用使用了`api.bspapp.com`这个域名，正式版是`api.next.bspapp.com`。为避免迁移后旧客户端（迁移前发布的客户端）无法访问到新服务空间，阿里云做了请求转发，迁移完成后旧客户端仍会请求`api.bspapp.com`而阿里云会把发送到旧空间的请求转发到新空间去。从而保证迁移前后旧版本客户端能正常请求云函数

url化访问时不管是默认域名还是自定义域名均和上述转发逻辑类似。开发者也可以将自定义域名解析到新空间去，省去请求转发的逻辑。

迁移期间是否可正常服务：<font color=#42b983>是</font>

迁移类型：<font color=#42b983>无感迁移</font>

迁移耗时：约3-5分钟

### 跨域配置

- 由于正式版跨域配置上限为9条，跨域配置记录迁移后可能会超上限，此时无法新增。正式版跨域配置支持泛域名，可将公测版配置的多个子域名删除后添加一条泛域名
- 跨域配置同时会对前端网页托管生效，如果你迁移前配置了前端网页托管自定义域名。迁移后需要先将前端网页托管的自定义域名重新绑定后才可添加新的跨域配置。

迁移期间是否可正常服务：<font color=#42b983>是</font>

迁移类型：<font color=#42b983>无感迁移</font>

迁移耗时：很短，可忽略不计

### 云存储

- 云存储在迁移开始后，上传文件的功能不可用，访问不受影响
- 原云存储链接仍可正常访问，流量费用会计到正式版空间，正式版空间如果是包年包月则从资源用量中扣除，如果是按量计费则会出账并从余额中扣除，出账时间为T+2
- 使用HBuilderX 3.6.10-alpha或3.6.5-正式版之前的版本发布的应用，迁移后上传文件会报错（错误信息为：`文件上传失败`，web端上传请求会返回403错误码），需要使用更新的HBuilderX版本重新发布应用（不管是app、小程序、web均需要重新发布，app端可使用wgt更新）
- 正式版新上传的视频文件，视频截帧只支持H.264编码格式，不支持H.265编码格式，原公测版上传的视频不受影响

迁移期间是否可正常服务：<font color=#f3a73f>可正常访问，不可上传</font>

迁移类型：<font color=#f3a73f>有感迁移，迁移期间不可上传文件</font>

迁移耗时：单文件体积较大，1GB迁移耗时约1分钟；单文件体积不大文件较多，1万个文件耗时约30分钟

### 前端网页托管

- 前端网页托管文件及自定义域名会一并迁移，迁移期间访问不受影响
- 网站首页需设置为index.html，如果设置为其他子目录(xxx/index.html)，迁移可能会失败
- 单页应用配置取消，改为由错误页面实现，迁移时会自动将开发者配置的单页应用目录转为错误页面配置项，开发者无需操作
- 默认域名及自定义域名此时仍会请求到公测版空间，与云存储不同的是不会转发到正式版空间
- 正式版空间如果为按量计费，在迁移任务执行时会自动开通前端网页托管

迁移期间是否可正常服务：<font color=#42b983>是</font>

迁移类型：<font color=#f3a73f>有感迁移，迁移完成后自定义域名需重新绑定及解析CNAME到正式版</font>

迁移耗时：单文件体积较大，1GB迁移耗时约1分钟；单文件体积不大文件较多，1万个文件耗时约30分钟


## 迁移完成

在迁移任务执行完成后，业务中公测版服务空间相关的数据会一并迁移至正式版：

1. 插件市场购买的付费插件
2. 公测版服务空间购买的Redis
3. 公测版服务空间添加的协作者
4. 公测版服务空间添加的安全网络及IP防刷配置

此时公测版服务空间将无法在[uniCloud控制台](https://unicloud.dcloud.net.cn)操作，无法在HBuilderX关联， 正式版服务空间已完全替代公测版，可在HBuilderX关联进行打包。

### 迁移完成后的TODO

- 检查云函数运行是否正常，比如定时任务及url化是否正常、云函数/云对象中获取到的SpaceId是否符合预期
- 检查云存储上传是否正常，公测版服务空间的上传请求会转发到正式版，所以上传的文件会在正式版里体现
- 检查前端网页托管是否正常，比如自定义域名的访问。如果有使用默认域名请尽快替换为正式版域名

### 前端网页托管绑定了自定义域名

如果绑定了自定义域名，则仍会请求到公测版服务空间，此时正式版上传的文件并不会反向同步到公测版，导致自定义域名无法访问新上传的文件。

由于自定义域名仍绑定在公测版服务空间，正式版空间前端网页托管的域名状态为`需解绑后重新绑定`

![](https://web-assets.dcloud.net.cn/unidoc/zh/%E5%89%8D%E7%AB%AF%E7%BD%91%E9%A1%B5%E6%89%98%E7%AE%A1%E5%9F%9F%E5%90%8D%E7%8A%B6%E6%80%81.png)

需要开发者在[uniCloud控制台](https://unicloud.dcloud.net.cn)将自定义域名删除后重新绑定，通过该操作获取到新的CNAME后，将域名解析更换到新的CNAME以完成域名迁移。 这个期间前端网页托管自定义域名访问会中断，建议在访问量较低的时候处理。


## 迁移后uniCloud特殊业务消耗费用说明@unicloud-fee

很多开发者使用uniCloud是因为短信、app一键登陆、iOS通用链接、app升级中心、uni统计等业务。

当阿里云计费后，开发者关心这些业务造成的成本有多少？我们为开发者进行测算，具体结果见下方：

[uni统计2.0](https://uniapp.dcloud.net.cn/uni-stat-v2.html#cost)

[App升级中心](https://uniapp.dcloud.net.cn/uniCloud/upgrade-center.html#upgrade-center-fee)

[短信](https://uniapp.dcloud.net.cn/uniCloud/send-sms.html#sms-fee)

[App一键登录](https://uniapp.dcloud.net.cn/uniCloud/univerify.html#unilogin-fee)

[激励视频服务器回调](https://uniapp.dcloud.net.cn/component/ad-rewarded-video.html#aliyun-cf-fee)

[uni-push2.0](https://uniapp.dcloud.net.cn/unipush-v2.html#uni-push2-0%E8%B4%B9%E7%94%A8%E8%AF%B4%E6%98%8E)

[iOS通用链接](https://uniapp.dcloud.net.cn/api/plugins/universal-links.html#%E4%BA%91%E8%B5%84%E6%BA%90%E6%B6%88%E8%80%97%E8%AF%B4%E6%98%8E)
