一、背景
开发环境怎么能做到一次搭建,永久使用,一劳永逸?甚至还可以快速复制和分享。
如何避免重装系统?
如何避免重装软件?
如何避免资料丢失?
如何避免重新配置?
包括几个方面问题:
1、更换电脑或重装系统时,如何快速拥有全面的办公能力、开发能力?
通常情况:
各种软件(常用的、不常用的)都得重新安装,包括各种插件、补丁等;
系统配置,软件配置,都得重新来过;
某些软件中的资料、历史记录,无法完全恢复(比如无法备份,浏览器的历史记录,XSHELL的登录密码等);
其他一些问题……
遇到这种情况,是很头疼的,特别是像我这样,各种配置、软件非常多的情况。
2、更换网络环境时,如何拥有以前花大力气搭建起来的实验环境(Linux下)?
比如,以前搭了一套Kafka集群,Kubernetes集群,换了公司,现在想用一下,怎么办?
二、解决方案
先回答 问题2:
通常来说,换了大环境、网络环境,以前那些实验性的东西,就不会再用了。试想一下,什么情况下,我们换了公司后,还会想把以前搭建的东西跑起来呢?可以是可以,但是代价比较大,需要衡量。
所以,要解决的问题就是,怎么以最小的代价,恢复以前搭建和使用的东西。但是做这件事情之前,首先要考虑值不值得,这个东西以后用到的概率大不大。
下面就说说解决方案。
将实验环境搭在自己本地,而不是公司网络中,或者在本地打包成Docker镜像,拿到公司网络中去运行,甚至像Oracle这样的数据库,都是有Docker镜像安装的。
但是像Kubernetes这种成套非常复杂的Docker镜像集群,还得对宿主机进行一些配置,要整套重新配置搭建,也是很费劲的。
所以,解决方法就是,虚拟机+Docker的方式混合,能封装成Docker,一键或者简单安装的,就用Docker,如果需要用到宿主机,且有很多配置、安装很多软件的,则用虚拟机,恢复的方式就是直接把虚拟机启动起来。要管理这么多虚拟机,建议使用Vagrant。如果要用到Windows环境,也可以用Windows的虚拟机整体备份,这样所有的软件、开发环境都在里面了,启动起来就能用。
这里有个问题,就是存储怎么解决,Docker会挂外部存储,大的文件也不宜直接存到虚拟机中,所以存储得单独拿出来。恢复的时候,要和Docker或虚拟机对应起来。
总之,就是要写文档,把搭建步骤,存储的对应关系,使用方法等,都写出来。以便以后能很快恢复和上手。
注意,虚拟机的方式运行,需要本地电脑有强悍的配置,比如要运行Kubernetes集群,运行TiDB,运行Spark Yarn等。我觉得,6个节点应该是足够了,每个节点最多8G,最多也就48G,算上宿主电脑自身需要,64G内存应该绰绰有余。放宽一点,32G可以将就用。
三、总结
上述方案,现在我已经做到了,效果很好!简单总结一句话:
“Windows的系统整体备份(WTG)” + “Vagrant虚拟机(Windows、Ubuntu、CentOS和DockerOS)”+“各种Docker镜像”
其中:
WTG是重量级复制(也是日常使用系统的常规备份,非常可靠)
Vagrant虚拟机是比较重量级的复制(但很少需要复制,做好种子备份就行了)
Docker镜像是比较轻量级的复制(复制可靠,但很少用)
相当于是有三重保障。开发环境的搭建,可以做到一劳永逸:
我MySQL、Redis等,都安装在Vagrant的DockerOS中,分分钟启动,数据持久化并有整体备份。
我的一堆偶尔用到的软件(比如Music文件制作工具)安装在Windows虚拟机(VMWare或VirtualBox)中,分分钟启动。
我偶尔用到的专业开发环境(比如Android开发)安装在专用Ubuntu虚拟机中(VMWare或VirtualBox)中,分分钟启动。
我日常用到的所有常用软件和代码,都在Windows WTG系统中,一个小U盘,随身携带,定期备份,分分钟启动我日常使用的Win10系统。