前言
自从按触了code-server,感觉这个就是坑好多的问题,但这些问题其实都是可以解决的,它可以做到与本地vscode一样的体验与功能。
常见问题
1、想用桌面Vscode的Remote-SSH连接飞牛开发fpk,但是连接不上
关键是缺少了用户家目录,用ssh连接,执行下面命令修复,注意其中abc用户名,要换成自己的:
# 新建家目录
sudo mkdir -p /home/abc
# 修改家目录所有者为abc
sudo chown -R abc:Users /home/abc
# 修改家目录权限为700
sudo chmod 700 /home/abc
若出现下面的错误,那是飞牛1.2.0203版本关闭了tcp转发,
ERROR: TCP port forwarding appears to be disabled on the remote host. Ensure that the sshd_config has `AllowTcpForwarding yes`. Contact your system administrator if needed.
执行下面命令修复:
# 覆写默认配置,或者是nano修改no成yes
echo "AllowTcpForwarding yes" | sudo tee /etc/ssh/sshd_config.d/trim_sshd.conf
# 重启ssh服务
sudo systemctl restart sshd
这样就可用Remote-SSH连接飞牛来开发了。
2、为什么code-server能用的插件很少,找不到想要的插件
那是因为vscode是开源的,但对于它的插件是不开源,而且规定了不是官方的就不能使用它的官方源,所有有两种办法,第一种是手动去桌面Vscode下载VSIX插件上传到飞牛上安装,第二种是直接修改成官方的源,请下面教程进行修改:
如何在Vscode-server上使用C/C++插件
code-server 使用 vscode 官方插件仓库
3、code-server 提示The workbench failed to connect to the server(Error: WebSocket close with status code 1006),连接不上怎么办
这个问题确是坑惨我了,但也是研究明白了,其中这个1006最大的问题是Websocket的代理问题,code-server有一个安全校验机制,也就是请求头的Origin 和 Host 不一致时,就会直接掐断了连接报1006错误,一个是让 Host 和 Origin 完美匹配,要么是设置X-Forwarded-Proto与X-Forwarded-Host这两个请求头,优先信任 X-Forwarded-Host 来判断“真实 Host”,这样就可以连接的上了,而官方商店的docker版本的Vs code为什么用飞牛app来连接也是这个问题,请参考下面进行修复:
论飞牛统一网关转发层,解决code-server中WebSocket连接失败问题
第三方应用接入飞牛统一网关(golang中间层)
统一网关版code-server
4、code-server查看不了图片,有些插件会出打不开界面的情况
code-server is being accessed in an insecure context. Web views, the clipboard, and other functionality may not work as expected.
这就是webview的问题,首先声明code-server是支持webview的,那为什么加载不出来,原因是VS Code Webview 依赖 Service Worker,而浏览器只允许 Service Worker 在安全上下文(Secure Context)运行,但浏览器有特殊规则,其中http://localhost与http://127.0.0.1即使 HTTP 也算 Secure Context,如下图所示:

但是,如果是192.168.xx.xxx的这种的,浏览器是不信任的,这就加载不出来的,如下图所示:

使用下面命令,可以找到飞牛的自签证书,
sudo find /usr/trim -type f \( -name "*.crt" -o -name "*.pem" -o -name "*.key" \)
总结:code-server 的 Webview 不是因为 HTTP 本身不能用,而是因为浏览器在非安全环境禁止 Service Worker;IP + HTTP、自签未信任证书都会导致 Webview 加载失败,也就是要去Let's Encrypt或者外面用飞牛的Fnconnect也可以加载出来,因为浏览器信任这证书,所以没有证书什么的,对这一块不并熟悉,并没有什么好的思路来解决,可以参考下面的教程:
code-server Dokcer部署方法及踩坑
5、code-server复制粘贴的问题
如果用的是iframe的cgi方案,没有给父iframe就不会不能ctrl+c和ctrl+v,但可以用javascript来修复些问题,如果用的是统一网关方案则没有这问题,然后是http不能右键复制与粘贴,原因是不安全,用https就可以,一般用ctrl+c与ctrl+v就可以解决,如果遇到用不了的复制与粘贴,尝试使用ctrl+insert复制与shift+insert粘贴,这样就没有问题了。
总结
目前基本是覆盖了code-server的常见问题,如果飞牛后面可以出一个开启与关闭家目录的选项那就更好了,若遇到docker容器不断重启的问题,基本上很太可能是权限问题,比如是hermes的docker权限不对,那它就不能在应用路径创建文件,就会一直重启,而code-server容器也是这样的,目前主要有两个方式来使用code-server,一种是使用docket,它隔离性好但命令使用不方便,另一种是用systemctl来挂载,这种是原生的体验,但它会直接影响物理机。