mirror of
https://github.com/coder/coder.git
synced 2026-06-04 05:28:20 +00:00
02ecf32afe
This PR comprehensively updates the offline deployments documentation to use more precise "air-gapped" terminology and improves consistency throughout the documentation. ## Changes Made ### Terminology Updates - **Title**: Changed from "Offline Deployments" to "Air-gapped Deployments" - **Summary**: Updated to prioritize "air-gapped" terminology and added "disconnected" to cover additional deployment scenarios - **Content**: Updated tutorial references to use "air-gapped" instead of "offline" - **Section headers**: - Changed "Offline container images" to "Air-gapped container images" - Changed "Offline docs" to "Air-gapped docs" - **Table headers**: Changed "Offline deployments" to "Air-gapped deployments" ### Navigation & URL Structure - **Navigation title**: Updated `docs/manifest.json` to show "Air-gapped Deployments" in sidebar - **Navigation description**: Updated to "Run Coder in air-gapped / disconnected / offline environments" - **File rename**: `docs/install/offline.md` → `docs/install/airgap.md` for consistency - **URL change**: `/install/offline` → `/install/airgap` - **Subsection anchors**: - `/install/offline#offline-docs` → `/install/airgap#airgap-docs` - `/install/offline#offline-container-images` → `/install/airgap#airgap-container-images` ### Internal Links & References Updated all internal documentation links: - `docs/admin/integrations/index.md` - `docs/admin/networking/index.md` - `docs/changelogs/v0.27.0.md` (including anchor reference) - `docs/tutorials/faqs.md` ### Backward Compatibility - **Redirects**: Added `docs/_redirects` with 301 redirects: - `/install/offline` → `/install/airgap` - `/install/offline#offline-docs` → `/install/airgap#airgap-docs` - `/install/offline#offline-container-images` → `/install/airgap#airgap-container-images` - **Content**: Maintains "offline" in the description for broader understanding - **Deep links**: All subsection anchors redirect properly to maintain existing bookmarks ## Rationale - **"Air-gapped"** is more precise and commonly used in enterprise/security contexts - **"Disconnected"** covers additional scenarios where networks may be temporarily or partially isolated - **Consistency** ensures filename, URL, navigation, content, and subsection anchors all align with the same terminology - **Backward compatibility** maintained through comprehensive redirects to prevent broken links at any level ## Testing - [x] Verified all internal links point to the new URL structure - [x] Confirmed navigation title updates correctly - [x] Ensured content accuracy is maintained - [x] Added redirects for backward compatibility (main page + subsections) - [x] Updated all cross-references in related documentation - [x] Verified subsection anchor redirects work properly - [x] Confirmed no unnecessary .md file redirects ## Result Complete terminology consistency across: - ✅ Page title and headers - ✅ Navigation and breadcrumbs - ✅ File names and URL structure - ✅ Internal documentation links - ✅ Table headers and section titles - ✅ Subsection anchors and deep links - ✅ Backward compatibility via comprehensive redirects --------- Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com> Co-authored-by: david-fraley <67079030+david-fraley@users.noreply.github.com>
142 lines
6.0 KiB
Markdown
142 lines
6.0 KiB
Markdown
# JFrog Artifactory Integration
|
|
|
|
Use Coder and JFrog Artifactory together to secure your development environments
|
|
without disturbing your developers' existing workflows.
|
|
|
|
This guide will demonstrate how to use JFrog Artifactory as a package registry
|
|
within a workspace.
|
|
|
|
## Requirements
|
|
|
|
- A JFrog Artifactory instance
|
|
- 1:1 mapping of users in Coder to users in Artifactory by email address or
|
|
username
|
|
- Repositories configured in Artifactory for each package manager you want to
|
|
use
|
|
|
|
## Provisioner Authentication
|
|
|
|
The most straight-forward way to authenticate your template with Artifactory is
|
|
by using our official Coder [modules](https://registry.coder.com). We publish
|
|
two type of modules that automate the JFrog Artifactory and Coder integration.
|
|
|
|
1. [JFrog-OAuth](https://registry.coder.com/modules/jfrog-oauth)
|
|
1. [JFrog-Token](https://registry.coder.com/modules/jfrog-token)
|
|
|
|
### JFrog-OAuth
|
|
|
|
This module is usable by JFrog self-hosted (on-premises) Artifactory as it
|
|
requires configuring a custom integration. This integration benefits from Coder's [external-auth](../external-auth/index.md) feature allows each user to authenticate with Artifactory using an OAuth flow and issues user-scoped tokens to each user.
|
|
|
|
To set this up, follow these steps:
|
|
|
|
1. Add the following to your Helm chart `values.yaml` for JFrog Artifactory. Replace `CODER_URL` with your JFrog Artifactory base URL:
|
|
|
|
```yaml
|
|
artifactory:
|
|
enabled: true
|
|
frontend:
|
|
extraEnvironmentVariables:
|
|
- name: JF_FRONTEND_FEATURETOGGLER_ACCESSINTEGRATION
|
|
value: "true"
|
|
access:
|
|
accessConfig:
|
|
integrations-enabled: true
|
|
integration-templates:
|
|
- id: "1"
|
|
name: "CODER"
|
|
redirect-uri: "https://CODER_URL/external-auth/jfrog/callback"
|
|
scope: "applied-permissions/user"
|
|
```
|
|
|
|
1. Create a new Application Integration by going to
|
|
`https://JFROG_URL/ui/admin/configuration/integrations/app-integrations/new` and select the
|
|
Application Type as the integration you created in step 1 or `Custom Integration` if you are using SaaS instance i.e. example.jfrog.io.
|
|
|
|
1. Add a new [external authentication](../external-auth/index.md) to Coder by setting these
|
|
environment variables in a manner consistent with your Coder deployment. Replace `JFROG_URL` with your JFrog Artifactory base URL:
|
|
|
|
```env
|
|
# JFrog Artifactory External Auth
|
|
CODER_EXTERNAL_AUTH_1_ID="jfrog"
|
|
CODER_EXTERNAL_AUTH_1_TYPE="jfrog"
|
|
CODER_EXTERNAL_AUTH_1_CLIENT_ID="YYYYYYYYYYYYYYY"
|
|
CODER_EXTERNAL_AUTH_1_CLIENT_SECRET="XXXXXXXXXXXXXXXXXXX"
|
|
CODER_EXTERNAL_AUTH_1_DISPLAY_NAME="JFrog Artifactory"
|
|
CODER_EXTERNAL_AUTH_1_DISPLAY_ICON="/icon/jfrog.svg"
|
|
CODER_EXTERNAL_AUTH_1_AUTH_URL="https://JFROG_URL/ui/authorization"
|
|
CODER_EXTERNAL_AUTH_1_SCOPES="applied-permissions/user"
|
|
```
|
|
|
|
1. Create or edit a Coder template and use the [JFrog-OAuth](https://registry.coder.com/modules/jfrog-oauth) module to configure the integration:
|
|
|
|
```tf
|
|
module "jfrog" {
|
|
count = data.coder_workspace.me.start_count
|
|
source = "registry.coder.com/modules/jfrog-oauth/coder"
|
|
version = "1.0.19"
|
|
agent_id = coder_agent.example.id
|
|
jfrog_url = "https://example.jfrog.io"
|
|
username_field = "username" # If you are using GitHub to login to both Coder and Artifactory, use username_field = "username"
|
|
|
|
package_managers = {
|
|
npm = ["npm", "@scoped:npm-scoped"]
|
|
go = ["go", "another-go-repo"]
|
|
pypi = ["pypi", "extra-index-pypi"]
|
|
docker = ["example-docker-staging.jfrog.io", "example-docker-production.jfrog.io"]
|
|
}
|
|
}
|
|
```
|
|
|
|
### JFrog-Token
|
|
|
|
This module makes use of the [Artifactory terraform
|
|
provider](https://registry.terraform.io/providers/jfrog/artifactory/latest/docs) and an admin-scoped token to create
|
|
user-scoped tokens for each user by matching their Coder email or username with
|
|
Artifactory. This can be used for both SaaS and self-hosted (on-premises)
|
|
Artifactory instances.
|
|
|
|
To set this up, follow these steps:
|
|
|
|
1. Get a JFrog access token from your Artifactory instance. The token must be an [admin token](https://registry.terraform.io/providers/jfrog/artifactory/latest/docs#access-token) with scope `applied-permissions/admin`.
|
|
|
|
1. Create or edit a Coder template and use the [JFrog-Token](https://registry.coder.com/modules/jfrog-token) module to configure the integration and pass the admin token. It is recommended to store the token in a sensitive Terraform variable to prevent it from being displayed in plain text in the terraform state:
|
|
|
|
```tf
|
|
variable "artifactory_access_token" {
|
|
type = string
|
|
sensitive = true
|
|
}
|
|
|
|
module "jfrog" {
|
|
source = "registry.coder.com/modules/jfrog-token/coder"
|
|
version = "1.0.30"
|
|
agent_id = coder_agent.example.id
|
|
jfrog_url = "https://XXXX.jfrog.io"
|
|
artifactory_access_token = var.artifactory_access_token
|
|
package_managers = {
|
|
npm = ["npm", "@scoped:npm-scoped"]
|
|
go = ["go", "another-go-repo"]
|
|
pypi = ["pypi", "extra-index-pypi"]
|
|
docker = ["example-docker-staging.jfrog.io", "example-docker-production.jfrog.io"]
|
|
}
|
|
}
|
|
```
|
|
|
|
> [!NOTE]
|
|
> The admin-level access token is used to provision user tokens and is never exposed to developers or stored in workspaces.
|
|
|
|
If you don't want to use the official modules, you can read through the [example template](https://github.com/coder/coder/tree/main/examples/jfrog/docker), which uses Docker as the underlying compute. The
|
|
same concepts apply to all compute types.
|
|
|
|
## Air-Gapped Deployments
|
|
|
|
See the [air-gapped deployments](../templates/extending-templates/modules.md#offline-installations) section for instructions on how to use Coder modules in an offline environment with Artifactory.
|
|
|
|
## Next Steps
|
|
|
|
- See the [full example Docker template](https://github.com/coder/coder/tree/main/examples/jfrog/docker).
|
|
|
|
- To serve extensions from your own VS Code Marketplace, check out
|
|
[code-marketplace](https://github.com/coder/code-marketplace#artifactory-storage).
|