远程开发的背景
我们先来闲聊一下方便引入话题(当然是说正事的),如果你已经知道code server是干什么的,可以跳过这个章节
我们平时想要做开发写代码,就是自己的win或者mac机器上下载好IDE,比如vscode或者intellij,然后直接打开,配置一下环境就可以用了。当然,程序猿种类可是千千万,还有很多人是Linux上开发的,他们的操作系统甚至连图形化界面都没有,那他们怎么办呢?Linux上即使装了IDE,也没法看到呀!
这个场景下,我们就引出了“远程开发”这个概念,简单的来说,就是图形化界面展示在windows机器上,而实际的计算与存储都在远程Linux机器上(其实远程机器不只是Linux,win或者mac都行,只不过Linux比较常见,毕竟win或者mac都有图形化界面了,直接上去编码就行),这样一来,你虽然用着windows机器,但是却能直接查看与编写在Linux机器上的代码,使用Linux上的环境,甚至是代码跳转以及调试!
这里不妨大家可以打开一个网站
https://vscode.dev/
你会很惊讶,这不是vscode嘛!几天不见,跑浏览器上了
是的,他和基于electron的客户端vscode是一样一样的,只不过我们平时很少会接触到这种形态,当然单独的web vscode基本上还是个玩具,我们还需要在自己的Linux机器上部署好IDE的后台,就可以从这个网页上连接过去,然后就可以在远程机器编码了。这个场景下,用户根本都不需要安装vscode,只需要一个浏览器就可以
有兴趣的同学可以尝试一下github workspace功能,就是vscode server技术的应用
或者你可以直接看下vscode server的文档,但是我们今天主要说code server
Code Server引入
当然,vscode当前对于server模式至少在开源社区层面还没有非常完善,主要是remote-ssh这些插件太好用了,个人开发者一般没必要用到。
我们今天主要就说一个基于vscode,但是非常成熟的远程IDE Server解决方案,叫做Code Server,基于他,我们甚至可以去做Cloud IDE这种听起来很牛逼的东西
有兴趣的同学可以直接上官网
Code Serve的安装
好了,说了这么多,我们来动手先部署一个code server,来看看他的真面目,你需要准备的仅仅是两台机器,一台有图形化的win或者mac,或许就是你手上这台;另一台是任意的Linux机器,主机、虚拟机,如果是docker容器,可能要麻烦点,我们要处理端口映射问题,我在后面说明。
首先到github上,找到符合你机器架构的安装包
https://github.com/coder/code-server/releases
首先进入你的Linux机器,然后执行下面命令
# 下载
wget --no-check-certificate https://github.com/coder/code-server/releases/download/v4.21.2/code-server-4.21.2-linux-amd64.tar.gz
# 解压
tar -xzf code-server-4.21.2-linux-amd64.tar.gz
cd code-server-4.21.2-linux-amd64.tar.gz
然后我们需要执行启动命令了,这里我们就先说两个最重要的参数
–host 0.0.0.0,代表本机外的机器能访问,否则你是无法直接访问的,因为你的win或者mac和你的linux是两台独立的机器
–port 代表服务占用的端口,之后我们访问也是这个端口,用一个不太会与其他服务冲突的端口即可
./code-server --host 0.0.0.0 --port 9002
Code Server使用
安装完了,我们在自己的win或者mac上打开浏览器,然后输入
http://{ip}:{port}
这里的ip,是你Linux机器的ip地址,可以用ifconfig命令查看到
这里的port,就是上面说的,启动服务时使用–port指定的开放出来的端口
当然,深度使用起来你会发现,webview界面打不开,并且提示报错,这里如果有需要麻烦点赞收藏再私信我呀,有人看我再写解决方案hhh
场景说明
这个时候你就问了,这么麻烦,我为啥不用reomte-ssh直接连接,不是方便很多?
当然,对于个人开发者而言,remote-ssh可能更快速易懂,但是倘若我们把范围扩大到一个公司,有几千甚至几万的开发者要来使用的时候,code server就有如下几个优势了
- 每个开发不用单独安装vscode(remote-ssh必须安装vscode)
- 每个开发不用去关心ssh连接问题(remote-ssh需要输入密码或密钥)
- 管理员可以根据每个部门或团队的要求单独制作镜像,部署完成后只需要告诉用户一个url,用户打开url就可以实现开箱即用
- 部署模式可以更好地适应容器化部署,而且更安全(remote-ssh必须开22端口,这是高危的,而server模式可以当成一个普通的服务,可以用任意端口)
我将会在后面的文档进一步展开对于Server模式场景的运用以及技术实现