Kasm Workspaces на Ubuntu 24.04: пошаговая установка
Нужно давать людям доступ к браузеру, рабочему столу или конкретному приложению так, чтобы ничего не ставилось на их устройство и не текло в локальную сеть? Kasm Workspaces как раз для этого: каждая сессия — это отдельный Docker-контейнер с изолированным окружением, который транслируется в браузер клиента по WebSocket, без RDP- или VNC-клиента на той стороне. Разберём установку с нуля на Ubuntu 24.04: подготовку сервера, сам инсталлятор, первый вход, настройку рабочих пространств и вывод сервиса на домен с нормальным сертификатом.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Kasm Workspaces и когда он нужен
Kasm Workspaces — платформа контейнеризованных рабочих столов и приложений с доступом через браузер. В основе — KasmVNC, форк VNC, оптимизированный под передачу картинки поверх WebSocket без плагинов на стороне клиента. Когда пользователь открывает Workspace, сервер поднимает Docker-контейнер с нужным окружением — браузером, офисным пакетом, Linux-десктопом или отдельным приложением — и после сессии контейнер, как правило, уничтожается, оставляя при желании только сохранённый профиль.
Практическая польза в нескольких сценариях:
- Изолированный браузер для рискованных ссылок — подозрительный сайт или вложение открывается в одноразовом контейнере, который через минуту удалится вместе со всем, что там случилось.
- Доступ подрядчиков и временных сотрудников к конкретному инструменту без выдачи VPN, RDP-пароля и полноценной рабочей станции.
- Тестовые окружения и QA — чистый Linux- или browser-контейнер под задачу, без зоопарка виртуалок.
- Замена multi-user RDP, когда не нужен именно Windows-рабочий стол, а достаточно браузера или Linux-приложения — Kasm масштабируется контейнерами, а не полноценными ВМ.
Стоит понимать разницу с Apache Guacamole: Guacamole — шлюз, который подключается к уже существующим RDP/VNC/SSH-серверам и отдаёт картинку в браузер, сам он ничего не создаёт (мы разбирали его установку в статье про Apache Guacamole на Ubuntu 24.04). Kasm устроен иначе: сам поднимает и уничтожает контейнеры с нужным окружением по требованию. Нужен доступ к конкретной существующей машине — ближе Guacamole или прямой RDP. Нужны одноразовые изолированные окружения по клику — это Kasm.
Требования к серверу и подготовка Ubuntu 24.04
Kasm официально поддерживает Ubuntu 24.04 LTS в актуальных релизах. Сервис прожорлив: под капотом PostgreSQL, Redis, встроенный Nginx-прокси, менеджер и поверх всего этого — контейнеры сессий.
Ориентировочные требования (точные цифры зависят от того, сколько людей заходит одновременно и что за окружения вы им даёте: лёгкий браузер в контейнере съедает заметно меньше, чем Linux-десктоп с офисным пакетом):
| Сценарий | CPU | RAM | Диск |
|---|---|---|---|
| Тест / знакомство, 1-3 сессии | 2-4 vCPU | 8 ГБ | 40-60 ГБ |
| Малая команда, до ~10 одновременных сессий (лёгкие браузерные workspaces) | 4-8 vCPU | 16 ГБ | 80-100 ГБ |
| Тяжёлые desktop-окружения или больше пользователей | считайте от нагрузки | 32 ГБ+ | 150 ГБ+ |
Диск нужен с запасом не только под систему, но и под образы: каждый тип Workspace — это отдельный Docker-образ на несколько гигабайт, а их обычно несколько.
Подготовка сервера:
sudo apt update && sudo apt upgrade -y
sudo hostnamectl set-hostname kasm-server
sudo timedatectl set-timezone Europe/Moscow
sudo apt install -y curl wget unzip ca-certificates
Если памяти впритык — добавьте swap, инсталлятор Kasm тоже предложит это сделать при его отсутствии:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Docker инсталлятор Kasm поставит сам, если его нет. Если хотите контролировать версию Docker самостоятельно, поставьте его заранее по нашей статье про установку Docker на Ubuntu 24.04 — инсталлятор Kasm обнаружит существующий Docker и не будет ставить свой.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Kasm Workspaces пошагово
Ссылка на архив релиза меняется с каждым обновлением Kasm — берите её со страницы загрузок kasmweb.com/downloads.html, там же указана контрольная сумма файла. Не полагайтесь на версию из старых инструкций в интернете.
cd /opt
sudo mkdir -p kasm_install && cd kasm_install
# подставьте актуальную ссылку со страницы загрузок Kasm
sudo curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_<version>.tar.gz
sudo tar -xf kasm_release_*.tar.gz
cd kasm_release
sudo bash install.sh
Инсталлятор — интерактивный bash-скрипт. По ходу установки он спросит:
- Режим установки — для одного сервера выбирайте all-in-one сценарий, покрывающий и агента, и менеджер, и базу одним набором сервисов.
- Использование существующего Docker — если он уже стоит, скрипт это обнаружит и не будет переустанавливать.
- Настройку свопа, если он не найден.
Дальше скрипт без вопросов подтягивает образы сервисов (Postgres, Redis, менеджер, прокси, RDP-гейтвей и набор базовых Workspace-образов вроде браузера и лёгкого рабочего стола), поднимает контейнеры через собственный docker-compose и генерирует самоподписанный TLS-сертификат для веб-интерфейса. Процесс тянет несколько гигабайт трафика и обычно занимает от десяти до тридцати минут в зависимости от канала — не прерывайте его, даже если кажется, что скрипт завис на загрузке очередного образа.
В самом конце скрипт выводит в терминал:
Kasm has been installed at: https://<IP-сервера>/
Login as: admin@kasm.local
Password: <сгенерированный пароль>
Login as: kasmadmin (rdp/vnc default user, если используется)
Password: <сгенерированный пароль>
Скопируйте оба пароля сразу в менеджер паролей — второй раз их скрипт не покажет.
Первый запуск: вход, сертификат, смена паролей
Откройте в браузере https://<IP-сервера>/. Браузер предупредит о самоподписанном сертификате — это ожидаемо, соглашайтесь на переход (в проде мы это исправим в разделе про домен и SSL). Войдите под admin@kasm.local с паролем из вывода установщика.
Первым делом, до любой другой настройки:
- Смените пароль администратора. *Admin → Users → admin@kasm.local → Edit → Password.*
- Проверьте служебного пользователя, которого мог создать инсталлятор для тестового входа (обычно
kasm_userили похожее имя) — смените пароль или удалите, если не нужен. - Включите 2FA для админского аккаунта в *Admin → Users → \[пользователь\] → 2 Factor Auth* — панель управления контейнерами наружу того стоит.
Про сертификат: временно можно жить с самоподписанным, но для рабочего использования проще вынести сервис за отдельный реверс-прокси с автоматическим Let's Encrypt — раздел ниже. Если всё же нужен именно встроенный сертификат Kasm, файлы лежат в /opt/kasm/current/certs/kasm_nginx.crt и kasm_nginx.key — заменяете их своими и перезапускаете прокси-сервис:
sudo docker restart kasm_proxy
Настройка рабочих пространств и пользователей
Рабочее пространство (Workspace) — это шаблон контейнера, который получают пользователи при запуске. Создаётся в *Admin → Workspaces → Add Workspace*. Kasm поставляется с набором готовых образов (браузер на Chrome/Firefox, лёгкий Linux-десктоп на XFCE, офисные приложения и другие) — они подтягиваются из публичного registry Kasm при первом запуске конкретного Workspace, так что первый заход в новый тип окружения будет медленнее последующих.
Ключевые настройки Workspace, на которые стоит обратить внимание:
- Cores / Memory — жёсткие лимиты CPU и RAM на контейнер сессии. Не оставляйте безлимит на многопользовательском сервере: один тяжёлый десктоп-контейнер способен забрать всю память узла. Логика та же, что и при выборе лимитов для обычных Docker-контейнеров, только выставляется она через интерфейс Kasm, а не вручную в compose-файле.
- Persistent Profile Path — включите, если хотите, чтобы закладки и загрузки браузера переживали перезапуск контейнера. Профили хранятся на диске сервера, так что растущее число пользователей с персистентностью напрямую бьёт по свободному месту.
- Max Sessions и Idle time limit — ограничивают число одновременных запусков Workspace и автоматически завершают простаивающие сессии, что критично для сервера с ограниченными ресурсами.
Доступ раздаётся через связку *Groups → Users → Workspaces*: создаёте группу, добавляете в неё пользователей и разрешённые для группы Workspaces. Пользователь видит в кабинете только то, что назначено его группе — удобно разводить доступы подрядчиков и штатных сотрудников.
Отдельно Kasm умеет проксировать не только собственные контейнеры, но и подключения к внешним RDP/VNC/SSH-хостам через тип Workspace «Server» — похожая функциональность на Guacamole внутри той же панели. Для проброса к одной-двум существующим машинам без контейнеризации может оказаться проще прямое защищённое RDP-подключение через VPN-туннель.
Домен, SSL и firewall для продакшена
По умолчанию Kasm слушает 443 встроенным Nginx-прокси с самоподписанным сертификатом. Для рабочего использования с реальным доменом есть два пути.
Вариант A — отдать 443 самому Kasm. Получаете сертификат Let's Encrypt в standalone-режиме (временно освободив порт 80/443), кладёте файлы в /opt/kasm/current/certs/ вместо самоподписанных и перезапускаете kasm_proxy. Работает, но обновление раз в 90 дней придётся автоматизировать отдельным скриптом.
Вариант B — вынести TLS на отдельный реверс-прокси, а Kasm перевести на внутренний порт. Это чище: прокси сам продлевает сертификаты, Kasm занимается только контейнерами. Общий принцип настройки автообновляемого HTTPS — в статье про Caddy с авто-SSL на Ubuntu 24.04. Специфика именно для Kasm:
- Смените порт, на котором слушает встроенный прокси Kasm (правкой переменной порта в docker-compose-файле сервиса
proxy— конкретное имя параметра сверяйте с README вашей версии релиза, оно менялось между версиями). - В конфиге внешнего прокси обязательно прокидывайте заголовки апгрейда WebSocket — без них KasmVNC не установит стрим:
Connection: upgrade
Upgrade: websocket
Для Caddy это происходит автоматически при обычном reverse_proxy, для Nginx нужно явно прописывать proxy_set_header Upgrade $http_upgrade; и proxy_set_header Connection "upgrade";.
Firewall настраивайте по принципу «закрыто всё, кроме нужного»:
sudo ufw allow OpenSSH
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Если используете реверс-прокси на отдельном внутреннем порту Kasm — тот порт наружу открывать не нужно, только с локального хоста. Общий подход к настройке ufw на чистой системе — в статье про настройку firewall на Ubuntu 24.04.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Kasm Workspaces бесплатный?
Есть Community Edition с открытым использованием, но она ограничена по числу одновременных сессий и части функций вроде SSO. Точные лимиты и условия платных тарифов меняются — смотрите официальный сайт перед тем, как закладывать цифры в план.
Чем это лучше обычного RDP на многопользовательский Windows-сервер?
Kasm не требует лицензий RDP CAL и не привязан к Windows — можно раздавать браузер или Linux-приложение в лёгком контейнере. Но если нужен именно Windows-рабочий стол с ПО под Windows, Kasm не замена — там ближе классический multi-user RDP.
Сколько пользователей потянет один сервер?
Зависит от того, что вы раздаёте: лёгкие браузерные Workspaces на 4-8 ядрах и 16 ГБ ОЗУ обычно держат десяток активных сессий, тяжёлые desktop-окружения — заметно меньше. Точные цифры даёт только нагрузочное тестирование на своём наборе Workspaces, таблица выше — лишь стартовая точка.
Можно подключаться к уже существующей машине, а не к контейнеру?
Да, через тип Workspace «Server» с протоколом RDP/VNC/SSH — похоже на Guacamole внутри той же панели, но контейнеры и внешние подключения настраиваются и лицензируются раздельно.
Как обновить Kasm до новой версии?
Скачиваете новый архив релиза с той же страницы загрузок и запускаете install.sh из него поверх существующей установки — скрипт определяет развёрнутый Kasm и выполняет апгрейд. Перед обновлением снимите бэкап БД и volume'ов.
Нужен ли отдельный домен, или хватит IP-адреса?
Технически хватит IP и самоподписанного сертификата для теста. Для продакшена домен нужен ради нормального Let's Encrypt-сертификата без предупреждений браузера.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →