vscode server搭建及dockerfile版本

前言

vscode支持Client-Server组合,文章主要讲解server端部署以及标准化的dockerfile。

vscode插件市场地址:https://marketplace.visualstudio.com/
vscode客户端地址:https://code.visualstudio.com/updates

版本确认

首先下载一个vscode客户端版本,安装完成后,进入在菜单栏找到"帮助"->"关于",找到关键的"提交"字段,此处信息如下:

版本: 1.83.1
提交: f1b07bd25dfad64b0167beb15359ae573aecd2cc
日期: 2023-10-10T23:45:31.402Z
Electron: 25.8.4
ElectronBuildId: 24154031
Chromium: 114.0.5735.289
Node.js: 18.15.0
V8: 11.4.183.29-electron.0
OS: Linux x64 5.15.0-87-generic snap

下载code server

使用我们上面查到的提交id来下载对应的服务版本,可在任意客户端下载,下载后我将部署在我的x64-linux服务器上

commit_id=f1b07bd25dfad64b0167beb15359ae573aecd2cc
wget https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable

实际的下载地址转换如下:

https://vscode.cdn.azure.cn/stable/f1b07bd25dfad64b0167beb15359ae573aecd2cc/vscode-server-linux-x64.tar.gz?1

下载完成后,得到vscode-server-linux-x64.tar.gz

安装到服务器上

一般来说,最好先删除服务器上残留的~/.vscode-server,如果是升级版本,vscode客户端可不用改配置。

1. 在服务器上执行脚本replace_server.sh或复制内容直接执行,子脚本readjson.py用于识别安装包内提交id,免去手动麻烦。
2. 打开vscode客户端,客户端菜单栏的"帮助->关于"里的"提交"校验值,和服务器的~/.vscode-server/bin目录下的目录名一致,表明这套服务端-客户端组合的一致性
3. 安装插件:打开"扩展->从VISX安装",提前将插件从市场上下载并拷贝到服务器上,这种方式下插件安装非常快,避免从客户端直接安装一直等待转圈的问题。

replace_server.sh

mkdir -p ~/.vscode-server/bin/version
tar zxf vscode-server-linux-x64.tar.gz -C ~/.vscode-server/bin/version --strip 1
commit_id=$(python3 readjson.py ~/.vscode-server/bin/version/product.json)
mv ~/.vscode-server/bin/version ~/.vscode-server/bin/${commit_id}
touch ~/.vscode-server/bin/${commit_id}/0

 readjson.py

import json
import sys
file = sys.argv[1]
with open(file, 'r') as fd:
    data = json.load(fd)
    print(data['commit'])

关于SSH链接

参考文档:SSH简介及两种远程登录的方法

其实ssh登录是一种通用技术,这里不展开介绍,可以阅读参考文档。这里讲下vscode server依赖的环节。

vscode ssh远程连接配置

首先,需要安装remote-ssh插件。

安装完成后按下快捷键F1弹出命令框,输入搜索connect,点击remote-ssh连接主机选项,然后添加或者配置已有主机,你可以在上面看到配置文件的路径。

config配置文件中,每一个目标Host的格式如下:

Host {Host IP}

    HostName {随便取个名字}

    User xxxxxx

    Port xxxxx

    IdentityFile {填写你的私钥文件路径}

其中Port参数默认应该为22,如果启用了docker等服务,会产生端口映射,需要在服务器上通过docker命令查看内部容器的22端口被映射到了服务器的哪个端口。

IdentityFile参数指定了你的私钥路径,以后ssh连接时就自动能连接了。但在这之前,请参考SSH登录方法里如何生成私钥与公钥,以及如何将公钥备案到服务器上。

多客户端复用私钥

如果需要在多个客户端使用,可以进一步将A客户端的私钥拷贝到另一台机器上,并同样配置config文件的Host配置,这是被允许的。

Dockerfile版本

dockerfile的可控性强,因此为了避免重复部署相同环境,可以考虑使用dockerfile来生成标准化镜像。

Dockerfile如下,如需要增加自己使用的库,可以在生成本镜像后再堆叠层:

FROM ubuntu:focal

RUN chmod 777 /tmp && apt update

RUN apt install -y python3 openssh-server

COPY codeserver/ /root/codeserver

RUN cd /root/codeserver && /root/codeserver/replace_server.sh && rm -rf /root/codeserver

COPY setup.sh /root

RUN /root/setup.sh && rm /root/setup.sh

WORKDIR /root

ENTRYPOINT /etc/init.d/ssh start && /bin/bash

 dockerfile目录组织:

.
├── build.sh
├── codeserver
│   ├── readjson.py
│   ├── replace_server.sh
│   └── vscode-server-linux-x64.tar.gz
├── Dockerfile
├── run.sh
└── setup.sh

 其中codeserver文件夹的内容见上述内容,包括部署相关的脚本和server程序。

其中setup.sh如下,是部署ssh密钥的脚本,在路径~/sshkey下会替客户端生成公钥密钥,公钥导入到authorized_keys中备案,私钥导出到客户端使用:

mkdir ~/sshkey
ssh-keygen -f ~/sshkey/id_rsa -P ""
mkdir ~/.ssh
cat ~/sshkey/id_rsa.pub > ~/.ssh/authorized_keys
chown 1000:1000 ~/sshkey/id_rsa

为了方便构建和运行,其中有两个便利脚本build.sh和run.sh

build.sh,会构建名字为code的本地镜像:

docker rmi -f code
docker build -t code .

run.sh,其中将ssh端口向外映射为10022,路径映射为/home/work:/root/share,可自行更改,创建的容器名字为code:

docker rm -f code
docker run -it -p 10022:22 -v /home/work:/root/share --name code code:latest

 至此,容器已经部署完成,只需客户端配置。

配置ssh

容器启动会自动启动ssh,我们只需将/root/sshkey/id_rsa这个私钥文件拷至客户端。

linux的客户端位置为~/.ssh/id_rsa,另外请检查~/.ssh/known_hosts是否存在过期数据,考虑清除后重新连接ssh

windows客户端的位置为C:\Users\你的用户名\.ssh,请确认你的windows用户名来定位实际路径。

如果使用vscode,默认会使用~/.ssh/id_rsa这种路径的密钥,如果需要指定配对的密钥,请在vscode的config文件使用IdentityFile关键字制定

测试ssh

按下vscode的f1调出控制栏目,输入Remote-SSH: Connect Current Window to Host,然后将vscode的ssh配置文件config修改如下。我们在本地创建好了code容器,开放端口为10022。

Host 0.0.0.0
    HostName 0.0.0.0
    User root
    Port 10022

然后执行连接,正常就可以连接到vscode服务端,执行后续的操作。

如果提示ssh有change,请检查~/.ssh/known_hosts,删除旧数据后重新连接vscode会提示是否保存新的数据,确认后将其更新至known_hosts中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值