搭建本地持续性开发环境

1. 需求

工欲善其事,必先利其器。

对于开发者来讲,每天早上上班后能第一时间进入到昨天的开发界面是一件很辛福的事情。为了实现这种开发状态笔者总结了三个方法:

  1. 电脑放在公司,下班不关机,早上来公司打开电脑就是昨天的操作界面。
  2. 开发环境放在公司内网服务器,采用 vim IDE + tmux 的方式。
  3. 开发环境放在本地虚拟机,采用 虚拟机软件 + vim IDE + tmux 的方式。

优缺点比较

  1. 第一种方式优点是最快速进入开发状态,能使用本地各式各样的 IDE;缺点是工作地点的移植性差。例如回家后突然想继续工作了,发现电脑还在公司。
  2. 第二种方式优点是能保证快速进入开发状态,也能保证工作地点的移植性;缺点是对网络有一定依赖,一般需要拨 vpn 才能连接到公司内网,并且跑路后自己熟悉开发的环境就连不上了。
  3. 第三种方式优点就比较多了,能快速进入开发状态,随时随地办公,无需联网,跑路后也不影响(哈哈),跨操作系统移植等等;缺点是某些开发环境对电脑配置要求可能较高。

本文主要向大家介绍下第三种方式,分别对 PD 安装虚拟机,开发环境上网设置,部署 VIM IDE等进行展开介绍。

这个方式也是笔者在开发过程中摸索出来并且一直在使用的,我自己感觉很好用,所以推荐给大家。

2. 环境准备

  • macOS 操作系统(或 Windows)
  • item2 终端 (或 xshell)
  • Parallels Desktop 13 虚拟机软件,本文中简称 PD (或 Vmware Workstation 等其他)
  • CentOS 7.6 Minimal ISO 镜像
  • Vim IDE github 地址:terminal
  • 本地 通过 socket5 协议上网

3. PD 安装虚拟机

本实验我们选用 Centos 系统作为开发环境。

如果你使用的是 Parallels Desktop 虚拟机软件,可以参考 使用 Parallels Destop 最小化安装 centOS 操作系统

如果是其他软件,还请自行百度,只要能创建出一个 CentOS 虚拟机即可。

4. 开发环境上网设置

4.1 macOS 本地配置

polipo 是一个 web 代理软件,具体作用大家可以百度查询下,这里不做过多介绍。

虚拟机通过指定 http 代理,将 http 请求转到的本地,从而达到虚拟机通过本地电脑发送 http 请求的目的

安装 polipo:

brew install polipo  

更改配置文件:

vim ~/.polipo
# config file for polipo @ ~/.polipo

proxyAddress = "0.0.0.0"
proxyPort = 8123 #在这里指定提供 http 协议的端口
allowedClients = 127.0.0.1, 10.211.55.0/24
allowedPorts = 1-65535
tunnelAllowedPorts = 1-65535
proxyName = "localhost"
cacheIsShared = false
socksParentProxy = "127.0.0.1:1086"
socksProxyType = socks5
# chunkHighMark = 33554432
# diskCacheRoot = ""
# localDocumentRoot = ""
disableLocalInterface = true
disableConfiguration = true
dnsUseGethostbyname = yes
disableVia = true
censoredHeaders = from,accept-language,x-pad,link
censorReferer = maybe
# maxConnectionAge = 5m
# maxConnectionRequests = 120
# serverMaxSlots = 8
# serverSlots = 2

启动并且开机自启动 polipo 服务:

brew services start polipo

每天中午12点定期清理 polipo 缓存

crontab -e
0 12 * * * polipo -x

4.2 虚拟机配置

虚拟机配置 http 代理:

vim ~/.bashrc
# 增加一行 alias proxy
='env http_proxy=http://10.211.55.2:8123 https_proxy=http://10.211.55.2:8123' 

注:10.211.55.2 是虚拟机的网关,IP 地址配置在本地电脑网卡上。该 IP 地址由 PD 管理且自动生成。

重新加载环境变量:

source ~/.bashrc

5. 部署 IDE 编辑器

5.1 安装基础安装包

yum install git -y

5.2 克隆代码

git clone https://github.com/mauricewei/terminal.git 

5.3 安装 vim IDE

执行部署脚本:

cd terminal/vim
#这里使用 KX 上网,速度会快些 proxy .
/install_on_CentOS.sh

如果无报错则说明脚本执行成功。

这个步骤花费的时间会有点长,因为脚本会去 github 和其他网站下载很多 vim 插件。

验证

查看 vim 版本是否为 8.1:

vim --version
#输出内容开头查看版本号 VIM
- Vi IMproved 8.1 (2018 May 18, compiled Apr 17 2019 15:29:39)

使用 vim 打开文件夹:

vim ~/terminal/vim/ 

结果如下:

以上,我们的 Vim IDE 的主要部分就安装完成了。

5.4 安装 remotecopy

开发过程中我都是使用终端 ssh 到虚拟机进行操作,这样会有一个问题:虚拟机里 vim 编辑的内容无法使用 cmomand+c 复制到本地电脑剪切板中,也就无法使用 command+v 粘贴。

remotecopy 就是为了解决这个问题,它的原理是使用 C/S 架构,在本地电脑起一个 remotecopy server,remotecopy server 将客户端发来的内容写在本地电脑剪贴板中。

remotecopy server 部署(该步骤在本地电脑执行):

➜ cd terminal/remotecopy
➜ ./setup.sh
./remotecopyrc -> /Users/weim/.remotecopyrc
./remotecopy -> /usr/local/bin/remotecopy
./remotecopyserver -> /usr/local/bin/remotecopyserver
你正在安装remotecopy的server端?(y/n)?y

默认端口为 2019,可以在 remotecopyrc 文件里设置其他端口。

添加启动脚本(该步骤在本地电脑执行)

如果使用 zsh 则将下面内容追加写入 ~/.zshrc 

如果使用 bash 则将下面内容追加写入 ~/.bashrc

if [[ -f $HOME/.startremotecopy.sh ]]; then
    ps -ef | grep "/usr/bin/perl /usr/local/bin/remotecopyserver" | grep -v grep &>/dev/null
    if [ $? != 0 ]; then
        sh $HOME/.startremotecopy.sh
    fi
fi

这样当本地电脑开机后第一次打开 item2 终端时则会自动开启 remotecopy server 服务。

ssh 配置该步骤在本地电脑执行)

因为我们是使用 ssh 连接到虚拟机,要想 remoteserver 客户端与服务端通讯,我们需要利用 ssh 建立一个隧道。

这里直接修改并执行 terminal 中 ssh 目录下的脚本即可:

修改 10.221.55.* ,将其改为你的环境中虚拟机实际网段,默认端口为 2019 ,这个端口要与 remotecopy server 端口保持一致。

vim terminal/ssh/setup.sh

cat << EOF > $HOME/.ssh/config
# 设置session复用,在session生命周期内,不需要重复输入密码,在使用跳板机时特别有用
Host *
    KeepAlive yes
    ServerAliveInterval 60
    ControlPersist yes
    KexAlgorithms +diffie-hellman-group1-sha1

# 设置目的端服务器连接本地计算机的转发端口
# remotecopy的client会通过此端口拷贝数据给本地计算机的server端
Host 10.211.55.*
    RemoteForward 2019 localhost:2019
EOF 

执行

cd terminal/ssh && ./setup.sh

remotecopy client 部署该步骤在虚拟机中执行)

直接执行脚本进行 remotecopy client 的安装

[root@ide ~]# cd terminal/remotecopy/
[root@ide remotecopy]# ls
ARCH.md  COPYING  README.md  remotecopy  remotecopyrc  remotecopyserver  setup.sh
[root@ide remotecopy]# ./setup.sh
‘./remotecopyrc’ -> ‘/root/.remotecopyrc’
‘./remotecopy’ -> ‘/usr/local/bin/remotecopy’
‘./remotecopyserver’ -> ‘/usr/local/bin/remotecopyserver’
你正在安装remotecopy的server端?(y/n)?n

remotecopy client 也需要 vim 插件的配合,这个配置在「5.3 安装 vim IDE」的时候已经加载了相关插件,所以在这步就不需要操作。

验证:

使用 remotecopy 命令+文本内容验证:

[root@ide ~]# remotecopy maurice_test_content
Input secret:
rc-72af7b7b86a11bbc5bb717c2ae705125
[root@ide ~]# maurice_test_content

在交互式输入“Input secret: ”时直接按粘贴快捷键(即command+v)然后按回车即可,此时再次按粘贴快捷键就是内容“maurice_test_content”。输入“input secret:”是出于安全性考虑,避免有人恶意向你的剪切板写入大量数据导致电脑崩溃。

此时,就说明 remotecopy 将虚拟机中的“maurice_test_content”内容写在了系统剪切板上,也就达到了远程拷贝的目的。

配合 vim 使用:

在 vim 普通模式下使用 v 或者 shift+v 进行文本内容选中,选好后按 leader 键+c 即可进行复制。

我的 vim leader 按键使用的是默认的 \ 键,该快捷键可以在 ~/.vimrc 和 ~/.vim/plugin/remotecopy.vim 中设置。

其他使用方法:

可以将命令行的执行结果写到剪贴板中,例如:

[root@ide ~]# remotecopy `ls /`
Input secret:
rc-72af7b7b86a11bbc5bb717c2ae705125
[root@ide ~]# bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

5.5 安装 tmux

tmux 可以保存当前的会话为一个进程,也提供分屏等功能。对于开发的持续性有着重要意义。

安装:

直接执行脚本即可

[root@ide ~]# cd terminal/tmux/
[root@ide tmux]# ./setup.sh

验证:

创建一个 tmux 会话:

[root@ide tmux]# tmux new -s test

5.6 安装 git

在安装 vim IDE 插件时,为了能 clone 代码,已经安装了 git 安装包,这步主要是配置 git 的配置文件。

直接执行脚本即可:

[root@ide ~]# cd terminal/git/
[root@ide git]# ./setup.sh
‘gitignore’ -> ‘/root/.gitignore’
‘gitconfig’ -> ‘/root/.gitconfig’

5.7 安装 zsh

zsh 有些地方比 bash 好用的多,直接执行脚本即可进行安装和配置:

[root@ide ~]# cd terminal/zsh/
[root@ide zsh]# ./setup.sh

6. 总结

本文要达到的主要目的是希望大家能够根据教程搭建一套完整的持续性开发环境,所以上面的部署环节中很多细节并没有介绍,例如 vim IDE 的插件介绍、vim IDE 的快捷键、tmux 的使用方法、git 配置项等等,这些内容我尽量更新到 github 上的 Readme 中,有兴趣的同学也可以直接看代码了解。

平时使用过程中,我的使用场景有:

  1. 搭建完开发环境后给虚拟机打个快照,或者将虚拟机关机后将虚拟机文件备份到 U 盘,这样以后想搭建相同的开发环境只需恢复快照或者用备份文件再起一个虚拟机。
  2. 按照开发的内容进行分类,每个类型创建一个 tmux 会话,这样开发内容不容易混淆。
  3. 下班后直接将虚拟机中止(不关机),第二天直接将暂停的虚拟机开始,然后打开 tmux ,这样就完全恢复到了前一天的工作环境。

最后,希望本文能提高你的开发效率!

posted @ 2019-04-17 18:55  MauriceWei  阅读(669)  评论(0编辑  收藏  举报