Goland 远程 Linux 环境开发真香!

2021年8月25日 307点热度 0人点赞 0条评论
图片

图片

更多奇技淫巧欢迎订阅博客:https://fuckcloudnative.io

前言

今天看到我的 Goland 可以更新了,于是简单看了一下 Release Note,发现了一个似乎期待已久的功能:Code With Me,这个功能有点类似于 VSCode 中的 Remote Developer[1],但是 Jetbrains 以自己的方式实现成另外一种形式,于是我就体验了一把,顺便写了一下入坑指南。

那首先,如果你需要玩这个功能,你得升级你的 IDE 到 2020.3 版本,这是当前最新的版本了。

1. 简单使用

简单使用其实就是 JetBrains 家的指导了,真的很简单了,只需要复制一个分享链接,然后给别人,别人在浏览器打开就可以了,后续直接就等待客户端安装之类的,不一会就连接上了,具体的步骤为:

共享方

  1. 安装 “Code With Me ”插件

    图片
  2. 在界面上点击共享按钮

    图片
  3. 然后选择分享的权限,复制分享链接,然后发给对方即可

    我是全选的,你可以按照自己的需求来。

    图片
  4. 在对方接入之后,记得 “同意”对方接入,这样双方就可以看到同样的项目界面了。

接入方

如果你想看别人的项目的话,那么基本上差不多,首先你得有别人的分享链接,然后:

  1. 安装 “Code With Me ”插件

    图片
  2. 在界面上点击加入别人的项目

    图片
  3. 等待别人确认就可以加入了。

2. 内网玩法

这个才是我的重头戏,默认情况下如“简单使用”中的介绍使用的都是公网的连接,速度很可能不尽人意,最好还是可以公司局域网才是真的好,所以这里我就介绍一下如何通过局域网来玩。

和公网的区别就在于局域网的需要你自己搭建一个服务器,然后大家通过这个私有的服务器接入,这同时也要求所有的参与者都要能访问这个服务器。自建服务器需要 Docker 和 Docker-Compose 支持,如果你本地没有安装的话,可以参考一下我的文章进行安装:

  • CentOS 安装 Docker[2]
  • Linux Install Compose[3]

还有一些关于 SSL 的部分,如果不了解,可以看一下我的这份指导:

  • Nginx SSL 双向认证,key 生成和配置[4]

自建 CWM 服务器

1、下载私有服务器

打开地址:https://surveys.jetbrains.com/s3/code-with-me-server,然后填写你的邮箱(这个邮箱无需紧要,因为填完就可以直接下载了,不需要接收邮件)

图片

2、目录结构

下载下来之后,我的文件目录是这样的:

$ ls -al
-rw-r--r-- 1 root root 54M Dec  4 16:25 lobby-server-linux-x64.1165.tar.gz
-rw-r--r-- 1 root root 14M Dec  4 16:25 ws-relayd1038

然后需要稍作调整:

$ mkdir relay
$ cp ws-relayd1038 relay/ws-relayd
$ mkdir lobby
$ cp lobby-server-linux-x64.1165.tar.gz lobby/lobby-server-linux-x64.tar.gz

3、设置 SSL 证书

接下来就是运行服务器了,我这台服务器的 IP 是 192.168.63.154,所以你需要替换后面的一些配置的 IP 地址为你自己的服务器 IP。

$ openssl ecparam -name secp384r1 -genkey -noout -out lobby/lobby_private.pem
$ openssl ec -in lobby/lobby_private.pem -pubout -out lobby/lobby_public.pem
$ openssl req -new -key lobby/lobby_private.pem -out lobby/lobby.csr -config lobby/ssl.conf
$ openssl x509 -req -days 365 -in lobby/lobby.csr -signkey lobby/lobby_private.pem -out lobby/lobby.crt -extensions v3_req -extfile lobby/ssl.conf
$ openssl ecparam -name secp384r1 -genkey -noout -out relay/relay_private.pem
$ openssl ec -in relay/relay_private.pem -pubout -out relay/relay_public.pem
$ openssl req -new -key relay/relay_private.pem -out relay/relay.csr -config relay/ssl.conf
$ openssl x509 -req -days 365 -in relay/relay.csr -signkey relay/relay_private.pem -out relay/relay.crt -extensions v3_req -extfile relay/ssl.conf

4、创建 relay Dockerfile

$ cat > relay/Dockerfile << EOF
FROM alpine:latest
ARG DISTRIBUTION_VERSION=""
COPY ws-relayd /ws-relayd
RUN chmod +x /ws-relayd
COPY relay_public.pem /relay_public.pem
CMD /ws-relayd -addr relay:3274 -jwt-key-type ecdsa -jwt-key-file /relay_public.pem
EOF

5、创建 lobby Dockerfile

$ cat > lobby/Dockerfile << EOF
FROM debian:buster-slim
ARG DISTRIBUTION_VERSION=""
ADD lobby-server-linux-x64.tar.gz /home/lobby-server
COPY lobby_private.pem /home/lobby-server/lobby_private.pem
RUN apt-get update && apt-get install -y unzip net-tools procps && apt-get clean
WORKDIR /home/lobby-server
ENV JAVA_HOME /home/lobby-server/jbr
ENV SERVER_PORT 2093
ENV BASE_URL https://lobby.cwm.internal
ENV ENABLED_FEATURES p2p_quic,direct_tcp,ws_relay
ENV FORCE_RELAY_URI wss://relay.cwm.internal
ENV RELAYS_ECDSA_JWT_KEY_FILE /home/lobby-server/lobby_private.pem
ENV REDIS_HOST redis
ENV REDIS_PORT 6379
ENTRYPOINT ["bin/lobby-server"]
EOF

6、创建 Nginx 配置

$ mkdir -p nginx/ssl
$ cp lobby/lobby.crt nginx/ssl/
$ cp lobby/lobby_private.pem nginx/ssl/
$ cp relay/relay.crt nginx/ssl/
$ cp relay/relay_private.pem nginx/ssl/
$ cat > nginx/nginx.conf << EOF
events {}
http {
server {
listen 443 ssl;
server_name relay.cwm.internal;
ssl_certificate /etc/ssl/nginx/relay.crt;
ssl_certificate_key /etc/ssl/nginx/relay_private.key;

location / {
proxy_pass http://relay:3274;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}

server {
listen 443 ssl;
server_name lobby.cwm.internal;
ssl_certificate /etc/ssl/nginx/lobby.crt;
ssl_certificate_key /etc/ssl/nginx/lobby_private.key;

location / {
proxy_pass http://lobby:2093;
}
}
}
EOF

7、运行服务

$ mkdir -p redis/data
$ cat > docker-compose.yaml << EOF
version: "3.8"
services:
 nginx:
   image: nginx:latest
   volumes:
     - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
     - ./nginx/ssl:/etc/ssl/nginx:ro
   ports:
     - 443:443
 relay:
   build:
     context: ./relay
     args:
       DISTRIBUTION_VERSION: 1.0
 lobby:
   build:
     context: ./lobby
     args:
       DISTRIBUTION_VERSION: 1.0
 redis:
   image: redis:latest
   command: ["redis-server""--appendonly""yes"]
   volumes:
     - ./redis/data:/data
EOF
$ docker-compose up

然后就坐等运行完毕了。

使用自建服务器

要使用自建服务器就非常简单了,只需要在设置页面中将自己的服务器地址填入即可:

图片

然后就和普通的一样使用了:

图片

参考

  • Code With Me administration guide[5]

参考资料

[1]

Remote Developer: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

[2]

CentOS 安装 Docker: https://liqiang.io/post/kubernetes-tutorial-part-2-Install-kubernetes-72bed544#安装前提

[3]

Linux Install Compose: https://docs.docker.com/compose/install/#install-compose

[4]

Nginx SSL 双向认证,key 生成和配置: https://liqiang.io/post/secure-nginx-with-bidirect-with-self-cert-keys

[5]

Code With Me administration guide: https://www.jetbrains.com/help/cwm/code-with-me-administration-guide.html


原文链接:https://liqiang.io/post/code-with-me-the-new-feature-for-jetbrains-17024c0d

图片

图片

你可能还喜欢

推荐阅读

1. 糟糕程序员的编程风格…你占几条?

2. 批处理框架Spring Batch这么强,你会用吗?

3. 推荐一款基于SpringBoot的接口快速开发框架

4. 常用的7款MySQL客户端工具,你值得拥有!

5. 都在聊DDD, 哪里超越了MVC?

6. 程序员缺乏经验的 7 种表现~
图片
6010Goland 远程 Linux 环境开发真香!

root

这个人很懒,什么都没留下

文章评论