【Linux】浏览器写代码!部署code-server远程vscode网页

2023-10-27

部署code-server远程vscode网页,在浏览器上写代码!

参考文档 https://developer.aliyun.com/article/876967#slide-7

本文首发于 慕雪的寒舍

1.什么是code-server?

注意,这不是在linux系统上安装vscode软件(和windows一样的vscode客户端)

开源仓库 https://github.com/coder/code-server

code-server是一个社区项目(非微软官方)其作用是在你的linux主机(云服务器)上部署一个可以在浏览器上访问的vscode页面,类似官方的vscode.dev

微软官方推出的vscode网页版 https://vscode.dev/

它可以通过浏览器的api访问你电脑上的本地文件,此时浏览器就是一个vscode客户端

image-20230309214517648

code-server同理,其访问的是你linux服务器上的文件,作用类似于vscode插件remote ssh,让我们可以用浏览器,在任何电脑、平板上进行远程开发,无须下载vscode客户端或者ssh软件!

image-20230309223145036

1.1 官方的vscode-server?

微软官方确实有一个vscode-server,在官网可以下载。我测试了之后,发现它是打了一个隧道,通过vscode.dev的子域名访问,会转发到你的主机上。

image-20230309230334118

在我这里的测试,发现压根连不上微软的服务器。想想其实也很正常,因为vscode-server的文档页面连中文都没有,再加上微软的服务器,国内用不了也是意料之中

2.安装

2.1 下载安装包

截至本文创作时间23-03-09,code-server的最新版本是4.10.1,可以用下面的命令获取到linux下的安装包

wget https://github.com/cdr/code-server/releases/download/v4.10.1/code-server-4.10.1-linux-amd64.tar.gz 

如果上面这个命令你无法访问,可以去github的releases里面手动下载安装包

https://github.com/coder/code-server/releases/

我的系统是amd64,即x86架构。在github里面也是找linux amd64的包进行安装

$ uname -a
Linux 1c2261732150 5.10.120 #0 SMP Fri Jan 6 08:05:47 2023 x86_64 x86_64 x86_64 GNU/Linux

如果你使用的是树莓派等设备,请用uname -a确认你的系统架构,并下载对应的包


github的release下载慢,可以用下面这个网站加速(用迅雷下,速度起飞)

https://doget.nocsdn.com/#/

下载完成后,将压缩包用xftp传输到服务器上

2.2 解压

使用下面的命令解压刚刚下载好的压缩包

tar -zxvf code-server-4.10.1-linux-amd64.tar.gz

给解压出来的文件夹改个短名字vsc

mv code-server-4.10.1-linux-amd64 vsc

cd进入这个文件夹

cd vsc

ls -l,基本文件如下

total 792
drwxr-xr-x   8 muxue muxue   4096 Mar  4 12:26 .
drwx------   6 muxue muxue   4096 Mar  9 22:42 ..
drwxr-xr-x   2 muxue muxue   4096 Mar  4 12:26 bin
drwxr-xr-x   3 muxue muxue   4096 Mar  4 12:26 lib
-rw-r--r--   1 muxue muxue   1084 Mar  3 17:13 LICENSE
drwxr-xr-x 243 muxue muxue  12288 Mar  4 12:26 node_modules
-rw-r--r--   1 muxue muxue 480100 Mar  4 12:26 npm-shrinkwrap.json
drwxr-xr-x   5 muxue muxue   4096 Mar  3 17:13 out
-rw-r--r--   1 muxue muxue   5235 Mar  4 12:24 package.json
-rwxr-xr-x   1 muxue muxue   4877 Mar  3 17:13 postinstall.sh
-rw-r--r--   1 muxue muxue   3056 Mar  3 17:13 README.md
drwxr-xr-x   3 muxue muxue   4096 Mar  3 17:14 src
-rw-r--r--   1 muxue muxue 180977 Mar  3 17:13 ThirdPartyNotices.txt
drwxr-xr-x   2 muxue muxue   4096 Mar  3 17:14 typings
-rw-r--r--   1 muxue muxue  76688 Mar  4 12:26 yarn.lock

直接进入bin文件夹,我们需要用的可执行文件就在里头

$ ls
code-server

这个code-server就是我们要的可执行文件

2.3 启动code-server

export PASSWORD="配置一个密码"
code-server --port 8888 --host 0.0.0.0 --auth password

上面这个命令,启动之后,会创建一个端口为8888的web服务,此时使用ip:8888的方式,应该就可以访问到你的code-server服务了!

[2023-03-09T14:52:07.081Z] info  Wrote default config file to ~/.config/code-server/config.yaml
[2023-03-09T14:52:07.516Z] info  code-server 4.10.0 ac1fba8bde0c3f29bf6bc27d3d7d75cb2390a7c2
[2023-03-09T14:52:07.517Z] info  Using user-data-dir ~/.local/share/code-server
[2023-03-09T14:52:07.532Z] info  Using config file ~/.config/code-server/config.yaml
[2023-03-09T14:52:07.532Z] info  HTTP server listening on http://0.0.0.0:8888/
[2023-03-09T14:52:07.532Z] info    - Authentication is enabled
[2023-03-09T14:52:07.532Z] info      - Using password from $PASSWORD
[2023-03-09T14:52:07.532Z] info    - Not serving HTTPS

出现下面的页面,那就是安装成功了!输入你刚刚设置的密码,就可以像使用vscode一样使用code-server了!

image-20230309225342649

2.4 配置文件

首次启动了之后,会在你的用户路径下生成一个.config/code-server文件夹,里面有一个config.yaml

$ ls .config/code-server
config.yaml

打开这个文件,可以在里面配置code-server的密码,以及https访问。其余的配置项我还没有关注过,可以去看看github上的文档

bind-addr: 127.0.0.1:8080
auth: password
password: 64f1881b805917a449d80874
cert: false

默认的密码巨长,改成你自己的即可。在这里还可以修改默认绑定的ip和端口,后续启动code-server,就不需要手动指定了,直接运行即可

./code-server

2.5 tmux后台运行

nohup运行code-server有一点问题,所以要用tmux

如果没有这个软件,先安装

sudo yum install tmux

创建一个新会话,你可以理解为这是一个脱离于bash的独立shell页面,即便当前bash退出了,code-server也不会退出

tmux new -s vscode_online

开启新会话后,进入vsc的bin目录,启动code-server,命令是不变的

./code-server

image-20230310082417260

随后直接关掉当前bash,此时就已经实现了code-server的后台运行

# 接入会话
tmux a -t vscode_online

# 结束会话
tmux kill-session -t vscode_online

3.一些问题

3.1 nginx转发遇到1006错误

我在采用nginx转发的时候,遇到了这个问题

image-20230309221146320

个人猜测,这大概率是因为我在config.yaml里面配置了code-server的https导致的

cert: false # 关闭https

将cert修改回false,再次测试,发现还是有这个问题!

实际上,如果你进行了nginx转发,并不需要配置code-server的https

保持默认的http即可


后来发现是我的nginx转发设置有问题,正确的转发配置如下

location / {
	proxy_pass   http://127.0.0.1:8888;
	proxy_set_header Host $host;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection upgrade;
	proxy_set_header Accept-Encoding gzip;
}

下面给出一个nginx的https的完整配置文件!

server {
    listen 443 ssl;
    server_name  www.example.com;  # 域名
    # 注意证书文件位置,是从/etc/nginx/下开始算起的
    ssl_certificate cert/example.com.crt; 
    ssl_certificate_key cert/example.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    client_max_body_size 1024m;

    location / {
       	proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
        # 当下是直接用yum安装的nginx,可以直接用本地ip访问
        # 如果是docker安装的nginx,需要改为公网ip
        proxy_pass http://127.0.0.1:8888;
    }
}
# 强制重定向http -> https
server {
    listen 80; # 监听80端口
    server_name  www.example.com;  # 域名
    #把http的域名请求转成https
    return 301 https://$host$request_uri; 
}

3.2 C/C++插件

由于code-server是一个第三方项目,所以一些官方的插件(如pylance)直接在code-server的插件商店里面搜是没有的

我们需要去微软的vscode官网上下载插件的VSIX文件,使用本地文件的方式进行安装

https://marketplace.visualstudio.com/VSCode

image-20230309230141057

不过,pylance用这个办法依旧无法安装。看来有些插件只有官方的vsc才能安装

3.3 本地文件

如果你用过vscode的remote-ssh插件连过你这个服务器,用户目录下面会有两个文件夹

.vsc
.vscode-server

这两个文件夹是vscode的插件remote-ssh生成的,和本文安装的code-server无关!

3.4 tmux常用语句

tmux new  创建默认名称的会话(在tmux命令模式使用new命令可实现同样的功能,其他命令同理,后文不再列出tmux终端命令)

tmux new -s mysession  创建名为mysession的会话

tmux ls  显示会话列表

tmux a  连接上一个会话

tmux a -t mysession  连接指定会话mysession

tmux rename -t s1 s2  重命名会话s1为s2

tmux kill-session  关闭上次打开的会话

tmux kill-session -t s1 关闭会话s1

tmux kill-session -a -t s1  关闭除s1外的所有会话

tmux kill-server  关闭所有会话
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】浏览器写代码!部署code-server远程vscode网页 的相关文章

  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • 如何在linux中以编程方式获取dir的大小?

    我想通过 C 程序获取 linux 中特定目录的确切大小 我尝试使用 statfs path struct statfs 但它没有给出确切的大小 我也尝试过 stat 但它返回任何目录的大小为 4096 请建议我如何获取 dir 的确切大小
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • linux下如何从文本文件中获取值

    我有一些文本格式的文件 xxx conf 我在这个文件中有一些文本 disablelog 1 当我使用 grep r disablelog oscam conf 输出是 disablelog 1 但我只需要值1 请问你有什么想法吗 一种方法
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4

随机推荐

  • 目标检测中的回归损失函数系列二:IoU Loss

    IOU Loss 出自论文 https arxiv org pdf 1608 01471 pdf L1 和L2 loss是将bbox四个点分别求loss然后相加 并没有考虑靠坐标之间的相关性 而实际评价指标IOU是具备相关性 看一张图关注I
  • python实现-从带层级的json到markdown无序列表的父子关系的转换

    带层级的json到无序列表的父子关系的转换 从带层级的json到无序列表的父子关系的转换 总结 python中 with的用法一定要跟 as 结合在一起吗 顺便也说下 as 的用法吧 从带层级的json到无序列表的父子关系的转换 首先 我们
  • Timequest Timing Analyzer进行时序分析(二)

    四 用TimeQuest对DAC7512控制器进行时序分析 在对某个对象下时序约束的时候 首先要能正确识别它 TimeQuest会对设计中各组成部分根据属性进行归类 我们在下时序约束的时候 可以通过命令查找对应类别的某个对象 TimeQue
  • 实例解析C++/CLI之接口与泛型

    实例解析C CLI 之接口与泛型 接口 某些时候 让不相关的类分享一组公有成员 以便产生相同的行为 是非常有用的 一个最基本的方法可能是通过一个公共的基类来定义它们 但这种方法太受局限 因为它要求这些类通过继承而互相关联 另外 它们也许还有
  • 又一个大雷引发市场巨震?Silvergate或将跌落:成也加密败也加密?

    这是白话区块链的第1874期原创 作者 Terry出品 白话区块链 ID hellobtc 3月1日 加密友好银行集团 Silvergate Capital布将推迟提交其年度 10 K 报告 10 K 报告是美国证券交易委员会要求的一份文件
  • PPPoE工作流程

    PPPoE 英语 Point to Point Protocol Over Ethernet 以太网上的点对点协议 是将点对点协议 PPP 封装在以太网 Ethernet 框架中的一种网络隧道协议 PPPoE协议及其工作过程 PPPoE的工
  • 【游戏杂记】Rgss3a文件的解包

    Rgss3a文件的解包 在RPG游戏中 如果想提取图片音乐等资源 需要对文件进行解包 这里是解包工具的链接 链接 https pan baidu com s 1 UKyetIHGsw1ibOHFLHUMQ pwd 5422 提取码 5422
  • 转载:Run-Time Check Failure #2分析

    文章出处 http hi baidu com D6 BB D3 B0 C1 F7 C0 CB blog item 0d72bcb477b2bbc236d3cad4 html Run Time Check Failure 2 一般是栈被破坏
  • 34 个 常用 Linux Shell 脚本,运维必备!

    作为一名 Linux 工程师 会写好的脚本不仅能提高工作效率 还能有更多的时间做自己的事 最近在网上冲浪的时候 也注意收集一些大佬写过的脚本 汇总整理一下 欢迎收藏 与君共勉 1 用户猜数字 bin bash 脚本生成一个 100 以内的随
  • 【力扣】两数之和-java

    思路是 两个循环套用 刚刚开始的时候想判断里面数小于目标值 这样遍历的次数会少 后面发现当数组中为负数的时候 if方法失效 判断了负数 后面发现数据中有两个0失效 判断了0 后面发现如果数据中有正有负 方法失效 public int two
  • 2021-08-30爬取网页信息并转成DataFrame

    导入包 from urllib request import urlopen Request from chardet import detect from bs4 import BeautifulSoup import re import
  • Spring多线程事务解决方案

    Spring多线程事务解决方案 多线程事务场景以及解决思路 代码实现 工具类使用演示 效果展示 多线程事务场景以及解决思路 多线程事务场景举例 对批量操作进行性能优化时会用到多线程来并行处理 从而提高运行效率 而时有业务要求保证批量操作事务
  • 如何在SOLIDWORKS中实现装配体缩放

    缩放比例功能 通过选择 插入 gt 功能 gt 缩放比例 可以找到 可用于更改单个零件中所有功能的比例 使用时 此工具在功能树中显示为附加功能 但是 此功能仅限于零件 sldprt 文件使用 您如何缩放SOLIDWORKS装配体 标SOLI
  • 解决运行flutter doctor --android-licenses时报错

    问题描述 配置flutter环境时 会使用flutter doctor命令来检查运行flutter的相关依赖是否配好 能看到还差 Android license status unknown 未解决 C Users ipkiss wu gt
  • 5 个最令人兴奋的 ES13 功能

    ES13 ECMAScript 2022 已经发布很久了 并且更新了许多有用的功能 在这篇文章中 我想与大家分享 5 种我最喜欢的技术 这些技术是我已经开始在工作中实施的 1 顶级await await 是我最喜欢的功能 因为它使我的代码显
  • python调用m文件

    系统环境 windows 64bit matlab 2018b 64bit python3 6 前提 windows下需要有matlab软件和python python调用m文件需要安装matlab engine 注意matlab版本与py
  • 类模板下运算符重载的两种用法

    1 template
  • java编写定时器,定时执行某个方法

    第一步 编写测试类 该类extends TimerTask 重新run 方法 run方法里面就是你要执行的逻辑代码 示例如下 import java text SimpleDateFormat import java util Date i
  • Python如何调用js函数?

    Python如何调用SDK的js函数 一 概述 二 环境准备 三 调用方法 步骤 四 Demo演示基础版 五 常见问题 六 深入了解 待更新 七 参考资料 一 概述 测试web前端 前端SDK web渗透流程等时 难免会需要调用前端js里面
  • 【Linux】浏览器写代码!部署code-server远程vscode网页

    部署code server远程vscode网页 在浏览器上写代码 参考文档 https developer aliyun com article 876967 slide 7 本文首发于 慕雪的寒舍 1 什么是code server 注意