Google Cloud Provider (GCP) PostgreSQL Database

Admins may wish to use a Managed Database Service such as Google Cloud Provider (GCP) PostgreSQL Database seperate from their Kasm installation.

This guide provides instructions on how to initialize the database server from a remote machine and then install the Kasm WebApp.

Requirements

  • Google Cloud Provider (GCP) PostgreSQL server running PostgreSQL version 12.

  • Google Cloud Provider (GCP) PostgreSQL either already has a User “kasmapp” in the database “kasm” OR you have SuperUser credentials on the database.

  • Remote Redis server supports Redis version 5.

  • Machine executing initialization and the Web App server can connect to the Google Cloud Provider (GCP) PostgreSQL Database (default port TCP/5432)

  • Web App servers can connect to Redis Server (default port TCP/6379)

Sizing

Requirement

CPUs

RAM

Minimum Requirements

2

4 GB

Suggested Requirements

2

16 GB

When performing a fresh installation

Initializing PostgreSQL Database

  • This can be done from anywhere, but since the script will install docker and other Kasm prerequisites it may be easiest to run the remote DB install from the future Kasm Web App server.

  • Download latest version of Kasm Workspaces to /tmp

  • Extract package and initialize the Database.

cd /tmp

curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_1.16.1.98d6fa.tar.gz

tar -xf kasm_release*.tar.gz

sudo bash kasm_release/install.sh \
--accept-eula \
--role init_remote_db \
--db-hostname [DATABASE_HOSTNAME] \
--db-password [DATABASE_KASMAPP_USER_PASSWORD] \
--database-user [DATABASE_USERNAME] \
--database-name [DATABASE_NAME] \
--db-master-user [DATABASE_SUPERUSER_USERNAME] \
--db-master-password [DATABASE_SUPERUSER_PASSWORD]

Note

If the Database already has the User “kasmapp” and database “kasm” created you may omit the -g and -G parameters. The DATABASE_USERNAME and DATABASE_NAME are optional and only required if not using the default kasm/kasmapp settings.

Backing up the Google Cloud Provider (GCP) PostgreSQL Server

  • This script should be run from a Kasm Web App server.

If you are backing up a standalone remote database for Kasm Workspaces 1.11.0 or newer then use the existing db_backup script:

sudo bash /opt/kasm/bin/utils/db_backup -v --backup-file [DESIRED_BACKUP_FILE_LOCATION] -q [DATABASE_HOSTNAME] --path [PATH_TO_KASM_INSTALL]
  • The backup will be present at the location specified with –backup-file

Restoring the Google Cloud Provider (GCP) PostgreSQL server from a backup

  • This script should be ran from a Kasm Web App server or during a Kasm Workspaces upgrade from the server that ran the database clean install step.

  • You will need SuperUser credentials on the database.

  • Make sure that All Kasm Web App and Agent servers have their services stopped.

sudo bash /opt/kasm/1.16.1/bin/utils/db_restore \
--backup-file [LOCATION_OF_BACKUP_FILE] \
--database-hostname [DATABASE_HOSTNAME] \
--database-user [DATABASE_USERNAME] \
--database-name [DATABASE_NAME] \
--path /opt/kasm/1.16.1 \
--database-master-user [DATABASE_MASTER_USER] \
--database-master-password [DATABASE_MASTER_USER_PASSWORD]
  • After the restore is complete restart all Kasm Web App and Agent services.

When performing an upgrade

Important

Before performing an upgrade ensure all Kasm Workspaces Containers/Sessions are stopped on all hosts in your deployment. sudo /opt/kasm/bin/stop Also ensure the “Automatically Enable Agents” is enabled under settings in the Admin Dashboard. These instructions are for upgrading from Kasm Workspaces >= 1.11.0 to 1.16.1.

Database migration

Note

The database migration commands should be run once from the Kasm Web App with access to the remote database. Any additional Kasm Web App server does not need to execute database migrations again.

  • Stop all services:

sudo /opt/kasm/bin/stop
  • Grab and extract the installer for 1.16.1:

cd /tmp

curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_1.16.1.98d6fa.tar.gz

tar -xf kasm_release*.tar.gz
  • Generate a database backup:

sudo mkdir -p /opt/kasm/backups/

sudo bash kasm_release/bin/utils/db_backup \
--backup-file /opt/kasm/backups/1.16.0_backup.tar \
--database-hostname [DATABASE_HOSTNAME] \
--database-user [DATABASE_USERNAME] \
--database-name [DATABASE_NAME] \
--path /opt/kasm/current
  • Log into your PostgreSQL server as the master user and remove the database/user:

drop database if exists kasm;
drop user if exists kasmapp;
  • Init the empty DB, restore our backup, and upgrade the database:

sudo bash kasm_release/install.sh \
--accept-eula \
--role init_remote_db \
--db-hostname [DATABASE_HOSTNAME] \
--db-password [DATABASE_KASMAPP_USER_PASSWORD] \
--database-user [DATABASE_USERNAME] \
--database-name [DATABASE_NAME] \
--db-master-user [DATABASE_MASTER_USER] \
--db-master-password [DATABASE_MASTER_USER_PASSWORD]

sudo bash /opt/kasm/1.16.1/bin/utils/db_restore \
--backup-file /opt/kasm/backups/1.16.0_backup.tar \
--database-hostname [DATABASE_HOSTNAME] \
--path /opt/kasm/1.16.1 \
--database-master-user [DATABASE_MASTER_USER] \
--database-user [DATABASE_USERNAME] \
--database-name [DATABASE_NAME] \
--database-master-password [DATABASE_MASTER_USER_PASSWORD]

sudo bash /opt/kasm/1.16.1/bin/utils/db_upgrade \
--database-hostname [DATABASE_HOSTNAME] \
--path /opt/kasm/1.16.1
  • Seed the new images for this installation:

sudo /opt/kasm/1.16.1/bin/utils/db_init \
--database-hostname [DATABASE_HOSTNAME] \
--seed-file /opt/kasm/1.16.1/conf/database/seed_data/default_images_amd64.yaml