diff --git a/docs/ides/gateway.md b/docs/ides/gateway.md index eb27158a45b2b..0d5549bafe92b 100644 --- a/docs/ides/gateway.md +++ b/docs/ides/gateway.md @@ -188,3 +188,151 @@ In networks that restrict access to the internet, you will need to leverage the JetBrains Client Installer to download and save the IDE clients locally. Please see the [JetBrains documentation for more information](https://www.jetbrains.com/help/idea/fully-offline-mode.html). + +### Configuration Steps + +The Coder team built a POC of the JetBrains Gateway Offline Mode solution. Here +are the steps we took (and "gotchas"): + +### 1. Deploy the server and install the Client Downloader + +We deployed a simple Ubuntu VM and installed the JetBrains Client Downloader +binary. Note that the server must be a Linux-based distribution. + +```shell +wget https://download.jetbrains.com/idea/code-with-me/backend/jetbrains-clients-downloader-linux-x86_64-1867.tar.gz && \ +tar -xzvf jetbrains-clients-downloader-linux-x86_64-1867.tar.gz +``` + +### 2. Install backends and clients + +JetBrains Gateway requires both a backend to be installed on the remote host +(your Coder workspace) and a client to be installed on your local machine. You +can host both on the server in this example. + +See here for the full +[JetBrains product list and builds](https://data.services.jetbrains.com/products). +Below is the full list of supported `--platforms-filter` values: + +```console +windows-x64, windows-aarch64, linux-x64, linux-aarch64, osx-x64, osx-aarch64 +``` + +To install both backends and clients, you will need to run two commands. + +**Backends** + +```shell +./jetbrains-clients-downloader-linux-x86_64-1867/bin4/jetbrains-clients-downloader --products-filter --build-filter --platforms-filter linux-x64,windows-x64,osx-x64 --download-backends ~/backends +``` + +**Clients** + +This is the same command as above, with the `--download-backends` flag removed. + +```shell +./jetbrains-clients-downloader-linux-x86_64-1867/bin4/jetbrains-clients-downloader --products-filter --build-filter --platforms-filter linux-x64,windows-x64,osx-x64 ~/clients +``` + +We now have both clients and backends installed. + +### 3. Install a web server + +You will need to run a web server in order to serve requests to the backend and +client files. We installed `nginx` and setup an FQDN and routed all requests to +`/`. See below: + +```console +server { + listen 80 default_server; + listen [::]:80 default_server; + + root /var/www/html; + + index index.html index.htm index.nginx-debian.html; + + server_name _; + + location / { + root /home/ubuntu; + } +} +``` + +Then, configure your DNS entry to point to the IP address of the server. For the +purposes of the POC, we did not configure TLS, although that is a supported +option. + +### 4. Add Client Files + +You will need to add the following files on your local machine in order for +Gateway to pull the backend and client from the server. + +```shell +$ cat productsInfoUrl # a path to products.json that was generated by the backend's downloader (it could be http://, https://, or file://) + +https://internal.site/backends//products.json + +$ cat clientDownloadUrl # a path for clients that you got from the clients' downloader (it could be http://, https://, or file://) + +https://internal.site/clients/ + +$ cat jreDownloadUrl # a path for JBR that you got from the clients' downloader (it could be http://, https://, or file://) + +https://internal.site/jre/ + +$ cat pgpPublicKeyUrl # a URL to the KEYS file that was downloaded with the clients builds. + +https://internal.site/KEYS +``` + +The location of these files will depend upon your local operating system: + +**macOS** + +```console +# User-specific settings +/Users/UserName/Library/Application Support/JetBrains/RemoteDev +# System-wide settings +/Library/Application Support/JetBrains/RemoteDev/ +``` + +**Linux** + +```console +# User-specific settings +$HOME/.config/JetBrains/RemoteDev +# System-wide settings +/etc/xdg/JetBrains/RemoteDev/ +``` + +**Windows** + +```console +# User-specific settings +HKEY_CURRENT_USER registry +# System-wide settings +HKEY_LOCAL_MACHINE registry +``` + +Additionally, create a string for each setting with its appropriate value in +`SOFTWARE\JetBrains\RemoteDev`: + +![Alt text](../images/gateway/jetbrains-offline-windows.png) + +### 5. Setup SSH connection with JetBrains Gateway + +With the server now configured, you can now configure your local machine to use +Gateway. Here is the documentation to +[setup SSH config via the Coder CLI](../ides.md#ssh-configuration). On the +Gateway side, follow our guide here until step 16. + +Instead of downloading from jetbrains.com, we will point Gateway to our server +endpoint. Select `Installation options...` and select `Use download link`. Note +that the URL must explicitly reference the archive file: + +![Offline Gateway](../images/gateway/offline-gateway.png) + +Click `Download IDE and Connect`. Gateway should now download the backend and +clients from the server into your remote workspace and local machine, +respectively. diff --git a/docs/images/gateway/jetbrains-offline-windows.png b/docs/images/gateway/jetbrains-offline-windows.png new file mode 100644 index 0000000000000..23e8d42014773 Binary files /dev/null and b/docs/images/gateway/jetbrains-offline-windows.png differ diff --git a/docs/images/gateway/offline-gateway.png b/docs/images/gateway/offline-gateway.png new file mode 100644 index 0000000000000..754c6c6ae568c Binary files /dev/null and b/docs/images/gateway/offline-gateway.png differ