# 在Windows下原生安装vs code server并配置C++开发环境 兹有工作站一台,配置比较高,但经常不在办公室。ToDesk一类的再好它也是基于图像传输的机制,激烈操控时还是不够丝滑,写代码不是很爽。因此,希望使用vs code server,利用远程硬件进行基于网页的开发,充分利用工作站算力。 如果装的是Linux,那么基本就是若干命令的事儿。但微软在这事儿上居然罕见地搞起了Linux优先,windows成了二等公民,坑就多了些。 ## node js 的安装 整体上基于[此处教程](https://coder.com/docs/code-server/latest/npm)进行。注意目前(2023年6月28日),代码是基于`node js 16`的,实测最新的`node`是编译不过去的,不要浪。 > 2023年11月27日补充:新版要求node 18了,不是很能理解既然升级为啥不升级到最新。Windows下的升级方法是直接覆盖安装。 注意下载的时候选择`node js 16`下最新的小版本。写文章时最新的小版本是`Node.js 16.20.1 Gallium 2023-06-20`,旧的老版本可能无法检测到VS 2022. 其他安装条件如[这个链接](https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites)所示。 因为过程中需要编译,最好首先装好整套的Visual Studio 2022(社区版没问题)并且一定要装C++开发功能。否则就安装的时候装chocolate,让他自己装一些包。 在手动装Visual Studio 2022,不用chocolate(安装过程中不选“Tools for Native Modules”)的情况下。如果后续步骤中有报错找不到VS一类的问题,可以在安装完node之后执行`npm config set msvs_version {visual studio version}`,例如`npm config set msvs_version 2022`. 然后安装git for windows,不要误会,主要不是要那个git,而是要那个bash环境。其他Windows上的bash环境如msys2我没有测过。 总的来说,需要提前安装的有: + python + Visual Studio 2022 + git for windows + node.js 16 文档也写的比较杂乱,建议通读之后再动手。 ## code-server 的安装 由于安装过程中会调用visual Studio,安装末尾过程中会调用sh命令,所以这是个大坑,需要一个命令行环境同时可以访问vc工具链和sh命令。 这个需求,理论上可以通过把git的bin目录加入(或者`set PATH=%PATH%;C:\Program Files\Git\usr\bin;`临时加入)path来实现。但我测试这个方法貌似会有未知问题,造成不报错但编译出来的文件调用终端时极不稳定。 *所以微软这是搞啥呢。* 所以最后我找到的解决办法匪夷所思:在git for windows自带的bash里面操作。网络不好的话自己解决。 1. 安装上面说的所有软件,确认npm命令全局可用。 2. 可能需要执行`npm config set msvs_version 2022 --global`,因为我执行过很多次所以不清楚有没有缓存。(2023年11月27日附加:在最新安装的node 18中,这个命令显示没有名为msvs_version的配置项,至于是变智能还是其他毛病不得而知,最后安装成功,我也就没有深究)。 3. 可以安装了,`npm install --global code-server --unsafe-perm` 4. 如果没有报错,试试运行一个`code-server`,如果不报错并且能够通过浏览器访问,就OK了。 ## 内网穿透,反向代理和HTTPS 5008端口,做FRP穿透,再反向代理一层。`certbot`附加个证书,避免明文传输密码。 反向代理的问题是这玩意儿用了web socket,所以反向代理有几个特殊的地方: ``` server{ listen 443 ssl; server_name codeserver.tiger2doudou.com; ssl_certificate /etc/letsencrypt/live/codeserver.tiger2doudou.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/codeserver.tiger2doudou.com/privkey.pem; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; add_header X-Cache-Status $upstream_cache_status; access_log /var/log/codeserver/access.log; error_log /var/log/codeserver/error.log; # set max upload size client_max_body_size 512M; set $upstream_vscode http://127.0.0.1:12345; location / { # use a veriable $upstream_vscode, so nginx will not try to check upstream status at startup proxy_pass $upstream_vscode; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { if ($host = codeserver.tiger2doudou.com) { return 301 https://$host$request_uri; } listen 80; server_name codeserver.tiger2doudou.com; return 404; # managed by Certbot } ``` 但还是不放心。这玩意儿用起来这儿方便,权限和功能又太多。所以最好还是平时不要开,需要时用todesk打开,用完关掉。 ## C++开发插件 安装插件最好在`set HTTP_PROXY 你懂的`环境下运行,`code-server`是很尊重这个变量还有`HTTPS_PROXY`的意见的。但这个环境可能对一些环境变量有干扰。因此,装好之后就关闭`code-server`再开一个正常环境进行配置等。 由于开源的纯洁性问题,一些微软的插件在`code-server`的应用商店里面是没有的,需要去[微软商店](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)手动下载visx文件(通过 version history页面),使用插件页面的安装visx功能进行安装。 下载时注意86/64版本问题。 > 有类似问题的插件还包括[Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance),也是要手动下载安装。基本上就是微软下俩功夫而不想开源的都是这样。