将db从dev部署到prod的正确方法是什么,并在prod中进行一些更改后将其撤回?现在我只是将mongo转储保存在存储库中,但我认为应该有一个更正确的方法。
复制数据库不是官方的内置功能,但我了解您正在谈论的工作流程。在您将网站交给客户或为公众提供服务的时候,您通常会希望将现有数据库推送到生产服务器。之后,您经常需要将其复制到开发计算机。
这里有sync-up
和sync-down
脚本:
https://github.com/apostrophecms/apostrophe-boilerplate/tree/master/scripts
这些脚本假设您正在使用我们的Stagecoach部署系统,并且mongodb直接在生产服务器上运行,并且将接受来自其自身(来自localhost)的连接而无需密码。这些假设可能不适合您,因此您可能需要根据需要调整这些脚本。
然而,正如您将在这些简短的脚本中看到的那样,基本的答案是(对于这个故事,我使用的是“从生产到开发同步”用例):
mongodump
在远程生产服务器上创建数据库的可移植副本。 rsync下来并使用mongorestore
来恢复它。
ssh $remoteSSH mongodump -d $dbName -o /tmp/mongodump.$dbName &&
rsync -av $rsyncDestination:/tmp/mongodump.$dbName/ /tmp/mongodump.$dbName &&
ssh $remoteSSH rm -rf /tmp/mongodump.$dbName &&
mongorestore --noIndexRestore --drop -d $dbName /tmp/mongodump.$dbName/$dbName
使用rsync
也可以复制public/uploads
。
rsync -av --delete $rsyncDestination:/opt/stagecoach/apps/$projectName/uploads/ ./public/uploads
有关如何初始化变量的信息,请参阅脚本。
如果您在S3中托管生产内容,则可以使用AWS CLI,尤其是aws s3 sync
命令。
希望这有用!