开发环境上的代码同步

四火 2018-02-15 13:33

最近在搭建开发环境,大致的布局是这样的:一个专门的数据库VM,一个用于编译和代码执行的VM(dev virt,装的RedHat),还有用来写代码和运行这两个虚拟环境的Mac(local)。这里我需要一个工具,可以满这样的需求:

  • 能够把Mac上写的代码同步到dev virt上去。
  • 不需要手动触发,每当有修改,应该能够自动同步。

我把我的解决办法简单记录在这里。在接下去记录之前,需要回答这样两个问题:

  • 为什么需要把编译和执行环境放到VM里面去?因为尽量使得代码的编译执行环境接近于生产线。
  • 为什么要在Mac上写代码,而不在dev virt那个VM上写代码?因为在Mac上使用第三方的工具,做一些操作系统上面的改变,编码环境的改变都比较方便,而且虚拟机中写代码有时候明显感到IDE不流畅。

下面一步一步来解决这个问题。

第一步,配置VM在NAT下的端口映射,允许从Mac上可以SSH(默认是22号端口)到dev virt上:

Port mapping

为什么上面选择了2222号端口,主要是考虑避免和常规的SSH冲突。这样配置以后,连接localhost的2222端口,就可以映射到VM上的22号端口去了。

第二步,创建SSH keys。Mac上运行ssh-keygen,创建公钥和私钥。把公钥从~/.ssh/id_rsa.pub拷贝到dev virt,放在~/.ssh下面,并重命名成authorized_keys。注意.ssh权限必须是700,而authorized_keys必须是600。

第三步,配置dev virt上面的/etc/ssh/sshd_config,具体参数根据情况调整,完成以后需要重启SSH服务:service sshd restart。

第四步,尝试连接,在Mac上执行SSH命令,比如ssh ray@127.0.0.1 -p 2222,如果不能访问,考虑修改/etc/ssh/sshd_config,把日志改成verbose:LogLevel VERBOSE,再重启SSH服务,这样就可以通过tail -f /var/log/secure查看无法连接的错误信息。

第五步,创建一个同步脚本,比如叫做rsync.sh,里面就只有一行rsync的命令,比如:rsync -avz –exclude={*/.*,*venv*} -e “ssh -p 2222” ~/Projects ray@127.0.0.1:~,其中的~/Projects是Mac上的代码环境,要同步到dev virt的~上去,而exclude参数过滤掉了主要是python相关的不希望同步的文件夹和文件。

第六步,安装fswatch,它可以监视文件夹下面的变动。brew install fswatch。

第六步,把fswatch和rsync串起来,比如:fswatch -orv -0 ~/Projects/ –exclude=’^.*\/\.|\/venv.*$’ | xargs -0 -n1 ~/rsync.sh,第一次执行比较慢,花了几分钟。但之后有修改的时候,因为是增量同步,几秒钟就自动同步过去了。rsync因为支持压缩,所以性能还不错。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接《四火的唠叨》

[返回] [原文链接]