- Notifications
You must be signed in to change notification settings - Fork928
docs: offline (air-gapped) installs#4644
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
2 commits Select commitHold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
145 changes: 145 additions & 0 deletionsdocs/install/offline.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
# Offline Deployments | ||
Coder can run in offline / air-gapped environments. | ||
## Building & push a custom Coder image | ||
First, build and push a container image extending our official image with the following: | ||
- Terraform [(supported versions)](https://github.com/coder/coder/blob/main/provisioner/terraform/serve.go#L24-L25) | ||
- CLI config (.tfrc) for Terraform referring to [external mirror](https://www.terraform.io/cli/config/config-file#explicit-installation-method-configuration) | ||
- [Terraform Providers](https://registry.terraform.io) for templates | ||
- These could also be specified via a volume mount (Docker) or [network mirror](https://www.terraform.io/internals/provider-network-mirror-protocol). See below for details. | ||
Here's an example: | ||
```Dockerfile | ||
# Dockerfile | ||
FROM ghcr.io/coder/coder:latest | ||
USER root | ||
RUN apk add curl unzip | ||
# Create directory for the Terraform CLI (and assets) | ||
RUN mkdir -p /opt/terraform | ||
# In order to run Coder airgapped or within private networks, | ||
# Terraform has to be bundled into the image in PATH or /opt. | ||
# | ||
# See https://github.com/coder/coder/blob/main/provisioner/terraform/serve.go#L24-L25 | ||
# for supported Terraform versions. | ||
ARG TERRAFORM_VERSION=1.3.0 | ||
RUN curl -LOs https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip \ | ||
&& unzip -o terraform_${TERRAFORM_VERSION}_linux_amd64.zip \ | ||
&& mv terraform /opt/terraform \ | ||
&& rm terraform_${TERRAFORM_VERSION}_linux_amd64.zip | ||
ENV PATH=/opt/terraform:${PATH} | ||
# Additionally, a Terraform mirror needs to be configured | ||
# to download the Terraform providers used in Coder templates. | ||
# | ||
# There are two options: | ||
# Option 1) Use a filesystem mirror. We can seed this at build-time | ||
# or by mounting a volume to /opt/terraform/plugins in the container. | ||
# https://developer.hashicorp.com/terraform/cli/config/config-file#filesystem_mirror | ||
# | ||
# Be sure to add all the providers you use in your templates to /opt/terraform/plugins | ||
RUN mkdir -p /opt/terraform/plugins | ||
ADD filesystem-mirror-example.tfrc /opt/terraform/config.tfrc | ||
# Optionally, we can "seed" the filesystem mirror with common providers. | ||
# Coder and Docker. Comment out lines 37-47 if you plan on only using a | ||
# volume or network mirror: | ||
RUN mkdir -p /opt/terraform/plugins/registry.terraform.io | ||
WORKDIR /opt/terraform/plugins/registry.terraform.io | ||
ARG CODER_PROVIDER_VERSION=0.5.3 | ||
RUN echo "Adding coder/coder v${CODER_PROVIDER_VERSION}" \ | ||
&& mkdir -p coder/coder && cd coder/coder \ | ||
&& curl -LOs https://github.com/coder/terraform-provider-coder/releases/download/v${CODER_PROVIDER_VERSION}/terraform-provider-coder_${CODER_PROVIDER_VERSION}_linux_amd64.zip | ||
ARG DOCKER_PROVIDER_VERSION=2.22.0 | ||
RUN echo "Adding kreuzwerker/docker v${DOCKER_PROVIDER_VERSION}" \ | ||
&& mkdir -p kreuzwerker/docker && cd kreuzwerker/docker \ | ||
&& curl -LOs https://github.com/kreuzwerker/terraform-provider-docker/releases/download/v${DOCKER_PROVIDER_VERSION}/terraform-provider-docker_${DOCKER_PROVIDER_VERSION}_linux_amd64.zip | ||
RUN chown -R coder:coder /opt/terraform/plugins | ||
WORKDIR /home/coder | ||
# Option 2) Use a network mirror. | ||
# https://developer.hashicorp.com/terraform/cli/config/config-file#network_mirror | ||
# Be sure uncomment line 56 and edit network-mirror-example.tfrc to | ||
# specify the HTTPS base URL of your mirror. | ||
# ADD network-mirror-example.tfrc /opt/terraform/config.tfrc | ||
USER coder | ||
# Use the tfrc file to inform | ||
ENV TF_CLI_CONFIG_FILE=/opt/terraform/config.tfrc | ||
``` | ||
```hcl | ||
# filesystem-mirror-example.tfrc | ||
provider_installation { | ||
filesystem_mirror { | ||
path = "/opt/terraform/plugins" | ||
} | ||
} | ||
``` | ||
```hcl | ||
# network-mirror-example.tfrc | ||
provider_installation { | ||
network_mirror { | ||
url = "https://terraform.example.com/providers/" | ||
} | ||
} | ||
``` | ||
## Run offline via Docker | ||
Follow our [docker-compose](./docker.md#run-coder-with-docker-compose) documentation and modify the docker-compose file to specify your custom Coder image. Additionally, you can add a volume mount to add providers to the filesystem mirror without re-building the image. | ||
First, make a create an empty plugins directory: | ||
```sh | ||
mkdir $HOME/plugins | ||
``` | ||
Next, add a volume mount to docker-compose.yaml: | ||
```sh | ||
vim docker-compose.yaml | ||
``` | ||
```yaml | ||
# docker-compose.yaml | ||
version: "3.9" | ||
services: | ||
coder: | ||
image: registry.example.com/coder:latest | ||
volumes: | ||
- ./plugins:/opt/registry.terraform.io | ||
# ... | ||
database: | ||
image: registry.example.com/postgres:13 | ||
# ... | ||
``` | ||
> The [terraform providers mirror](https://www.terraform.io/cli/commands/providers/mirror) command can be used to download the required plugins for a Coder template. This can be uploaded into the `plugins` directory on your offline server. | ||
## Run offline via Kubernetes | ||
We publish the Helm chart for download on [GitHub Releases](https://github.com/coder/coder/releases). Follow our [Kubernetes](./kubernetes.md) documentation and modify the Helm values to specify your custom Coder image. | ||
```yaml | ||
# values.yaml | ||
coder: | ||
image: | ||
repo: "registry.example.com/coder" | ||
tag: "latest" | ||
# ... | ||
``` |
5 changes: 5 additions & 0 deletionsdocs/manifest.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.