1. 概览
在本系列的第一篇文章中,已经提到过,截止到现在Strapi的最新版本还不支持自动migration数据,所以我们需要手动migration数据到目标机。
那么什么是Migration?
简单来说,就是把现有的整个网站的数据从一台服务器移植到另一台服务器上。
E.g. 假如,按照我们先前的介绍,我们在ServerA上setup了一套Strapi的app,然后在ServerA上进行了一系列的开发,之后由于某些需求的改变,或者是部署环境的改变,我们需要把整个已有的Strapi系统移植到ServerB上,这个整个的过程称之为Migration。
基于MongoDB的现有方案
既然Strapi现在没有提供成熟的解决方案,那么只有自己动手丰衣足食。根据前面几篇文章的介绍,整个Strapi的App有两部分组成:Stapi网站和mongoDB(我们之前使用了MongoDB),所以我们的方案就是migrate这两部分的数据。
注意:本文基于您是使用linux操作系统的假设编写的,而且您最好是follow我们本系列前几篇文章来搭建整个Strapi系统。
如果有疑问的话,可以直接联系我,我很愿意帮您解决您在实际应用过程中遇到的问题。
2. 先决条件
- MongoDB Database Tools
- mongodump —— 用于dump整个数据库的数据
- mongorestore —— 用于restore整个数据库的数据
3. Dump原有服务器上的数据
3.1 执行下面代码,dump整个MongoDB
mongodump --uri="mongodb://localhost:27017" -u=strapi -p=strapi --authenticationDatabase=admin -d=strapi -o="./dump"
3.2 打包已经dump的MongoDB的数据
tar -czvf dump.tar.gz ./dump
3.3 备份Strapi网站的必要数据
- 删除
node-modules
文件夹# 进入Strapi网站所在文件夹,我的系统中,这个文件夹是strapistrapi-app cd strapistrapi-app rm -fr node_modules cd ..
- 打包整个网站
# strapistrapi-app是strapi网站所在的文件夹 tar -czvf strapi.tar.gz ./strapistrapi-app
4. 在目标机器上restore数据
4.1 使用docker-compose启动Strapi
您可以follow前几篇文章,通过docker-compose启动整个strapi,或者通过git获取这个repo,执行其中的start.sh
4.2 暂停Strapi的container
# 您需要首先运行docker ps查看strapi container的id
docker stop <strapi container id>
4.3 在mongo container中删除strapi的数据库
# 您需要首先运行docker ps查看mongo container的id
docker exec -it <mongo container id>
# 在repo中,docker-compose文件中指定了mongoDB的默认用户名密码均为strapi
mongo -u strapi -p strapi
use strapi
db.dropDatabase()
4.4 Copy strapi.tar.gz
& dump.tar.gz
到目标机器
strapi.tar.gz
& dump.tar.gz
是3.3中生成的strapi网站和mongoDB的dump数据。
4.5 解压上述两个文件
# 解压strapi
tar -xzvf strapi.tar.gz
# 解压mongoDB
tar -xzvf dump.tar.gz
4.6 执行restore命令
# 如果您clone了之前提到的repo,可以直接执行其中的restore文件
./restore.sh
# 否则,您需要执行以下命令
mongorestore --uri="mongodb://localhost:27017" -u=strapi -p=strapi --authenticationDatabase=admin dump/
4.7 重新启动整个Strapi网站
# 如果您clone了之前提到的repo,可以直接执行其中的start文件
./start.sh
# 否则,您需要执行以下命令
docker-compose up -d