code-server可以在浏览器中打开VS Code

我们通过Docker来部署code-server,通过nginx进行代理访问

Docker部署code-server

这是完整的docker-compose.yaml

version: "3.8"

x-app: &common
  restart: on-failure:3
  logging:
    driver: "json-file"
    options:
      max-size: "200k"
      max-file: "10"
  network_mode: bridge

services:
  code-server:
    <<: *common
    image: linuxserver/code-server:amd64-latest
    container_name: code-server
    environment:
      PUID: 1000
      # 非root用户使用docker需要加入docker(998)组: $(getent group docker | cut -d: -f3)
      PGID: 998
      TZ: Asia/Shanghai
      PASSWORD: '' # 访问密码
      # HASHED_PASSWORD: #optional
      SUDO_PASSWORD: '' # sudo密码
      # SUDO_PASSWORD_HASH: #optional
      PROXY_DOMAIN: 'example.com' # 端口自动代理域名
      VSCODE_PROXY_URI: http://{{port}}.example.com/ # 避免https无法访问
      DEFAULT_WORKSPACE: /config/workspace # 默认工作空间
      # 设置扩展市场 https://coder.com/docs/code-server/latest/FAQ#how-do-i-use-my-own-extensions-marketplace
      # EXTENSIONS_GALLERY: '{"serviceUrl": "https://open-vsx.org/vscode/gallery"}'
    volumes:
      - /opt/docker-data/code-server/config:/config
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock # 在code-server中使用docker
    ports:
      - 8443:8443
    healthcheck:
      test: [ "CMD-SHELL", "curl -sSf 127.0.0.1:8443/healthz" ]
      interval: 10s
      timeout: 10s
      retries: 10

注意:

  • 如果需要在code-server中访问docker,则需要将环境变量PGID设置为宿主机的docker的组id,可通过命令查询getent group docker | cut -d: -f3。然后添加卷映射: /var/run/docker.sock:/var/run/docker.sock
  • code-server在运行时会自动转发本地端口到指定的域名,需要通过环境变量PROXY_DOMAIN指定代理的域名
  • 代理地址默认为https://{{port}}.{{PROXY_DOMAIN}}/,如果没有启用https,则可通过环境变量VSCODE_PROXY_URI进行配置
  • code-server使用Open-VSX扩展库,部分VS Code扩展在市场中不可见。可通过环境变量使用第三方扩展库: EXTENSIONS_GALLERY='{"serviceUrl": "https://my-extensions/api"}'。但因原生的扩展市场是闭源的,微软禁止第三方使用该扩展市场。服务条款
  • /confg目录为用户HOME目录,由于我们只映射了该目录,若容器重新创建,则全局安装的软件和配置会丢失。所有需要重用的软件都需要进行本地安装到/config/.local/bin目录。

安装SDK

我编写了一个bash脚本以安装需要的SDK,可以做个参考

docker exec -it code-server bash -c  "curl -fsSL https://liwt.top/script/code-server-init.sh | bash"