# Deploy Coder on Rancher

You can deploy Coder on Rancher as a
[Workload](https://ranchermanager.docs.rancher.com/getting-started/quick-start-guides/deploy-workloads/workload-ingress).

## Requirements [#requirements]

* [SUSE Rancher Manager](https://ranchermanager.docs.rancher.com/getting-started/installation-and-upgrade/install-upgrade-on-a-kubernetes-cluster) running Kubernetes (K8s) 1.19+ with [SUSE Rancher Prime distribution](https://documentation.suse.com/cloudnative/rancher-manager/latest/en/integrations/kubernetes-distributions.html) (Rancher Manager 2.10+)
* Helm 3.5+ installed
* Workload Kubernetes cluster for Coder

## Overview [#overview]

Installing Coder on Rancher involves four key steps:

1. Create a namespace for Coder
2. Set up PostgreSQL
3. Create a database connection secret
4. Install the Coder application via Rancher UI

## Create a namespace [#create-a-namespace]

Create a namespace for the Coder control plane. In this tutorial, we call it `coder`:

```sh
kubectl create namespace coder
```

## Set up PostgreSQL [#set-up-postgresql]

Coder requires a PostgreSQL database to store deployment data.
We recommend that you use a managed PostgreSQL service, but you can use an in-cluster PostgreSQL service for non-production deployments:

<Tabs items="[&#x22;Managed PostgreSQL (Recommended)&#x22;, &#x22;In-Cluster PostgreSQL (Development/PoC)&#x22;]" groupId="coder-docs-tab:in-cluster-postgresql-development-poc-managed-postgresql-recommended" persist="true">
  <Tab value="Managed PostgreSQL (Recommended)">
    For production deployments, we recommend using a managed PostgreSQL service:

    * [Google Cloud SQL](https://cloud.google.com/sql/docs/postgres/)
    * [AWS RDS for PostgreSQL](https://aws.amazon.com/rds/postgresql/)
    * [Azure Database for PostgreSQL](https://docs.microsoft.com/en-us/azure/postgresql/)
    * [DigitalOcean Managed PostgreSQL](https://www.digitalocean.com/products/managed-databases-postgresql)

    Ensure that your PostgreSQL service:

    * Is running and accessible from your cluster
    * Is in the same network/project as your cluster
    * Has proper credentials and a database created for Coder
  </Tab>

  <Tab value="In-Cluster PostgreSQL (Development/PoC)">
    For proof-of-concept deployments, you can use Bitnami Helm chart to install PostgreSQL in your Kubernetes cluster:

    ```console
    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm install coder-db bitnami/postgresql \
        --set image.repository=bitnamilegacy/postgresql \
        --namespace coder \
        --set auth.username=coder \
        --set auth.password=coder \
        --set auth.database=coder \
        --set persistence.size=10Gi
    ```

    After installation, the cluster-internal database URL will be:

    ```txt
    postgres://coder:coder@coder-db-postgresql.coder.svc.cluster.local:5432/coder?sslmode=disable
    ```

    For more advanced PostgreSQL management, consider using the
    [Postgres operator](https://github.com/zalando/postgres-operator).
  </Tab>
</Tabs>

## Create the database connection secret [#create-the-database-connection-secret]

Create a Kubernetes secret with your PostgreSQL connection URL:

```sh
kubectl create secret generic coder-db-url -n coder \
  --from-literal=url="postgres://coder:coder@coder-db-postgresql.coder.svc.cluster.local:5432/coder?sslmode=disable"
```

<Callout type="idea" title="Important">
  If you're using a managed PostgreSQL service, replace the connection URL with your specific database credentials.
</Callout>

## Install Coder through the Rancher UI [#install-coder-through-the-rancher-ui]

![Coder installed on Rancher](/beta-docs/images/install/coder-rancher.png)

1. In the Rancher Manager console, select your target Kubernetes cluster for Coder.

2. Navigate to **Apps** > **Charts**

3. From the dropdown menu, select **Partners** and search for `Coder`

4. Select **Coder**, then **Install**

5. Select the `coder` namespace you created earlier and check **Customize Helm options before install**.

   Select **Next**

6. On the configuration screen, select **Edit YAML** and enter your Coder configuration settings:

   <Accordions type="single">
     <Accordion title="Example values.yaml configuration">
       ```yaml
       coder:
         # Environment variables for Coder
         env:
           - name: CODER_PG_CONNECTION_URL
             valueFrom:
               secretKeyRef:
                 name: coder-db-url
                 key: url

           # For production, uncomment and set your access URL
           # - name: CODER_ACCESS_URL
           #   value: "https://coder.example.com"

         # For TLS configuration (uncomment if needed)
         #tls:
         #  secretNames:
         #    - my-tls-secret-name
       ```

       For available configuration options, refer to the [Helm chart documentation](https://github.com/coder/coder/blob/release/2.37/helm)
       or [values.yaml file](https://github.com/coder/coder/blob/release/2.37/helm/coder/values.yaml).
     </Accordion>
   </Accordions>

7. Select a Coder version:

   * **Mainline**: `2.36.1`
   * **Stable**: `2.35.4`

   Learn more about release channels in the [Releases documentation](/beta-docs/install/releases/).

8. Select **Next** when your configuration is complete.

9. On the **Supply additional deployment options** screen:

   1. Accept the default settings
   2. Select **Install**

10. A Helm install output shell will be displayed and indicates the installation status.

## Manage your Rancher Coder deployment [#manage-your-rancher-coder-deployment]

To update or manage your Coder deployment later:

1. Navigate to **Apps** > **Installed Apps** in the Rancher UI.
2. Find and select Coder.
3. Use the options in the &#x2A;*⋮** menu for upgrade, rollback, or other operations.

## Next steps [#next-steps]

* [Create your first template](/beta-docs/tutorials/template-from-scratch/)
* [Control plane configuration](/beta-docs/admin/setup/)
