---
myst:
html_meta:
"description lang=en": "Kasm Workspaces multi server installation steps. Deployment of Database, Web App, Agent, and Connection Proxy roles."
"keywords": "Kasm, Multi, Server, Installation, Guide"
"property=og:locale": "en_US"
---
## Installation Guide
Follow these steps to setup Kasm on separate servers.
## Install Database Server Role
```{note}
The Database can be configured as a standalone database such as an Amazon RDS instance or an existing Postgres instance instead of the Kasm Technologies provided container {doc}`Standalone remote database <../../how_to/remote_database>`.
```
The following steps can be followed to install the {term}`Database ` service on the **Database Server**
- Download the latest version of Kasm Workspaces to /tmp
- Extract the package and execute the installation. Please note the default login credentials produced during the install.
````{dropdown} Install Files
```{include} /install/install_files.md
```
````
```{include} /install/activation_key_install_note.md
```
`````{tabs}
````{tab} Standard Install
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role db --database-user [DATABASE_USERNAME] --database-name [DATABASE_NAME]
```
````
````{tab} Offline Install x86-64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ amd_service_images_url }}
curl -O {{ amd_workspace_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role db --database-user [DATABASE_USERNAME] --database-name [DATABASE_NAME] --offline-workspaces /tmp/{{ amd_workspace_images_url.split('/') | last }} --offline-service /tmp/{{ amd_service_images_url.split('/') | last }}
```
````
````{tab} Offline Install arm64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ arm_service_images_url }}
curl -O {{ arm_workspace_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role db --database-user [DATABASE_USERNAME] --database-name [DATABASE_NAME] --offline-workspaces /tmp/{{ arm_workspace_images_url.split('/') | last }} --offline-service /tmp/{{ arm_service_images_url.split('/') | last }}
```
````
`````
```{note}
The **DATABASE_USERNAME** and **DATABASE_NAME** are optional and only required if not using the default kasm/kasmapp settings on an Installation 1.13.0 or newer.
```
## Install Web App Role
The following steps can be followed to provision the Web App components on a single server. Repeat these steps on
additional servers to add redundancy and scalability. Utilize a single public DNS name with multiple public IPs to have
DNS load distribute requests to the Web App Kasm Workspaces server cluster.
For the next steps you need the following information
- DATABASE_HOSTNAME
: The IP, hostname or FQDN of the Database Server that is resolvable and reachable by the Web App server.
- DATABASE_PASSWORD
: The database password generated during the installation of the database.
- REDIS_PASSWORD
: The Redis password generated during the installation of the database.
- DATABASE_USERNAME **Optional**
: The database username if using a custom one. This does not need to be included if using a standard Database Server Role installation.
- DATABASE_NAME **Optional**
: The database name if using a custom one. This does not need to be included if using a standard Database Server Role installation.
Before continuing, verify this server can access port \[DATABASE_HOSTNAME\]:5432 and 6379
- Download the latest version of Kasm Workspaces to /tmp
- Extract the package and run execute the installation
`````{tabs}
````{tab} Standard Install
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role app --db-hostname [DATABASE_HOSTNAME] --db-password [DATABASE_PASSWORD] --redis-password [REDIS_PASSWORD] --database-user [DATABASE_USERNAME] --database-name [DATABASE_NAME]
```
````
````{tab} Offline Install x86-64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ amd_service_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role app --offline-service /tmp/{{ amd_service_images_url.split('/') | last }} --db-hostname [DATABASE_HOSTNAME] --db-password [DATABASE_PASSWORD] --redis-password [REDIS_PASSWORD] --database-user [DATABASE_USERNAME] --database-name [DATABASE_NAME]
```
````
````{tab} Offline Install arm64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ arm_service_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role app --offline-service /tmp/{{ arm_service_images_url.split('/') | last }} --db-hostname [DATABASE_HOSTNAME] --db-password [DATABASE_PASSWORD] --redis-password [REDIS_PASSWORD] --database-user [DATABASE_USERNAME] --database-name [DATABASE_NAME]
```
````
`````
```{include} /install/default_login.md
```
## Install Agent Server Role(s)
The following steps can be followed to install the Agent and Proxy services. Repeat this step for any additional servers intended to provision end user sessions
For the next steps you need the following information
- MANAGER_HOSTNAME
: The IP, hostname or FQDN of the Web App Server that is resolvable and reachable by the Agent server.
- MANAGER_TOKEN
: The manger token generated during the db install. This is used for authentication by the Agent.
- AGENT_HOSTNAME
: This IP, hostname, or FQDN of this Agent Server that is resolvable and reachable by the Web App Server.
This value will be reported by the Agent Service during check in routines and used by other services to communicate with it.
**Before continuing, verify this server can access port \[MANAGER_HOSTNAME\]:443**
- Download the latest version of Kasm Workspaces to /tmp
- Extract the package and execute the installation
`````{tabs}
````{tab} Standard Install
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role agent --public-hostname [AGENT_HOSTNAME] --manager-hostname [MANAGER_HOSTNAME] --manager-token [MANAGER_TOKEN]
```
````
````{tab} Offline Install x86-64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ amd_service_images_url }}
curl -O {{ amd_workspace_images_url }}
curl -O {{ amd_plugin_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role agent --offline-workspaces /tmp/{{ amd_workspace_images_url.split('/') | last }} --offline-service /tmp/{{ amd_service_images_url.split('/') | last }} --offline-plugin /tmp/{{ amd_plugin_images_url.split('/') | last }} --public-hostname [AGENT_HOSTNAME] --manager-hostname [MANAGER_HOSTNAME] --manager-token [MANAGER_TOKEN]
```
````
````{tab} Offline Install arm64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ arm_service_images_url }}
curl -O {{ arm_workspace_images_url }}
curl -O {{ arm_plugin_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role agent --offline-workspaces /tmp/{{ arm_workspace_images_url.split('/') | last }} --offline-service /tmp/{{ arm_service_images_url.split('/') | last }} --offline-plugin /tmp/{{ arm_plugin_images_url.split('/') | last }} --public-hostname [AGENT_HOSTNAME] --manager-hostname [MANAGER_HOSTNAME] --manager-token [MANAGER_TOKEN]
```
````
`````
- Log into the UI as an Administrator, select **Infrastructure > Docker Agents** and using the arrow menu select edit on the agent you just created. Make sure **Enabled** is selected and click **Save**.
```{figure} /images/multi_install/update_agent.webp
:align: center
**Update Agent**
```
## (Optional) Install Connection Proxy (Guac/rdp-gateway) Role(s)
The Connection proxy role is required to support connecting to VMs/Hardware via RDP, VNC, or SSH. Workspace supports connecting to
pre-exiting machines or auto provisioning them via Cloud Autoscaling. If these services are not needed,
this role does not need to be installed.
For the next steps you need the following information
- MANAGER_HOSTNAME
: The IP, hostname or FQDN of the Web App Server that is resolvable and reachable by the Agent server.
- SERVICE_REGISTRATION_TOKEN
: The registration token generated during the db install. This is used to register the Connection Proxy with the system.
The Service Registration Token (AKA Component Registration Token) can also be found in the global [settings](../../guide/settings.md) in the Kasm Admin UI.
- CONNECTION_PROXY_HOSTNAME
: This IP, hostname, or FQDN of this Connection Proxy Server that is resolvable and reachable by the Web App Server.
This value will be reported by the Connection Proxy Server during registration and used by other services to communicate with it.
**Before continuing, verify this server can access port \[MANAGER_HOSTNAME\]:443**
- Download the latest version of Kasm Workspaces to /tmp
- Extract the package and execute the installation
`````{tabs}
````{tab} Standard Install
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role guac --api-hostname [MANAGER_HOSTNAME] --public-hostname [CONNECTION_PROXY_HOSTNAME] --registration-token [SERVICE_REGISTRATION_TOKEN]
```
````
````{tab} Offline Install x86-64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ amd_service_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role guac --offline-service /tmp/{{ amd_service_images_url.split('/') | last }} --api-hostname [MANAGER_HOSTNAME] --public-hostname [CONNECTION_PROXY_HOSTNAME] --registration-token [SERVICE_REGISTRATION_TOKEN]
```
````
````{tab} Offline Install arm64
```{parsed-literal}
cd /tmp
curl -O {{ release_url }}
curl -O {{ arm_service_images_url }}
tar -xf {{ release_url.split('/') | last }}
sudo bash kasm_release/install.sh --role guac --offline-service /tmp/{{ arm_service_images_url.split('/') | last }} --api-hostname [MANAGER_HOSTNAME] --public-hostname [CONNECTION_PROXY_HOSTNAME] --registration-token [SERVICE_REGISTRATION_TOKEN]
```
````
`````