diff --git a/README.md b/README.md
index 6abd1296fff6d..8e54094e3d455 100644
--- a/README.md
+++ b/README.md
@@ -52,7 +52,7 @@ You can modify the installation process by including flags. Run the help command
curl -L https://coder.com/install.sh | sh -s -- --help
```
-> See [install](docs/install.md) for additional methods.
+> See [install](docs/install) for additional methods.
Once installed, you can start a production deployment1 with a single command:
diff --git a/coder.env b/coder.env
index 5a2982822f621..c7c880eb57f64 100644
--- a/coder.env
+++ b/coder.env
@@ -1,9 +1,18 @@
-# Run "coder server --help" for flag information.
+# Coder must be reachable from an external URL
+# for users and workspaces to connect.
+
+# Option 1) Enable CODER_TUNNEL to generate a
+# unique *. try.coder.com access URL
+CODER_TUNNEL=false
+
+# Option 2) Set an access URL
+# e.g. https://coder.example.com
CODER_ACCESS_URL=
+
CODER_ADDRESS=
CODER_PG_CONNECTION_URL=
CODER_TLS_CERT_FILE=
CODER_TLS_ENABLE=
CODER_TLS_KEY_FILE=
-# Generate a unique *.try.coder.app access URL
-CODER_TUNNEL=false
+
+# Run "coder server --help" for flag information.
diff --git a/docs/install/auth.md b/docs/admin/auth.md
similarity index 100%
rename from docs/install/auth.md
rename to docs/admin/auth.md
diff --git a/docs/install/configure.md b/docs/admin/configure.md
similarity index 52%
rename from docs/install/configure.md
rename to docs/admin/configure.md
index ff69cef90d9b9..b6dc217cda8f7 100644
--- a/docs/install/configure.md
+++ b/docs/admin/configure.md
@@ -1,10 +1,27 @@
-# Configure
-
-This article documents the Coder server's primary configuration variables. For a full list
+Coder server's primary configuration is done via environment variables. For a full list
of the options, run `coder server --help` on the host.
-Once you've [installed](../install.md) Coder, you can configure the server by setting the following
-variables in `/etc/coder.d/coder.env`:
+## Tunnel
+
+For proof-of-concept deployments, you can set `CODER_TUNNEL=true` to run Coder on a unique `*.try.coder.app` URL.
+This is a quick way to allow users and workspaces outside your LAN to connect to Coder.
+
+## Access URL
+
+`CODER_ACCESS_URL` is required if you are not using the tunnel. Set this to the external URL
+that users and workspaces use to connect to Coder (e.g. https://coder.example.com). This
+should not be localhost.
+
+## PostgreSQL Database
+
+Coder uses a PostgreSQL database to store users, workspace metadata, and other deployment information.
+Use `CODER_PG_CONNECTION_URL` to set the database that Coder connects to. If unset, PostgreSQL binaries will be
+downloaded from Maven (https://repo1.maven.org/maven2) and store all data in the config root.
+
+## System packages
+
+If you've installed Coder via a [system package](../install/packages.md) Coder, you can
+configure the server by setting the following variables in `/etc/coder.d/coder.env`:
```sh
# String. Specifies the external URL (HTTP/S) to access Coder.
@@ -32,17 +49,22 @@ CODER_TLS_CERT_FILE=
CODER_TLS_KEY_FILE=
```
-## Run Coder
-
-Now, run Coder as a system service on the host:
+To run Coder as a system service on the host:
```sh
# Use systemd to start Coder now and on reboot
sudo systemctl enable --now coder
+
# View the logs to ensure a successful start
journalctl -u coder.service -b
```
+To restart Coder after applying system changes:
+
+```sh
+sudo systemctl restart Coder
+```
+
## Up Next
- [Get started using Coder](../quickstart.md).
diff --git a/docs/admin/index.md b/docs/admin/index.md
new file mode 100644
index 0000000000000..9a7ca1bf45be9
--- /dev/null
+++ b/docs/admin/index.md
@@ -0,0 +1,5 @@
+Get started with Coder administration:
+
+
+ This page is rendered on https://coder.com/docs/coder-oss/admin. Refer to the other documents in the `admin/` directory.
+
diff --git a/docs/install/upgrade.md b/docs/admin/upgrade.md
similarity index 97%
rename from docs/install/upgrade.md
rename to docs/admin/upgrade.md
index 1d553645c7e05..4f5ae6e982a18 100644
--- a/docs/install/upgrade.md
+++ b/docs/admin/upgrade.md
@@ -10,7 +10,7 @@ This article walks you through how to upgrade your Coder server.
To upgrade your Coder server, simply reinstall Coder using your original method
-of [install](../install.md).
+of [install](../install).
## Via install.sh
diff --git a/docs/users.md b/docs/admin/users.md
similarity index 100%
rename from docs/users.md
rename to docs/admin/users.md
diff --git a/docs/install.md b/docs/install.md
deleted file mode 100644
index 1bc5d9181dc27..0000000000000
--- a/docs/install.md
+++ /dev/null
@@ -1,265 +0,0 @@
-# Install
-
-## install.sh
-
-The easiest way to install Coder is to use our [install script](https://github.com/coder/coder/blob/main/install.sh) for Linux and macOS.
-
-To install, run:
-
-```bash
-curl -fsSL https://coder.com/install.sh | sh
-```
-
-You can preview what occurs during the install process:
-
-```bash
-curl -fsSL https://coder.com/install.sh | sh -s -- --dry-run
-```
-
-You can modify the installation process by including flags. Run the help command for reference:
-
-```bash
-curl -fsSL https://coder.com/install.sh | sh -s -- --help
-```
-
-## System packages
-
-Coder publishes the following system packages [in GitHub releases](https://github.com/coder/coder/releases):
-
-- .deb (Debian, Ubuntu)
-- .rpm (Fedora, CentOS, RHEL, SUSE)
-- .apk (Alpine)
-
-Once installed, you can run Coder as a system service:
-
-```sh
- # Set up an external access URL or enable CODER_TUNNEL
-sudo vim /etc/coder.d/coder.env
-# Use systemd to start Coder now and on reboot
-sudo systemctl enable --now coder
-# View the logs to ensure a successful start
-journalctl -u coder.service -b
-```
-
-## docker-compose
-
-Before proceeding, please ensure that you have both Docker and the [latest version of
-Coder](https://github.com/coder/coder/releases) installed.
-
-> See our [docker-compose](https://github.com/coder/coder/blob/main/docker-compose.yaml) file
-> for additional information.
-
-1. Clone the `coder` repository:
-
- ```console
- git clone https://github.com/coder/coder.git
- ```
-
-2. Navigate into the `coder` folder and run `docker-compose up`:
-
- ```console
- cd coder
- # Coder will bind to localhost:7080.
- # You may use localhost:7080 as your access URL
- # when using Docker workspaces exclusively.
- # CODER_ACCESS_URL=http://localhost:7080
- # Otherwise, an internet accessible access URL
- # is required.
- CODER_ACCESS_URL=https://coder.mydomain.com
- docker-compose up
- ```
-
- Otherwise, you can start the service:
-
- ```console
- cd coder
- docker-compose up
- ```
-
- Alternatively, if you would like to start a **temporary deployment**:
-
- ```console
- docker run --rm -it \
- -e CODER_DEV_MODE=true \
- -v /var/run/docker.sock:/var/run/docker.sock \
- ghcr.io/coder/coder:v0.5.10
- ```
-
-3. Follow the on-screen instructions to create your first template and workspace
-
-If the user is not in the Docker group, you will see the following error:
-
-```sh
-Error: Error pinging Docker server: Got permission denied while trying to connect to the Docker daemon socket
-```
-
-The default docker socket only permits connections from `root` or members of the `docker`
-group. Remedy like this:
-
-```sh
-# replace "coder" with user running coderd
-sudo usermod -aG docker coder
-grep /etc/group -e "docker"
-sudo systemctl restart coder.service
-```
-
-## Kubernetes via Helm
-
-Before proceeding, please ensure that you have both Helm 3.5+ and the
-[latest version of Coder](https://github.com/coder/coder/releases) installed.
-You will also need to have a Kubernetes cluster running K8s 1.19+.
-
-> See our [Helm README](https://github.com/coder/coder/blob/main/helm#readme)
-> file for additional information. Check the
-> [values.yaml](https://github.com/coder/coder/blob/main/helm/values.yaml) file
-> for a list of supported Helm values and their defaults.
-
-> ⚠️ **Warning**: Helm support is new and not yet complete. There may be changes
-> to the Helm chart between releases which require manual values updates. Please
-> file an issue if you run into any issues.
->
-> Additionally, the Helm chart does not currently automatically configure a
-> Service Account and workspace template for use in Coder. See
-> [#3265](https://github.com/coder/coder/issues/3265).
-
-1. Create a namespace for Coder, such as `coder`:
-
- ```console
- $ kubectl create namespace coder
- ```
-
-1. Create a PostgreSQL deployment. Coder does not manage a database server for
- you.
-
- - If you're in a public cloud such as
- [Google Cloud](https://cloud.google.com/sql/docs/postgres/),
- [AWS](https://aws.amazon.com/rds/postgresql/),
- [Azure](https://docs.microsoft.com/en-us/azure/postgresql/), or
- [DigitalOcean](https://www.digitalocean.com/products/managed-databases-postgresql),
- you can use the managed PostgreSQL offerings they provide. Make sure that
- the PostgreSQL service is running and accessible from your cluster. It
- should be in the same network, same project, etc.
-
- - You can install Postgres manually on your cluster using the
- [Bitnami PostgreSQL Helm chart](https://github.com/bitnami/charts/tree/master/bitnami/postgresql#readme). There are some
- [helpful guides](https://phoenixnap.com/kb/postgresql-kubernetes) on the
- internet that explain sensible configurations for this chart. Example:
-
- ```console
- $ helm repo add bitnami https://charts.bitnami.com/bitnami
- $ helm install postgres bitnami/postgresql \
- --namespace coder \
- --set auth.username=coder \
- --set auth.password=coder \
- --set auth.database=coder \
- --set persistence.size=10Gi
- ```
-
- The cluster-internal DB URL for the above database is:
- ```
- postgres://coder:coder@postgres-postgresql.coder.svc.cluster.local:5432/coder?sslmode=disable
- ```
-
- > Ensure you set up periodic backups so you don't lose data.
-
- - You can use
- [Postgres operator](https://github.com/zalando/postgres-operator) to
- manage PostgreSQL deployments on your Kubernetes cluster.
-
-1. Download the latest `coder_helm` package from
- [GitHub releases](https://github.com/coder/coder/releases).
-
-1. Create a `values.yaml` with the configuration settings you'd like for your
- deployment. For example:
-
- ```yaml
- coder:
- # You can specify any environment variables you'd like to pass to Coder
- # here. Coder consumes environment variables listed in
- # `coder server --help`, and these environment variables are also passed
- # to the workspace provisioner (so you can consume them in your Terraform
- # templates for auth keys etc.).
- #
- # Please keep in mind that you should not set `CODER_ADDRESS`,
- # `CODER_TLS_ENABLE`, `CODER_TLS_CERT_FILE` or `CODER_TLS_KEY_FILE` as
- # they are already set by the Helm chart and will cause conflicts.
- env:
- - name: CODER_ACCESS_URL
- value: "https://coder.example.com"
- - name: CODER_PG_CONNECTION_URL
- valueFrom:
- secretKeyRef:
- # You'll need to create a secret called coder-db-url with your
- # Postgres connection URL like:
- # postgres://coder:password@postgres:5432/coder?sslmode=disable
- name: coder-db-url
- key: url
-
- # This env variable controls whether or not to auto-import the
- # "kubernetes" template on first startup. This will not work unless
- # coder.serviceAccount.workspacePerms is true.
- - name: CODER_TEMPLATE_AUTOIMPORT
- value: "kubernetes"
-
- tls:
- secretName: my-tls-secret-name
- ```
-
- > You can view our
- > [Helm README](https://github.com/coder/coder/blob/main/helm#readme) for
- > details on the values that are available, or you can view the
- > [values.yaml](https://github.com/coder/coder/blob/main/helm/values.yaml)
- > file directly.
-
-1. Run the following commands to install the chart in your cluster.
-
- ```console
- $ helm install coder ./coder_helm_x.y.z.tgz \
- --namespace coder \
- --values values.yaml
- ```
-
-You can watch Coder start up by running `kubectl get pods`. Once Coder has
-started, the `coder-*` pods should enter the `Running` state.
-
-You can view Coder's logs by getting the pod name from `kubectl get pods` and
-then running `kubectl logs `. You can also view these logs in your
-Cloud's log management system if you are using managed Kubernetes.
-
-To upgrade Coder in the future, you can run the following command with a new `coder_helm_x.y.z.tgz` file from GitHub releases:
-
-```console
-$ helm upgrade coder ./coder_helm_x.y.z.tgz \
- --namespace coder \
- -f values.yaml
-```
-
-## Manual
-
-We publish self-contained .zip and .tar.gz archives in [GitHub releases](https://github.com/coder/coder/releases). The archives bundle `coder` binary.
-
-1. Download the [release archive](https://github.com/coder/coder/releases) appropriate for your operating system
-
-1. Unzip the folder you just downloaded, and move the `coder` executable to a location that's on your `PATH`
-
- ```sh
- # ex. macOS and Linux
- mv coder /usr/local/bin
- ```
-
- > Windows users: see [this guide](https://answers.microsoft.com/en-us/windows/forum/all/adding-path-variable/97300613-20cb-4d85-8d0e-cc9d3549ba23) for adding folders to `PATH`.
-
-1. Start a Coder server
-
- ```sh
- # Automatically sets up an external access URL on *.try.coder.app
- coder server --tunnel
-
- # Requires a PostgreSQL instance and external access URL
- coder server --postgres-url --access-url
- ```
-
-## Up Next
-
-- Learn how to [configure](./install/configure.md) Coder.
-- Learn about [upgrading](./install/upgrade.md) Coder.
diff --git a/docs/install/binary.md b/docs/install/binary.md
new file mode 100644
index 0000000000000..fe360f1b0c0a5
--- /dev/null
+++ b/docs/install/binary.md
@@ -0,0 +1,34 @@
+Coder publishes self-contained .zip and .tar.gz archives in [GitHub releases](https://github.com/coder/coder/releases). The archives bundle `coder` binary.
+
+1. Download the [release archive](https://github.com/coder/coder/releases) appropriate for your operating system
+
+1. Unzip the folder you just downloaded, and move the `coder` executable to a location that's on your `PATH`
+
+ ```sh
+ # ex. macOS and Linux
+ mv coder /usr/local/bin
+ ```
+
+ > Windows users: see [this guide](https://answers.microsoft.com/en-us/windows/forum/all/adding-path-variable/97300613-20cb-4d85-8d0e-cc9d3549ba23) for adding folders to `PATH`.
+
+1. Start a Coder server
+
+ ```sh
+ # Automatically sets up an external access URL on *.try.coder.app
+ coder server --tunnel
+
+ # Requires a PostgreSQL instance and external access URL
+ coder server --postgres-url --access-url
+ ```
+
+ > Set `CODER_ACCESS_URL` to the external URL that users and workspaces will use to
+ > connect to Coder. This is not required if you are using the tunnel. Learn more
+ > about Coder's [configuration options](../admin/configure.md).
+
+1. Visit the Coder URL in the logs to set up your first account, or use the CLI.
+
+## Next steps
+
+- [Quickstart](../quickstart.md)
+- [Configuring Coder](../admin/configure.md)
+- [Templates](../templates.md)
diff --git a/docs/install/docker.md b/docs/install/docker.md
new file mode 100644
index 0000000000000..4a90c3ce8f47c
--- /dev/null
+++ b/docs/install/docker.md
@@ -0,0 +1,84 @@
+You can install and run Coder using the official Docker images published on [GitHub Container Registry](https://github.com/coder/coder/pkgs/container/coder).
+
+## Requirements
+
+Docker is required. See the [official installation documentation](https://docs.docker.com/install/).
+
+## Run Coder with built-in database and tunnel (quick)
+
+For proof-of-concept deployments, you can run a complete Coder instance with
+with the following command:
+
+```sh
+export CODER_DATA=$HOME/.config/coderv2-docker
+mkdir -p $CODER_DATA
+docker run --rm -it \
+ -e CODER_TUNNEL=true \
+ -v $CODER_DATA:/home/coder/.config \
+ -v /var/run/docker.sock:/var/run/docker.sock \
+ ghcr.io/coder/coder:latest
+```
+
+Coder configuration is defined via environment variables.
+Learn more about Coder's [configuration options](../admin/configure.md).
+
+## Run Coder with access URL and external PostgreSQL (recommended)
+
+For production deployments, we recommend using an external PostgreSQL database.
+Set `ACCESS_URL` to the external URL that users and workspaces will use to
+connect to Coder.
+
+```sh
+docker run --rm -it \
+ -e CODER_ACCESS_URL="https://coder.example.com" \
+ -e CODER_PG_CONNECTION_URL="postgresql://username:password@database/coder" \
+ -v /var/run/docker.sock:/var/run/docker.sock \
+ ghcr.io/coder/coder:latest
+```
+
+Coder configuration is defined via environment variables.
+Learn more about Coder's [configuration options](../admin/configure.md).
+
+## Run Coder with docker-compose
+
+Coder's publishes a [docker-compose example](../../docker-compose.yaml) which includes
+an PostgreSQL container and volume.
+
+1. Install [Docker Compose](https://docs.docker.com/compose/install/)
+
+2. Clone the `coder` repository:
+
+ ```console
+ git clone https://github.com/coder/coder.git
+ ```
+
+3. Start Coder with `docker-compose up`:
+
+ In order to use cloud-based templates (e.g. Kubernetes, AWS), you must set `CODER_ACCESS_URL` to the external URL that users and workspaces will use to connect to Coder.
+
+ ```console
+ cd coder
+
+ CODER_ACCESS_URL=https://coder.example.com
+ docker-compose up
+ ```
+
+ > Without `CODER_ACCESS_URL` set, Coder will bind to `localhost:7080`. This will only work for Docker-based templates.
+
+4. Follow the on-screen instructions log in and create your first template and workspace
+
+## Troubleshooting
+
+### Docker-based workspace is stuck in "Connecting..."
+
+Ensure you have an externally-reachable `CODER_ACCESS_URL` set. See [troubleshooting templates](../templates.md#creating-and-troubleshooting-templates) for more steps.
+
+### Permission denied while trying to connect to the Docker daemon socket
+
+See Docker's official documentation to [Manage Docker as a non-root user](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)
+
+## Next steps
+
+- [Quickstart](../quickstart.md)
+- [Configuring Coder](../admin/configure.md)
+- [Templates](../templates.md)
diff --git a/docs/install/index.md b/docs/install/index.md
new file mode 100644
index 0000000000000..f301b41bec8f2
--- /dev/null
+++ b/docs/install/index.md
@@ -0,0 +1,5 @@
+There are a number of different methods to install Coder:
+
+
+ This page is rendered on https://coder.com/docs/coder-oss/install. Refer to the other documents in the `install/` directory for per-platform instructions.
+
diff --git a/docs/install/install.sh.md b/docs/install/install.sh.md
new file mode 100644
index 0000000000000..5ed142af48710
--- /dev/null
+++ b/docs/install/install.sh.md
@@ -0,0 +1,27 @@
+The easiest way to install Coder is to use our [install script](https://github.com/coder/coder/blob/main/install.sh) for Linux and macOS.
+
+To install, run:
+
+```bash
+curl -fsSL https://coder.com/install.sh | sh
+```
+
+You can preview what occurs during the install process:
+
+```bash
+curl -fsSL https://coder.com/install.sh | sh -s -- --dry-run
+```
+
+You can modify the installation process by including flags. Run the help command for reference:
+
+```bash
+curl -fsSL https://coder.com/install.sh | sh -s -- --help
+```
+
+After installing, use the instructions in your terminal to start the Coder server and create your first account.
+
+## Next steps
+
+- [Quickstart](../quickstart.md)
+- [Configuring Coder](../admin/configure.md)
+- [Templates](../templates.md)
diff --git a/docs/install/kubernetes.md b/docs/install/kubernetes.md
new file mode 100644
index 0000000000000..637f622ec2e9c
--- /dev/null
+++ b/docs/install/kubernetes.md
@@ -0,0 +1,161 @@
+## Requirements
+
+Before proceeding, please ensure that you have both Helm 3.5+ and the
+[latest version of Coder](https://github.com/coder/coder/releases) installed.
+You will also need to have a Kubernetes cluster running K8s 1.19+.
+
+## Install Coder with Helm
+
+> **Warning**: Helm support is new and not yet complete. There may be changes
+> to the Helm chart between releases which require manual values updates. Please
+> file an issue if you run into any issues.
+
+1. Create a namespace for Coder, such as `coder`:
+
+ ```console
+ $ kubectl create namespace coder
+ ```
+
+1. Create a PostgreSQL deployment. Coder does not manage a database server for
+ you.
+
+ - If you're in a public cloud such as
+ [Google Cloud](https://cloud.google.com/sql/docs/postgres/),
+ [AWS](https://aws.amazon.com/rds/postgresql/),
+ [Azure](https://docs.microsoft.com/en-us/azure/postgresql/), or
+ [DigitalOcean](https://www.digitalocean.com/products/managed-databases-postgresql),
+ you can use the managed PostgreSQL offerings they provide. Make sure that
+ the PostgreSQL service is running and accessible from your cluster. It
+ should be in the same network, same project, etc.
+
+ - You can install Postgres manually on your cluster using the
+ [Bitnami PostgreSQL Helm chart](https://github.com/bitnami/charts/tree/master/bitnami/postgresql#readme). There are some
+ [helpful guides](https://phoenixnap.com/kb/postgresql-kubernetes) on the
+ internet that explain sensible configurations for this chart. Example:
+
+ ```sh
+ # Install PostgreSQL
+ helm repo add bitnami https://charts.bitnami.com/bitnami
+ helm install coder-db bitnami/postgresql \
+ --namespace coder \
+ --set auth.username=coder \
+ --set auth.password=coder \
+ --set auth.database=coder \
+ --set persistence.size=10Gi
+ ```
+
+ The cluster-internal DB URL for the above database is:
+
+ ```
+ postgres://coder:coder@postgres-postgresql.coder.svc.cluster.local:5432/coder?sslmode=disable
+ ```
+
+ > Ensure you set up periodic backups so you don't lose data.
+
+ - You can use
+ [Postgres operator](https://github.com/zalando/postgres-operator) to
+ manage PostgreSQL deployments on your Kubernetes cluster.
+
+1. Download the latest `coder_helm` package from
+ [GitHub releases](https://github.com/coder/coder/releases).
+
+1. Create a secret with the database URL:
+
+ ```sh
+ # Uses Bitnami PostgreSQL example. If you have another database,
+ # change to the proper URL.
+ kubectl create secret generic coder-db-url -n coder \
+ --from-literal=url="postgres://coder:coder@postgres-postgresql.coder.svc.cluster.local:5432/coder?sslmode=disable"
+ ```
+
+1. Create a `values.yaml` with the configuration settings you'd like for your
+ deployment. For example:
+
+ ```yaml
+ coder:
+ # You can specify any environment variables you'd like to pass to Coder
+ # here. Coder consumes environment variables listed in
+ # `coder server --help`, and these environment variables are also passed
+ # to the workspace provisioner (so you can consume them in your Terraform
+ # templates for auth keys etc.).
+ #
+ # Please keep in mind that you should not set `CODER_ADDRESS`,
+ # `CODER_TLS_ENABLE`, `CODER_TLS_CERT_FILE` or `CODER_TLS_KEY_FILE` as
+ # they are already set by the Helm chart and will cause conflicts.
+ env:
+ - name: CODER_ACCESS_URL
+ value: "https://coder.example.com"
+ - name: CODER_PG_CONNECTION_URL
+ valueFrom:
+ secretKeyRef:
+ # You'll need to create a secret called coder-db-url with your
+ # Postgres connection URL like:
+ # postgres://coder:password@postgres:5432/coder?sslmode=disable
+ name: coder-db-url
+ key: url
+
+ # This env variable controls whether or not to auto-import the
+ # "kubernetes" template on first startup. This will not work unless
+ # coder.serviceAccount.workspacePerms is true.
+ - name: CODER_TEMPLATE_AUTOIMPORT
+ value: "kubernetes"
+
+ #tls:
+ # secretName: my-tls-secret-name
+ ```
+
+ > You can view our
+ > [Helm README](https://github.com/coder/coder/blob/main/helm#readme) for
+ > details on the values that are available, or you can view the
+ > [values.yaml](https://github.com/coder/coder/blob/main/helm/values.yaml)
+ > file directly.
+
+1. Run the following commands to install the chart in your cluster.
+
+ ```sh
+ helm install coder ./coder_helm_x.y.z.tgz \
+ --namespace coder \
+ --values values.yaml
+ ```
+
+ You can watch Coder start up by running `kubectl get pods`. Once Coder has
+ started, the `coder-*` pods should enter the `Running` state.
+
+1. Log in to Coder
+
+ Use `kubectl get svc -n coder` to get the IP address of the
+ LoadBalancer. Visit this in the browser to set up your first account.
+
+ If you do not have a domain, you should set `CODER_ACCESS_URL`
+ to this URL in the Helm chart and upgrade Coder (see below).
+ This allows workspaces to connect to the proper Coder URL.
+
+## Upgrading Coder via Helm
+
+To upgrade Coder in the future or change values,
+you can run the following command with a new `coder_helm_x.y.z.tgz` file from GitHub releases:
+
+```console
+$ helm upgrade coder ./coder_helm_x.y.z.tgz \
+ --namespace coder \
+ -f values.yaml
+```
+
+## Troubleshooting
+
+You can view Coder's logs by getting the pod name from `kubectl get pods` and then running `kubectl logs `. You can also
+view these logs in your
+Cloud's log management system if you are using managed Kubernetes.
+
+### Kubernetes-based workspace is stuck in "Connecting..."
+
+Ensure you have an externally-reachable `CODER_ACCESS_URL` set in your helm chart. If you do not have a domain set up,
+this should be the IP address of Coder's LoadBalancer (`kubectl get svc -n coder`).
+
+See [troubleshooting templates](../templates.md#creating-and-troubleshooting-templates) for more steps.
+
+## Next steps
+
+- [Quickstart](../quickstart.md)
+- [Configuring Coder](../admin/configure.md)
+- [Templates](../templates.md)
diff --git a/docs/install/packages.md b/docs/install/packages.md
new file mode 100644
index 0000000000000..972dd9908aef4
--- /dev/null
+++ b/docs/install/packages.md
@@ -0,0 +1,42 @@
+Coder publishes the following system packages [in GitHub releases](https://github.com/coder/coder/releases):
+
+- .deb (Debian, Ubuntu)
+- .rpm (Fedora, CentOS, RHEL, SUSE)
+- .apk (Alpine)
+
+Once installed, you can run Coder as a system service.
+
+```sh
+# Set up an access URL or enable CODER_TUNNEL
+sudo vim /etc/coder.d/coder.env
+
+# To systemd to start Coder now and on reboot
+sudo systemctl enable --now coder
+
+# View the logs to see Coder's URL and ensure a successful start
+journalctl -u coder.service -b
+```
+
+> Set `CODER_ACCESS_URL` to the external URL that users and workspaces will use to
+> connect to Coder. This is not required if you are using the tunnel. Learn more
+> about Coder's [configuration options](../admin/configure.md).
+
+Visit the Coder URL in the logs to set up your first account, or use the CLI:
+
+```sh
+coder login
+```
+
+## Restarting Coder
+
+After updating Coder or applying configuration changes, restart the server:
+
+```sh
+sudo systemctl restart coder
+```
+
+## Next steps
+
+- [Quickstart](../quickstart.md)
+- [Configuring Coder](../admin/configure.md)
+- [Templates](../templates.md)
diff --git a/docs/manifest.json b/docs/manifest.json
index 5dfd490029ee0..dff5d2d009ec6 100644
--- a/docs/manifest.json
+++ b/docs/manifest.json
@@ -1,9 +1,5 @@
{
- "versions": [
- "main",
- "v0.8.1",
- "v0.7.12"
- ],
+ "versions": ["main", "v0.8.1", "v0.7.12"],
"routes": [
{
"title": "About",
@@ -23,22 +19,32 @@
"title": "Installation",
"description": "How to install and deploy Coder",
"icon_path": "./images/icons/wrench.svg",
- "path": "./install.md",
+ "path": "./install/index.md",
"children": [
{
- "title": "Authentication",
- "description": "Learn how to set up authentication using GitHub or OpenID Connect.",
- "path": "./install/auth.md"
+ "title": "Install script",
+ "description": "One-line install script for macOS and Linux.",
+ "path": "./install/install.sh.md"
},
{
- "title": "Configuration",
- "description": "Learn how to configure Coder",
- "path": "./install/configure.md"
+ "title": "System packages",
+ "description": "System packages for Debian, Ubuntu, Fedora, CentOS, RHEL, SUSE, and Alpine.",
+ "path": "./install/packages.md"
},
{
- "title": "Upgrading",
- "description": "Learn how to upgrade Coder.",
- "path": "./install/upgrade.md"
+ "title": "Kubernetes",
+ "description": "Install Coder with Kubernetes via Helm",
+ "path": "./install/kubernetes.md"
+ },
+ {
+ "title": "Docker",
+ "description": "Install Coder with Docker / docker-compose",
+ "path": "./install/docker.md"
+ },
+ {
+ "title": "Standalone binaries",
+ "description": "Download binaries for macOS, Windows, and Linux.",
+ "path": "./install/binary.md"
}
]
},
@@ -129,10 +135,33 @@
"path": "./secrets.md"
},
{
- "title": "Users",
- "description": "Learn about user roles available in Coder and how to create and manage users",
- "icon_path": "./images/icons/users.svg",
- "path": "./users.md"
+ "title": "Administration",
+ "description": "How to install and deploy Coder",
+ "icon_path": "./images/icons/wrench.svg",
+ "path": "./admin/index.md",
+ "children": [
+ {
+ "title": "Users",
+ "description": "Learn about user roles available in Coder and how to create and manage users",
+ "icon_path": "./images/icons/users.svg",
+ "path": "./admin/users.md"
+ },
+ {
+ "title": "Authentication",
+ "description": "Learn how to set up authentication using GitHub or OpenID Connect.",
+ "path": "./admin/auth.md"
+ },
+ {
+ "title": "Configuration",
+ "description": "Learn how to configure Coder",
+ "path": "./admin/configure.md"
+ },
+ {
+ "title": "Upgrading",
+ "description": "Learn how to upgrade Coder.",
+ "path": "./admin/upgrade.md"
+ }
+ ]
},
{
"title": "Contributing",
diff --git a/docs/quickstart.md b/docs/quickstart.md
index 43e83fe8ae126..40c0de39840e8 100644
--- a/docs/quickstart.md
+++ b/docs/quickstart.md
@@ -5,7 +5,7 @@ possible way to use Coder.
## Generic Quickstart
-Please [install Coder](../install.md) before proceeding with the steps below.
+Please [install Coder](../install) before proceeding with the steps below.
## First time owner user setup
diff --git a/docs/quickstart/docker.md b/docs/quickstart/docker.md
index 36d0d3506ddf3..c9d659ce938b1 100644
--- a/docs/quickstart/docker.md
+++ b/docs/quickstart/docker.md
@@ -13,7 +13,7 @@ Coder with Docker has the following advantages:
## Instructions
-1. [Install and launch Coder](../install.md)
+1. [Install and launch Coder](../install)
You will specify `CODER_ACCESS_URL=http://localhost:7080` since we're using
local Docker workspaces exclusively. `CODER_ACCESS_URL` is the external URL
diff --git a/helm/README.md b/helm/README.md
index 3f51582e16a77..b8ef788a7de59 100644
--- a/helm/README.md
+++ b/helm/README.md
@@ -6,12 +6,12 @@ and notably (compared to Coder Classic) does not include a database server.
## Getting Started
-> ⚠️ **Warning**: The main branch in this repository does not represent the
+> **Warning**: The main branch in this repository does not represent the
> latest release of Coder. Please reference our installation docs for
> instructions on a tagged release.
View
-[our docs](https://coder.com/docs/coder-oss/latest/install#kubernetes-via-helm)
+[our docs](https://coder.com/docs/coder-oss/latest/install/kubernetes)
for detailed installation instructions.
## Values