# JetBrains Gateway in an air-gapped environment 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). This page is an example that the Coder team used as a proof-of-concept (POC) of the JetBrains Gateway Offline Mode solution. We used Ubuntu on a virtual machine to test the steps. If you have a suggestion or encounter an issue, please [file a GitHub issue](https://github.com/coder/coder/issues/new?title=request%28docs%29%3A+jetbrains-airgapped+-+request+title+here%0D%0A&labels=["community","docs"]&body=doc%3A+%5Bjetbrains-airgapped%5D%28https%3A%2F%2Fcoder.com%2Fdocs%2Fuser-guides%2Fworkspace-access%2Fjetbrains%2Fjetbrains-airgapped%29%0D%0A%0D%0Aplease+enter+your+request+here%0D%0A). ## 1. Deploy the server and install the Client Downloader Install 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 mkdir ~/backends ./jetbrains-clients-downloader-linux-x86_64-1867/bin/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 mkdir ~/clients ./jetbrains-clients-downloader-linux-x86_64-1867/bin/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`: ![JetBrains offline - Windows](../../../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](../../../user-guides/workspace-access/index.md#configure-ssh). 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. ## Next steps - [Pre-install the JetBrains IDEs backend in your workspace](../../../admin/templates/extending-templates/jetbrains-gateway.md)