MAATRIX / Блог / Как установить и настроить Kasm Workspaces на VPS

Как установить и настроить Kasm Workspaces на VPS

MAATRIX

Нужен рабочий стол или браузер, который живёт отдельно от вашего компьютера — для тестов, для работы с подозрительными ссылками, для команды, которой не хочется раздавать доступ к продакшену напрямую. Можно поднять Guacamole или отдельные VNC-контейнеры, но если нужна платформа с готовым каталогом образов, управлением пользователями и автоматическим пересозданием сессий — Kasm Workspaces закрывает это одним развёртыванием. Разбираемся, как установить его на VPS с нуля и не упереться в типовые грабли.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Kasm Workspaces и зачем он нужен

Kasm Workspaces — open-source платформа для запуска изолированных десктопов и приложений в Docker-контейнерах, доступных через браузер по протоколу KasmVNC (модифицированный VNC поверх WebSocket, заметно отзывчивее классического noVNC). Пользователь заходит на веб-панель, выбирает образ — Ubuntu-десктоп, Chrome, Firefox, Kali, LibreOffice, Blender, а через RDP-бридж и Windows — и получает готовую сессию за 10-20 секунд.

Типичные сценарии, ради которых это разворачивают на отдельном VPS:

  • Изолированный браузинг — открывать сомнительные ссылки, разбирать фишинговые письма, тестировать вредоносные сайты в одноразовом контейнере, который уничтожается после сессии.
  • Удалённая разработка/DevOps — постоянный рабочий стол с доступом к внутренним сервисам, не привязанный к конкретному ноутбуку.
  • Демонстрация ПО клиентам — временный доступ к preconfigured окружению без установки чего-либо на стороне клиента.
  • Учебные лаборатории — идентичные изолированные среды для студентов или сотрудников.
  • Замена терминальным серверам — там, где RDP через VPN избыточен, а браузерного доступа достаточно.

От Apache Guacamole (о нём мы писали в статье про пошаговую установку Guacamole на Ubuntu 24.04) Kasm отличается тем, что не просто проксирует существующий RDP/VNC/SSH-доступ, а сам оркестрирует контейнеры с приложениями — это скорее конкурент VDI-решений, чем шлюз для готовой инфраструктуры. Нужен просто доступ к существующим машинам — Guacamole проще и легче. Нужны одноразовые изолированные окружения по требованию — ближе Kasm.

Требования к серверу и подготовка VPS

Kasm Workspaces сам по себе — это стек из полутора десятков сервисов (API, менеджер, база данных Postgres, прокси на nginx, сервис управления агентами) плюс контейнеры-воркспейсы поверх них. На production Kasm официально рекомендует минимум 4 CPU / 8 ГБ RAM, но для теста и небольшой команды (до 5-10 одновременных сессий) реально работает и на 4 ГБ, если сами воркспейсы лёгкие (браузер, а не полноценный Ubuntu-десктоп с LibreOffice).

Ориентир по конфигурации:

СценарийCPURAMДиск
Тест / соло-использование2 vCPU4 ГБ40 ГБ SSD
Малая команда, 3-5 сессий4 vCPU8 ГБ80 ГБ SSD
Активная команда, 10+ сессий8 vCPU16 ГБ150+ ГБ SSD

Диск быстро съедается образами воркспейсов — каждый образ Ubuntu-десктопа или Kali весит 2-4 ГБ, плюс слои Docker, плюс логи сессий. Берите SSD с запасом, NVMe предпочтительнее: I/O контейнеров при параллельных сессиях ощутимо нагружает диск.

Систему берите Ubuntu 22.04 или 24.04 LTS — на них у Kasm официальная поддержка и готовые install-скрипты. На Debian тоже ставится, но с чуть большей вероятностью словить нюансы с версиями зависимостей.

Перед установкой:

apt update && apt upgrade -y
hostnamectl set-hostname kasm
timedatectl set-timezone Europe/Moscow

Если сервер арендован под конкретную задачу и нужен запас по мощности заранее — проще сразу оценить нагрузку по нашему гиду сколько ресурсов нужно VPS для тестовой среды, логика подбора там пересекается почти один в один.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Kasm Workspaces

Kasm распространяет установку как self-contained tar-архив со скриптом — Docker он ставит и настраивает сам, руками ничего готовить не нужно (если только у вас уже не стоит Docker — тогда инсталлятор это тоже корректно определит).

Скачиваем актуальный релиз с официального сайта (версии выходят регулярно, проверьте номер на странице загрузок Kasm перед установкой — ниже используется актуальная на конец августа 2026 схема именования):

cd /tmp
curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_1.17.0.7f020d.tar.gz
tar -xf kasm_release_*.tar.gz
cd kasm_release
sudo bash install.sh

Инсталлятор задаёт несколько вопросов: сетевой интерфейс для привязки сервисов, порт (по умолчанию 443), нужно ли ставить агентов на этом же хосте (для single-server deployment — да). Процесс занимает 10-20 минут: скачиваются базовые образы, поднимаются контейнеры инфраструктуры, генерируются сертификаты и пароль администратора.

В конце вывода скрипт печатает данные для входа — сохраните их сразу, повторно они нигде не показываются:

You may now access your Kasm environment via https://<IP-адрес>:443
Login with the following credentials:
Username: admin@kasm.local
Password: <сгенерированный пароль>

Если вывод пролистнулся или сессия SSH оборвалась, пароль администратора всегда можно сбросить утилитой из комплекта:

cd /opt/kasm/current/bin
sudo ./utils/kasm_admin_password_reset.sh

Проверяем, что контейнеры действительно поднялись:

docker ps --format "table {{.Names}}\t{{.Status}}"

Должно быть порядка 10-15 запущенных сервисов с префиксом kasm_ — proxy, api, manager, share, guac (да, Kasm использует библиотеки Guacamole внутри для части протоколов), database и agent.

Первый вход и настройка сети/фаервола

Заходим на https://<IP-сервера> — сертификат по умолчанию самоподписанный, браузер предупредит, это нормально для первого входа (позже заменим на нормальный SSL). Логинимся под admin@kasm.local с полученным паролем и сразу меняем его через Admin → Users → admin@kasm.local.

Дальше открываем фаервол только под нужные порты. Порт 443 (HTTPS-панель и сами сессии) — обязателен снаружи. Если планируете отдельно управлять агентами на других нодах, добавляйте 4444 (агент-порт), но для single-server установки он не нужен извне.

ufw allow OpenSSH
ufw allow 443/tcp
ufw enable
ufw status verbose

Подробнее про базовую настройку правил и типичные ошибки — в статье как установить и настроить фаервол UFW на VPS. Отдельно закройте прямой доступ к Docker API и Postgres, если они слушают не только localhost — по умолчанию Kasm биндит внутренние сервисы на 127.0.0.1, но после апдейтов стоит перепроверять netstat -tlnp.

Каталог образов и первая рабочая среда

После входа в панели есть раздел Workspaces — там уже есть предустановленные образы (Chrome, Firefox, Ubuntu Desktop с XFCE). Чтобы пользователи могли их запускать, нужно назначить образ группе:

  1. Admin → Workspaces — выбираете нужный образ (например, kasmweb/chrome:1.17.0).
  2. Вкладка Permissions — добавляете группу All Users или конкретную группу.
  3. Сохраняете.

Проверяем со стороны обычного пользователя: заходим на главную панель, кликаем на иконку образа — через несколько секунд открывается сессия прямо в браузере, без плагинов и клиентов.

Если готовых образов недостаточно, можно собрать свой на основе базовых Kasm-образов — они опубликованы в Docker Hub под kasmweb/* и содержат готовую обвязку под KasmVNC. Минимальный Dockerfile для кастомного десктопа с дополнительным софтом:

FROM kasmweb/core-ubuntu-jammy:1.17.0
USER root
RUN apt update && apt install -y --no-install-recommends \
    libreoffice gimp && \
    apt clean && rm -rf /var/lib/apt/lists/*
USER kasm-user

Собираете, пушите в свой registry (или локально держите на сервере) и добавляете как новый Workspace через Admin → Workspaces → Add Workspace, указав image_src и путь к иконке.

SSL-сертификат и домен вместо самоподписанного

Самоподписанный сертификат работает, но пугает пользователей предупреждением браузера и не годится для production. Проще всего привязать домен и выпустить нормальный сертификат через отдельный reverse-proxy перед Kasm, а не трогать встроенный nginx-контейнер напрямую — так проще при апдейтах Kasm не терять кастомные настройки TLS.

Схема: Kasm слушает 443 только на localhost/внутреннем интерфейсе, снаружи стоит Caddy или nginx с Let's Encrypt, проксирующий на Kasm с поддержкой WebSocket (это критично — без апгрейда соединения сессии просто не откроются).

Пример блока для nginx:

server {
    listen 443 ssl http2;
    server_name kasm.example.com;

    ssl_certificate /etc/letsencrypt/live/kasm.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/kasm.example.com/privkey.pem;

    location / {
        proxy_pass https://127.0.0.1:8443;
        proxy_ssl_verify off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 3600s;
    }
}

Порт внутреннего Kasm-прокси при такой схеме нужно перенести на 8443 через конфиг /opt/kasm/current/conf/nginx/nginx.conf (или задать при установке отдельным флагом --LISTEN_PORT), чтобы не конфликтовать с внешним nginx на 443. Про получение сертификата и автопродление — в статье как установить и настроить Let's Encrypt SSL на VPS, там же разобраны типичные ошибки валидации домена.

proxy_read_timeout ставьте с запасом — долгие сессии без активности иначе будут рваться прокси-сервером раньше, чем самим Kasm.

Обслуживание: обновления, лимиты, автоочистка

Kasm обновляется тем же tar-архивом с флагом --upgrade, без переустановки с нуля:

cd /tmp
curl -O https://kasm-static-content.s3.amazonaws.com/kasm_release_<новая_версия>.tar.gz
tar -xf kasm_release_*.tar.gz
cd kasm_release
sudo bash install.sh --Upgrade

Перед апдейтом обязательно снимите бэкап — конфиги и база лежат в /opt/kasm/current и в volume Postgres, стандартная утилита бэкапа в комплекте:

cd /opt/kasm/current/bin
sudo ./utils/db_backup.sh

Полезные настройки в Admin → Zones/Sessions, которые стоит выставить сразу, чтобы сервер не захлебнулся:

  • Max sessions per user — ограничение параллельных сессий на пользователя.
  • Idle session timeout — автозакрытие простаивающих сессий, экономит CPU/RAM.
  • Auto-remove workspace on exit — контейнер удаляется сразу после закрытия, а не копится.

Без этих лимитов пара забытых вкладок с тяжёлым десктопом способны съесть всю память сервера за день.

Диск тоже нужно чистить регулярно от неиспользуемых образов и остановленных контейнеров — это общая для всех Docker-инсталляций проблема, подробнее про подход к безопасности и гигиене контейнеров в статье Docker — лучшие практики безопасности:

docker system prune -af --filter "until=168h"

Ставьте это в cron с осторожностью — фильтр until не тронет недавно созданные образы, но перед первым запуском проверьте вручную, что попадёт под удаление (docker system df покажет, сколько места реально освободится).

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Kasm Workspaces бесплатный?

Community Edition бесплатен и без ограничений по числу пользователей для self-hosted установки — платные тарифы нужны только для enterprise-функций (SSO через SAML, расширенная отчётность, поддержка). Для типового VPS-сценария Community Edition достаточно.

Можно ли запускать Windows-приложения через Kasm?

Напрямую контейнеризовать Windows-десктоп нельзя (Docker — линуксовая технология), но Kasm умеет проксировать RDP-сессии к внешнему Windows-серверу через встроенный RDP-бридж — то есть сам десктоп должен быть отдельной Windows-машиной, а Kasm выступает шлюзом доступа к ней.

Чем Kasm отличается от обычного noVNC-контейнера?

Протокол KasmVNC даёт заметно более отзывчивую картинку и поддержку буфера обмена, звука и микрофона из коробки, плюс вокруг всего этого — панель управления пользователями, группами, лимитами и логированием сессий, чего у голого noVNC нет.

Сколько одновременных сессий выдержит VPS на 8 ГБ RAM?

Зависит от тяжести образов: лёгкий Chrome-контейнер — это условно 300-500 МБ на сессию, полноценный Ubuntu-десктоп с офисным пакетом — 1-1.5 ГБ. Точные цифры сильно зависят от нагрузки внутри сессии, ориентируйтесь на тест с реальным использованием, а не только на арифметику.

Нужен ли отдельный сервер под базу данных?

Для установок до пары десятков активных пользователей Postgres в контейнере на том же хосте справляется без проблем. Выносить БД отдельно имеет смысл только при масштабировании на несколько agent-нод.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →