Docker 部署vscode-server 远程开发java项目

大名鼎鼎的VSCode自然不需要多介绍了,作为一款跨平台的编辑器,配合各种插件作为主力IDE也不成问题。
最近看到vscode的服务器版,通过浏览器访问,编辑代码,运行,调试代码。决定试一试,vscode已经很轻量了,但是将其部署到云端,做到开箱即用,在这个疫情时代还是很有意义的。

基本部署

本文采用docker部署code-server,基于linuxserver的镜像,code-server

docker-compose.yaml

version: "2.1"
services:
  code-server:
    image: linuxserver/code-server
    container_name: code-server
    environment:
      - PUID=1026
      - PGID=100
      - DEFAULT_WORKSPACE=/workspace
      - PASSWORD=123456
      - TZ=Asia/Shanghai
    volumes:
      - /volume3/docker/vscode/config:/config
      - /volume3/docker/vscode/workspace:/workspace
    ports:
      - 8443:8443
    restart: unless-stopped

docker-compose up -d

浏览器方式 http://ip:8443 即可。
在这里插入图片描述
输入配置的密码就可以打开熟悉的vs-code的界面了
在这里插入图片描述

后面可以按照自己的喜好安装自己常用的插件了,大部分插件是支持在server端运行的。也可以把自己桌面端的vs-code的一些配置直接复制过来。
在这里插入图片描述

如果只是编辑代码,这样就可以了。但如果要运行代码,不管是后端服务,还是前端(nodejs,vue)开发,总会要运行很多服务,这时就需要访问容器内的端口。
我采用两种方案:
1.是预先暴露一组端口运行容器,运行调试各种代码时,将端口改为这组开发的端口内;
2.安装一个nginx,做反向代理,通过自定义域名+固定端口访问,这样配置灵活,做前端开发用反向代理解决跨域问题也比较方便。

在docker-compose.yaml里增加一组固定暴露的端口范围

    ports:
      - 8443:8443
	  - 30000-39000:30000-39000

配置开发环境

已经是现代的编辑器了,内置了git的支持,但是老旧的项目还是很多很多的。尝试把手头一个svn+java(jdk8)+spring的项目迁移到上面。

java项目

直接容器里安装依赖环境

docker exec -it -u root code-server bash

基础镜像基于ubuntu,以root登录容器,通过apt命令可以安装大部分依赖包。安装速度慢的,可以自行替换国内镜像源。
vs-code的java扩展需要jdk-11以上,而我们很多项目还停留在古老的jdk-8,所以需要两个都安装,启动vs-code使用11,编译运行项目使用jdk8.

apt update apt install openjdk-11-jdk openjdk-8-jdk subversion fontconfig libfreetype6
上面的操纵实际是修改的容器里的内容,一旦容器重新部署或者需要升级镜像,所有变化又丢失了,所以比较好的方法是重新编译新的镜像,并把jdk,maven这些放到宿主机上,并挂载到容器里,通过环境变量配置运行时,类似于我们本机开发手动配置运行编译环境。

根据自身需要以官方镜像为母版,构建自己的镜像,集成subversion到镜像

Dockerfile.yml

FROM linuxserver/code-server:latest
RUN set -eux; apt update;\
    apt install -y subversion fontconfig libfreetype6; \
    rm -rf /var/lib/apt/lists/*
ENV LANG C.UTF-8

docker build -t vs-code:my .

fontconfig,libfreetype6 是我的工程里的图像验证码采用的字体需要,各位要根据自己的需要安装。其实如果在linux服务器部署过自己的工程,需要什么系统依赖一般都能解决,大部分是运行时依赖。

手动安装jdk,maven等

下载jdk
https://www.oracle.com/java/technologies/downloads/
https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot
https://maven.apache.org/index.html

更新过后的

version: "2.1"
services:
  code-server:
    image: linuxserver/code-server
    container_name: code-server
    environment:
      - PUID=1026
      - PGID=100
      - DEFAULT_WORKSPACE=/workspace
      - PASSWORD=123456
      - TZ=Asia/Shanghai
      - JDK_HOME=/runtime/java/jdk-11.0.14.1
      - JAVA_HOME=/runtime/java/jdk-11.0.14.1
      - PATH=/app/code-server/lib/vscode/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/runtime/apache-maven-3.6.2-bin/apache-maven-3.6.2/bin
    volumes:
      - /volume3/docker/vscode/config:/config
      - /volume3/docker/vscode/workspace:/workspace
      - /volume3/docker/vscode/runtime:/runtime
    ports:
      - 8443:8443
    restart: unless-stopped

maven的运行环境可以在容易path中指定,也可以通过vscode的配置指定,这样可以安装多个版本,不同的工程指定不同的版本

vs-code的工程settings.json

{
    "java.configuration.runtimes": [
        {
          "name": "JavaSE-1.8",
          "path": "/runtime/java/openjdk-8",
          "default": true
        },
        {
          "name": "JavaSE-11",
          "path": "/runtime/java/jdk-11.0.14.1",
        },
    ],
    "java.configuration.updateBuildConfiguration": "automatic",
    "maven.terminal.customEnv": [
      {
         "environmentVariable": "JAVA_HOME",
         "value": "/runtime/java/openjdk-8",
      },{
         "environmentVariable": "MAVEN_OPTS",
         "value": "-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
      }
    ],
	"maven.executable.path": "/runtime/apache-maven-3.6.2-bin/apache-maven-3.6.2/bin/mvn",
    "maven.view": "hierarchical",
}
java远程调试

这是VS-Code原生就支持的,使用Java的远程debug功能,具体需要配置launch.json

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Debug java",
            "request": "attach",
            "hostName": "localhost",
            "port": "8000",
            "projectName": "platform-admin"
        }
    ]
}

调试工程采用jetty的maven插件,所以其实是Maven启动的java进程,所以需要配置Maven的运行参数,开启java的远程调试,这里的远程并不是指我们的浏览器和code-server,而是指code-server和在容器里运行的java进程通过socket进行调试,所以并不需要映射容器的8000端口。如果做过本机远程连服务器调试bug应该很熟悉,
在这里插入图片描述

nodejs vue项目

nodejs 下载
https://nodejs.org/en/download/

我的项目在nodejs v12.18.2 下运行良好,所以需要将下载的nodejs放到宿主机的runtime目录,映射到容器里,并把nodejs的bin目录配置到环境变量PATH中。

version: "2.1"
services:
  code-server:
    image: linuxserver/code-server
    container_name: code-server
    environment:
      - PUID=1026
      - PGID=100
      - DEFAULT_WORKSPACE=/workspace
      - PASSWORD=123456
      - TZ=Asia/Shanghai
      - JDK_HOME=/runtime/java/jdk-11.0.14.1
      - JAVA_HOME=/runtime/java/jdk-11.0.14.1
      - PATH=/app/code-server/lib/vscode/bin/remote-cli:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/runtime/apache-maven-3.6.2-bin/apache-maven-3.6.2/bin:/runtime/nodejs/node-v12.18.2-linux-x64/bin
    volumes:
      - /volume3/docker/vscode/config:/config
      - /volume3/docker/vscode/workspace:/workspace
      - /volume3/docker/vscode/runtime:/runtime
    ports:
      - 8443:8443
    restart: unless-stopped

前端项目是vue工程,编译打包其实很简单,但是要远程访问并且热更新,稍微麻烦点

vue会启动一个内嵌的web服务器,而热刷新则是vue会实时编译,浏览器通过websocket监听服务器的变化,进而刷新页面需要变化的内容或资源。
而且如果是全栈开发,通常还需要起一个API服务端,供前端调取各种接口。
这里引入另一个镜像,作为一个反向代理服务器,其实就是nginx,但是提供图形界面,使用方便,作为开发很合适。
类外需要自己通过hosts或者内容dns服务器,配置域名指向宿主机,而容器只要暴露几个接口,通过子域名,vhost的方式访问不同的服务。

docker run -d --network code-server_default -p 8080:8080 -p 8181:8181 --name nginx-proxy jlesage/nginx-proxy-manager:latest
8181 是管理端口
8080 是方向代理端口
在这里插入图片描述

  • 反向代理默认执行vue的内置服务端口,同时勾选websocket

在这里插入图片描述

  • 根路径指向vue内置服务,这样能访问到vue调试运行的js,css,html

  • 通过二级目录,执行api接口服务。

  • vue.config.js的配置,后面两项很关键

  devServer: {
    port: 6255,
    disableHostCheck: true,
    public: 'vue.xyztech.good365.net:9090'
  },
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于部署 Otter-Server,可以使用 Docker 镜像进行部署。具体步骤如下: 1. 下载 Otter-ServerDocker 镜像: ``` docker pull alibaba/otter ``` 2. 创建并启动容器: ``` docker run -d --name otter-server -p 8080:8080 -p 1099:1099 -p 2088:2088 \ -e JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xmx2g -Xms2g -Xmn512m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/heapdump" \ -v /yourpath/otter/data:/data -v /yourpath/otter/logs:/logs \ alibaba/otter ``` 其中,`/yourpath/otter/data` 和 `/yourpath/otter/logs` 是宿主机器上存储 Otter-Server 数据和日志的路径,可以自行修改。 3. 进入容器内部: ``` docker exec -it otter-server /bin/bash ``` 4. 修改 Otter-Server 配置文件: Otter-Server 的配置文件位于 `/data/otter/conf/otter.properties`,可以使用 `vi` 命令进行编辑。 在配置文件中,需要添加以下配置: ``` otter.amqp.addresses=amqp://guest:guest@<your-rabbitmq-host>:5672 otter.clickhouse.addresses=<your-clickhouse-host>:8123 ``` 其中,`<your-rabbitmq-host>` 和 `<your-clickhouse-host>` 分别为 RabbitMQ 和 ClickHouse 的地址。 5. 重启 Otter-Server: ``` /data/otter/bin/stop.sh /data/otter/bin/startup.sh ``` 至此,Otter-Server部署完成。 关于消费 RabbitMQ 并写入 ClickHouse 的问题,需要在 Otter-Server 中配置 Canal,具体步骤如下: 1. 在 Otter-Server 配置文件中添加 Canal 配置: ``` otter.canal.zookeeper.cluster=<your-zookeeper-host>:2181 ``` 其中,`<your-zookeeper-host>` 为 ZooKeeper 的地址。 2. 在 Otter-Server 中创建 Canal 实例: 使用 `otter-admin` 工具创建 Canal 实例,具体命令如下: ``` cd /data/otter/otter-admin/bin ./otter.sh create --type canal --mode memory --zoohost <your-zookeeper-host>:2181 --canalId <your-canal-id> --destination <your-destination> ``` 其中,`<your-canal-id>` 和 `<your-destination>` 分别为 Canal 实例的 ID 和名称。 3. 在 Otter-Server 中配置 Canal 映射关系: 使用 `otter-admin` 工具配置 Canal 映射关系,具体命令如下: ``` cd /data/otter/otter-admin/bin ./otter.sh canal --c <your-canal-id> --s <your-rabbitmq-exchange> --d <your-clickhouse-table> --m <your-field-mapping> ``` 其中,`<your-rabbitmq-exchange>` 和 `<your-clickhouse-table>` 分别为 RabbitMQ 的 Exchange 和 ClickHouse 的表名,`<your-field-mapping>` 为字段映射配置。 至此,Otter-Server 就可以消费 RabbitMQ 并将数据写入 ClickHouse 中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值