10.云原生之在线开发调试

news/2024/7/4 7:45:49 标签: 云原生, 在线开发, vscode-server

文章目录

  • vscode-server介绍
  • VSCode Server 和云开发结合
  • vscode-server安装
  • code-server安装插件
    • 在线安装插件
    • 离线安装插件
    • 安装中文插件
  • 配置开发环境
    • 在容器中安装开放环境
    • Dockerfile制作镜像
  • git拉取项目

vscode-server介绍

VSCode Server(Visual Studio Code Server)是一个基于 Visual Studio Code 的远程开发解决方案。它允许你在远程服务器或容器中运行 VSCode,并通过浏览器或本地的 VSCode 客户端与之进行交互。简单总结是web版本VSCode。
VSCode Server 的工作原理是将 VSCode 的核心功能作为一个服务运行在远程环境中,而不是在本地机器上。通过与远程服务器建立连接,你可以在本地机器上的浏览器中打开 VSCode 界面,并像在本地运行 VSCode 一样进行代码编辑、调试和扩展安装等操作。
使用 VSCode Server 的好处包括:

  1. 资源隔离:你可以在远程服务器或容器中运行 VSCode,从而将开发环境与本地机器分离。这对于资源有限或需要特定环境的开发任务非常有用。
  2. 协作与共享:多个开发者可以同时连接到同一个远程 VSCode 实例,实现协同编辑和调试。这对于团队协作和知识共享非常有帮助。
  3. 跨平台支持:由于 VSCode Server 是通过浏览器访问的,因此可以在不同的操作系统上使用,包括 Windows、macOS 和 Linux。
  4. 扩展支持:VSCode Server 支持大多数 VSCode 扩展,你可以在远程环境中安装和使用你喜欢的扩展,以提供更丰富的开发体验。

要使用 VSCode Server,你需要在远程服务器或容器中安装并运行 VSCode Server,并通过浏览器访问它。可以使用 VSCode 客户端或者使用 VSCode 的 Remote Development 扩展来连接到远程 VSCode Server。
总而言之,VSCode Server 提供了一种灵活的远程开发解决方案,让你可以在远程环境中使用 VSCode 的强大功能,提高开发效率和协作能力。

VSCode Server 和云开发结合

VSCode Server 和云开发结合使用可以带来许多好处,下面是一些主要的好处:

  1. 灵活的开发环境: 云开发提供了弹性和可扩展的计算资源,使你能够根据需要创建和管理开发环境。通过在云上运行 VSCode Server,你可以随时随地使用浏览器访问你的开发环境,无需依赖特定的本地机器或配置。
  2. 资源隔离和共享: 在云上运行 VSCode Server 可以将开发环境与本地机器分离,这意味着你可以利用云提供的强大计算资源,而不会受限于本地机器的性能或存储容量。此外,多个开发者可以同时连接到同一个云上的 VSCode Server 实例,实现协同编辑和调试,促进团队协作和知识共享。
  3. 跨平台支持: 云开发平台通常支持多种操作系统,包括 Windows、macOS 和 Linux。这意味着你可以在不同的操作系统上使用浏览器访问云上的 VSCode Server,无需担心本地机器的兼容性问题。
  4. 数据安全和持久性: 在云上运行 VSCode Server 可以确保你的代码和开发环境的数据得到安全保护和持久化存储。云提供了备份、灾难恢复和数据安全性的机制,可以保障你的开发环境和数据的安全。
  5. 强大的扩展支持: VSCode Server 支持大多数 VSCode 扩展,你可以在云上的开发环境中安装和使用你喜欢的扩展,以提供更丰富的开发体验。这使得你可以根据项目需求自定义你的开发环境,并使用适合你的工作流程的工具和扩展。

总的来说,将 VSCode Server 和云开发结合使用可以提供灵活、可扩展和安全的开发环境,使你能够随时随地进行开发,并与团队成员共享和协作。这种组合可以提高开发效率、降低开发成本,并为你的项目提供更好的可管理性和可靠性。

vscode-server安装

linuxserver/code-server

version: "2.1"
services:
  code-server:
    image: lscr.io/linuxserver/code-server:latest
    container_name: code-server
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - PASSWORD=password #optional
      - HASHED_PASSWORD= #optional
      - SUDO_PASSWORD=password #optional
      - SUDO_PASSWORD_HASH= #optional
      - PROXY_DOMAIN=code-server.my.domain #optional
      - DEFAULT_WORKSPACE=/config/workspace #optional
    volumes:
      - /path/to/appdata/config:/config
    ports:
      - 8443:8443
      - 30000-39000:30000-39000
    restart: unless-stopped

建议此处预制一些端口,开发中可能会用到,如开发java项目远程debug等

参数功能
-p 8443Web 图形用户界面
-e PUID=1000对于用户 ID - 请参阅下面的说明
-e PGID=1000对于 GroupID - 请参阅下面的说明
-e TZ=Etc/UTC指定要使用的时区,请参阅此列表
-e PASSWORD=password可选的 web gui 密码,如果提供或未提供,则不会进行身份验证。PASSWORDHASHED_PASSWORD
-e HASHED_PASSWORD=可选的 web gui 密码、覆盖、有关如何创建它的说明如下。PASSWORD
-e SUDO_PASSWORD=password如果设置了此可选变量,则用户将具有使用指定密码在代码服务器终端中具有 sudo 访问权限。
-e SUDO_PASSWORD_HASH=(可选)通过哈希设置 sudo 密码(优先于 var)。格式为 .SUDO_PASSWORD t y p e type typesalt$hashed
-e PROXY_DOMAIN=code-server.my.domain如果设置了此可选变量,则将代理此域以进行子域代理。查看文档
-e DEFAULT_WORKSPACE=/config/workspace如果设置了此可选变量,则 code-server 将默认打开此目录
-v /config包含所有相关的配置文件。插件在config\extensions下

浏览器方式 http://ip:8443
image.png

code-server安装插件

在线安装插件

点击左侧菜单扩展->搜索插件名称->点击安装
image.png

离线安装插件

若是遇到在线安装插件失败的情况(网络原因),需要离线安装

  1. 确定安装的vscode-server版本

image.png

  1. 插件市场下载对应版本插件,插件市场:Visual Studio Marketplace
  2. 如搜索chinese安装中文插件

image.png

  1. 选择插件版本下载

image.png

  1. 点击拓展按钮➡点击右上角三个点···➡点击install from vsix

image.png
点击后展示如下,其中搜索框为容器中的文件系统路径
image.png

  1. 通过Xftp工具将下载插件上传到服务器挂载的容器路径下,点击安装即可

image.png

安装中文插件

image.png

配置开发环境

注意:安装vscode-server默认安装git,个人推荐在容器中安装开放环境重新打包docker镜像,原因很简单有一些环境或者插件在开发过程中才察觉到进行安装,此时重新打包镜像就好,等逐步完善了在重新制作Dockerfile
下载jdk和maven安装包 jdk官网下载 maven官网下载

在容器中安装开放环境

vs-code的java扩展需要jdk-11以上,而我们很多项目还停留在古老的jdk-8,所以需要两个都安装,启动vs-code使用11,编译运行项目使用jdk8.

  1. docker以root身份进入容器
docker exec -it --user root <container_id> /bin/bash
  1. 在容器内部安装jdk、Maven等,建议下载安装包离线安装(挂载好管理)
# 容器在线安装
sudo apt update
sudo apt install openjdk-11-jdk
sudo apt install openjdk-8-jdk
sudo apt install openjdk-17-jdk
java -version

sudo apt install maven
mvn --version

sudo apt install nodejs npm
node --version
npm --version
  1. 离线安装jdk并配置环境变量
# 要将宿主机文件上传到Docker容器中,离线安装放在/opt目录下
docker cp <宿主机文件路径> <容器名称或ID>:<容器内目标路径>
#解压
tar -zxvf jdk-11.0.11_linux-x64_bin.tar.gz

# # 设置环境变量,Ctrl + O保存 |  Ctrl + x退出
sudo nano /etc/profile
#文件增加如下代码
JAVA_HOME=/opt/jdk-11.0.21
export PATH=${JAVA_HOME}/bin:$PATH

# 执行命令重新生效
. /etc/profile

#查看java版本
java -version
  1. 离线安装maven
# 下载
http://maven.apache.org/download.cgi
# 解压
tar zxvf apache-maven-3.9.6-bin.tar.gz

# 设置环境变量,Ctrl + O保存 |  Ctrl + x退出
sudo nano /etc/profile
# 添加如下配置
MAVEN=/opt/apache-maven-3.9.6
export PATH=${JAVA_HOME}/bin:${MAVEN}/bin:$PATH

# 配置文件生效
. /etc/profile

# 验证
mvn -v
  1. 浏览器中访问vscode 验证环境

image.png

  1. 修改maven配置
nano  /usr/share/maven/conf/settings.xml
# 根据自身情况修改,/usr/share/maven映射的/etc/maven
# 建议将/usr/share/maven/conf/settings.xml挂载出去
# 建议将settings.xml中localRepository私有仓库路径修改到挂载路径下
  1. 将容器重新打包为docker镜像
# 停止容器
docker stop <容器名称或容器ID>
# 容器打包镜像
docker commit <容器名称或容器ID> <新镜像名称>
# docker commit 命令只会将容器的文件系统快照保存为一个新的镜像,并不包括容器的数据卷或其他持久化数据
# 所有/config下文件不会打包到镜像中,需挂载出来持久存储

在使用 docker commit 命令创建镜像时,文件系统指的是容器的根文件系统,包括容器中的所有文件和目录。这包括容器中的操作系统文件、安装的软件、用户数据等。
具体来说,文件系统路径包括但不限于以下内容:

  • /bin, /sbin, /usr/bin, /usr/sbin: 可执行文件的路径。
  • /etc: 配置文件的路径。
  • /opt:用于存放可选的应用程序和软件包
  • /lib, /lib64, /usr/lib, /usr/lib64: 库文件的路径。
  • /usr/share: 共享数据的路径。
  • /var: 可变数据的路径,例如日志文件、数据库文件等。
  • /home: 用户主目录的路径。

当你使用 docker commit 命令创建镜像时,它会将容器的整个文件系统快照保存为一个新的镜像。这意味着镜像将包含容器中的所有文件和目录,以及容器的文件系统状态。
需要注意的是,docker commit 命令创建的镜像可能会变得很大,因为它包含了容器的完整文件系统。在生产环境中,建议使用 Dockerfile 和适当的构建步骤来创建镜像,以便更好地管理镜像的大小和内容。

  1. 导出镜像
docker save -o <目标文件名.tar> <镜像名称:标签>
  1. 加载镜像
docker load -i <导出的镜像文件.tar>
  1. 将镜像上传到harbor(建议上传到稳定的仓库,如阿里云仓库)
docker login <Harbor地址> -u <用户名> -p <密码>
docker tag <镜像名称:标签> <Harbor地址>/<项目名称>/<镜像名称:标签>
  1. 修改docker-compose.yaml文件volumes配置
version: "2.1"
services:
  code-server:
    image: 导出的本地镜像(上传后使用服务路径镜像)
    container_name: my-code-server-java
    environment:
      - PUID=1000
      - PGID=1000
      - DEFAULT_WORKSPACE=/config/workspace
      - PASSWORD=123456
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config
      - ./config/maven/conf:/opt/apache-maven-3.9.6/conf    
    ports:
      - 99:8443
    restart: unless-stopped

Dockerfile制作镜像

  1. 上述操作容器一旦重启会丢失,建议参考GitHub - linuxserver/docker-code-server重新制作镜像,Dockerfile.yml
FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy
# set version label
ARG BUILD_DATE
ARG VERSION
ARG CODE_RELEASE
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="aptalca"

# environment settings
ARG DEBIAN_FRONTEND="noninteractive"
ENV HOME="/config"

RUN \
  echo "**** install runtime dependencies ****" && \
  apt-get update && \
  apt-get install -y \
    git \
    jq \
    libatomic1 \
    nano \
    net-tools \
    netcat \
    sudo && \
  echo "**** install code-server ****" && \
  if [ -z ${CODE_RELEASE+x} ]; then \
    CODE_RELEASE=$(curl -sX GET https://api.github.com/repos/coder/code-server/releases/latest \
      | awk '/tag_name/{print $4;exit}' FS='[""]' | sed 's|^v||'); \
  fi && \
  mkdir -p /app/code-server && \
  curl -o \
    /tmp/code-server.tar.gz -L \
    "https://github.com/coder/code-server/releases/download/v${CODE_RELEASE}/code-server-${CODE_RELEASE}-linux-amd64.tar.gz" && \
  tar xf /tmp/code-server.tar.gz -C \
    /app/code-server --strip-components=1 && \
  echo "**** clean up ****" && \
  apt-get clean && \
  rm -rf \
    /config/* \
    /tmp/* \
    /var/lib/apt/lists/* \
    /var/tmp/*

# add local files
COPY ./root /

##########安装java相关环境########################
# 思路:将离线下载安装包拷贝进来安装,在删除安装包
#https://www.oracle.com/java/technologies/downloads/
#https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot
#https://maven.apache.org/index.html
# 安装OpenJDK 11
RUN apt-get update && \
    apt-get install -y openjdk-11-jdk

# 安装Maven
RUN apt-get install -y maven

# 安装Node.js
RUN apt-get install -y curl && \
    curl -sL https://deb.nodesource.com/setup_14.x | bash - && \
    apt-get install -y nodejs

# 设置环境变量
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ENV PATH=$PATH:$JAVA_HOME/bin
##################################

# ports and volumes
EXPOSE 8443
  1. 打包镜像
docker build -t <image_name>:<tag> .

git拉取项目

  1. 拉取项目

image.png

  1. 右击运行项目进入断点

image.png


http://www.niftyadmin.cn/n/5320293.html

相关文章

基于kafka_exporterprometheusgrafana的kafka监控实现

一、安装配置kafka_exporter 下载kafka_exporter wget http://*.*.*.45:10000/prometheus/kafka_exporter-1.4.2.linux-amd64.tar.gz tar -zxcf kafka_exporter-1.4.2.linux-amd64.tar.gz启动kafka_exporter ./kafka_exporter --kafka.server*.*.*.77:8423 --kafka.server*.…

在root账号下启动 elasticsearch

最新版本的 elasticsearch 不能用root账号运行&#xff0c;但是每次启动都要切换到其他账号下面&#xff0c;也是一件很麻烦的事情。下面写个脚本&#xff0c;以指定用户运行elasticsearch 假设服务器已经装好了elasticsearch&#xff0c;并且在 /usr/local/elasticsearch-8.1…

工作电压范围宽的国产音频限幅器D2761用于蓝牙音箱,输出噪声最大仅-90dBV

近年来随着相关技术的不断提升&#xff0c;音箱也逐渐从传统的音箱向智能音箱、无线音箱升级。同时在消费升级的背景下&#xff0c;智能音箱成为人们提升生活品质的方式之一。智能音箱是智能化和语音交互技术的产物&#xff0c;具有点歌、购物、控制智能家居设备等功能&#xf…

ubuntu 22 搭建git服务

第一步&#xff0c;安装git&#xff1a; sudo apt-get install git 创建用户信息 git config --global user.name soft 第二步&#xff0c;创建一个git用户&#xff0c;用来运行git服务&#xff1a; sudo adduser git 创建git仓库的存储目录、更改文件目录属主为代码仓库…

精确掌控并发:分布式环境下并发流量控制的设计与实现(二)

3. 固定窗口 参考&#xff1a;精确掌控并发&#xff1a;分布式环境下并发流量控制的设计与实现&#xff08;一&#xff09;-CSDN博客 4. 滑动窗口 滑动窗口算法是一种更为灵活的流量控制方案&#xff0c;它比固定窗口算法能更平滑地处理突发流量。在滑动窗口中&#xff0c;时…

Python 架构模式:第五章到第九章

第五章&#xff1a;高档和低档的 TDD 原文&#xff1a;5: TDD in High Gear and Low Gear 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 我们引入了服务层来捕获我们从工作应用程序中需要的一些额外的编排责任。服务层帮助我们清晰地定义我们的用例以及每个用例的工作…

提高iOS App开发效率的方法

引言 随着智能手机的普及&#xff0c;iOS App开发成为越来越受欢迎的技术领域之一。许多人选择开发iOS应用程序来满足市场需求&#xff0c;但是iOS App开发需要掌握一些关键技术和工具&#xff0c;以提高开发效率和质量。本文将介绍一些关键点&#xff0c;可以帮助你进行高效的…

不同activity项目创建时的区别

在 Android Studio 中创建项目时&#xff0c;可以选择创建不同类型的 Activity 作为应用程序的入口点。其中&#xff0c;包括 Empty Activity、Basic Activity、Empty Compose Activity 和 Basic Compose Activity 四种类型。 Empty Activity&#xff1a;这是最简单的 Activity…