Goland 远程 Linux 环境开发真香!


更多奇技淫巧欢迎订阅博客: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


你可能还喜欢

点击下方图片即可阅读

(译)Docker 中的 PID-1、孤儿、僵尸和信号

云原生是一种信仰 ????

码关注公众号

后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!

❤️给个「在看」,是对我最大的支持❤️
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值