最近在搭建开发环境,大致的布局是这样的:一个专门的数据库 VM,一个用于编译和代码执行的 VM(dev virt,装的 RedHat),还有用来写代码和运行这两个虚拟环境的 Mac(local)。这里我需要一个工具,可以满这样的需求:
我把我的解决办法简单记录在这里。在接下去记录之前,需要回答这样两个问题:
下面一步一步来解决这个问题。
第一步,配置 VM 在 NAT 下的端口映射,允许从 Mac 上可以 SSH(默认是 22 号端口)到 dev virt 上:
为什么上面选择了 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 因为支持压缩,所以性能还不错。
文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》