Гид по технологиям

Установка Apache Guacamole с Docker на Ubuntu 22.04

6 min read DevOps Обновлено 27 Nov 2025
Apache Guacamole с Docker на Ubuntu 22.04
Apache Guacamole с Docker на Ubuntu 22.04

Схема удалённого доступа через Guacamole

Что такое Apache Guacamole

Apache Guacamole — это бесплатное open‑source решение для удалённого доступа по протоколам VNC, RDP и SSH через браузер с использованием HTML5. Серверная часть (guacd) выступает прокси, а веб‑интерфейс даёт доступ из любого современного браузера без установки дополнительных клиентов.

Краткое определение: guacd — прокси для удалённых протоколов; Guacamole — веб‑интерфейс и логика аутентификации.

Быстрый обзор шагов

  • Установить Docker и Docker Compose на Ubuntu 22.04.
  • Скачатиь образы guacd и guacamole.
  • Запустить контейнер базы данных MySQL и инициализировать схему Guacamole.
  • Запустить контейнер guacd и контейнер веб‑клиента Guacamole.
  • Проверить доступ через браузер и сменить пароль администратора.

Важно: в демонстрационных командах используются простые пароли и порты по умолчанию. На продуктиве обязательно заменить пароли, настроить TLS и бэкапы.

Основные требования

  • Сервер с Ubuntu 22.04.
  • Доступ root или пользователь с sudo.
  • Открытые порты (например, 80/443 для веб‑доступа, 4822 для guacd, 3306 для MySQL при необходимости).

Установка Docker Engine

Рекомендуется установить актуальную версию Docker.

Установите зависимости:

apt install ca-certificates curl gnupg lsb-release -y

Добавьте ключ GPG и репозиторий Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor > /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list

Обновите репозитории и установите Docker Engine:

apt update -y
apt install docker-ce docker-ce-cli containerd.io -y

Проверьте версию:

docker --version

Установка Docker Compose

Скачайте двоичный файл Docker Compose и сделайте его исполняемым:

curl -sL "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Проверка:

docker-compose --version

Примечание: при желании используйте плагин docker compose v2 или менеджер пакетов для обновления до актуальной версии.

Загрузка образов Apache Guacamole и guacd

Скачайте серверный прокси guacd:

docker pull guacamole/guacd

Скачайте веб‑клиент Guacamole:

docker pull guacamole/guacamole

Проверьте загруженные образы:

docker images

Развёртывание контейнера MySQL для Guacamole

Guacamole использует таблицы в базе данных для хранения конфигурации и пользователей. В примере используется официальный образ MySQL.

Запустите контейнер базы данных (в примере пароль — password; замените его на надёжный):

docker run --name guacamoledb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=guacdb -d mysql/mysql-server

Создайте локальную папку для хранения скрипта и инициализации:

mkdir -p /opt/guacamole/mysql

Сгенерируйте скрипт инициализации схемы Guacamole для MySQL:

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > /opt/guacamole/mysql/01-initdb.sql

Скопируйте скрипт в контейнер MySQL, чтобы он выполнился при инициализации:

docker cp /opt/guacamole/mysql/01-initdb.sql guacamoledb:/docker-entrypoint-initdb.d

Подключитесь к контейнеру MySQL:

docker exec -it guacamoledb bash

В контейнере проверьте наличие скрипта и выполните его через mysql‑клиент:

cd /docker-entrypoint-initdb.d/
ls
mysql -u root -p
use guacdb;
source 01-initdb.sql;
show tables;

Создайте пользователя администратора Guacamole и выдайте права:

create user guacadmin@'%' identified by 'password';
grant SELECT,UPDATE,INSERT,DELETE on guacdb.* to guacadmin@'%';
flush privileges;
exit

Выход из контейнера:

exit

Проверьте, что контейнер работает:

docker ps

Проверьте логи, если требуется диагностика:

docker logs guacamoledb

Запуск guacd (прокси протоколов)

Запустите контейнер guacd:

docker run --name guacamole-server -d guacamole/guacd

Проверьте логи:

docker logs --tail 10 guacamole-server

Запуск веб‑клиента Guacamole

Запустите контейнер веб‑интерфейса и привяжите порты, а также подключите к guacd и MySQL:

docker run --name guacamole-client --link guacamole-server:guacd --link guacamoledb:mysql -e MYSQL_DATABASE=guacdb -e MYSQL_USER=guacadmin -e MYSQL_PASSWORD=password -d -p 80:8080 guacamole/guacamole

Проверьте список контейнеров:

docker ps

Проверьте, что Guacamole слушает порт 80 на хосте:

ss -altnp | grep :80

Доступ к веб‑панели

Откройте в браузере:

http:///guacamole

Стандартные учётные данные по умолчанию:

Пользователь: guacadmin

Пароль: guacadmin

Экран входа Guacamole

После входа смените пароль администратора в настройках пользователя.

Интерфейс управления подключениями Guacamole

Рекомендации по безопасности

  • Немедленно смените пароль guacadmin и создайте отдельную учётную запись администратора с сильным паролем.
  • Разверните обратный прокси (NGINX, Traefik) перед Guacamole и настройте TLS (Let’s Encrypt) для HTTPS.
  • Ограничьте доступ к MySQL только для контейнеров или через внутреннюю docker‑сеть. Не открывайте 3306 в публичный Интернет.
  • Храните данные MySQL и конфигурации в примонтированных volumes и делайте регулярные бэкапы.
  • Отключите root‑вход по паролю в MySQL и используйте сильные политики паролей.

Пример базовой настройки NGINX для TLS и проксирования:

server {
  listen 80;
  server_name guacamole.example.com;
  location / {
    return 301 https://$host$request_uri;
  }
}

server {
  listen 443 ssl;
  server_name guacamole.example.com;
  ssl_certificate /etc/letsencrypt/live/guacamole.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/guacamole.example.com/privkey.pem;

  location / {
    proxy_pass http://127.0.0.1:80/guacamole/;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $host;
  }
}

Примечание: при использовании обратного прокси путь /guacamole может потребовать дополнительных заголовков и корректной настройки контекста приложения.

Альтернативный подход: docker‑compose (рекомендуется для продакшн)

Использование docker‑compose упрощает управление сетями, томами и переменными среды. Пример docker-compose.yml:

version: '3.8'
services:
  guac-db:
    image: mysql/mysql-server:8.0
    container_name: guacamoledb
    environment:
      MYSQL_ROOT_PASSWORD: "strong_root_password"
      MYSQL_DATABASE: "guacdb"
    volumes:
      - guac_db_data:/var/lib/mysql
      - ./mysql/init:/docker-entrypoint-initdb.d
    restart: unless-stopped

  guacd:
    image: guacamole/guacd
    container_name: guacd
    restart: unless-stopped

  guacamole:
    image: guacamole/guacamole
    container_name: guacamole
    depends_on:
      - guacd
      - guac-db
    environment:
      MYSQL_DATABASE: "guacdb"
      MYSQL_USER: "guacadmin"
      MYSQL_PASSWORD: "strong_guac_password"
    ports:
      - "8080:8080"
    restart: unless-stopped

volumes:
  guac_db_data:

После создания файла поместите сгенерированный 01-initdb.sql в ./mysql/init и выполните:

docker-compose up -d

Плюсы docker‑compose: централизованная конфигурация, лёгкая масштабируемость, удобство резервного копирования и мониторинга.

Отладка и распространённые проблемы

  • Если Guacamole не показывает соединения: проверьте логи guacd и контейнера guacamole: docker logs guacd и docker logs guacamole.
  • Ошибка подключения к MySQL: проверьте переменные окружения MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE и сетевые связи контейнеров.
  • Проблемы с портами: убедитесь, что порт 80/8080 не занят на хосте и проброс портов настроен правильно.
  • При ошибках инициализации схемы: убедитесь, что скрипт 01‑initdb.sql корректно скопирован в /docker-entrypoint-initdb.d до первого старта контейнера MySQL.

Чеклист для разных ролей

Администратор сервера:

  • Установлен Docker и Docker Compose.
  • Настроены тома для MySQL и бэкапы.
  • Настроен обратный прокси с TLS.
  • Открыты только необходимые порты в брандмауэре.

DevOps / инженер по CI/CD:

  • Создан docker-compose.yml и шаблоны переменных среды.
  • Настроен мониторинг контейнеров и логов.
  • Автоматизирована процедура развёртывания и отката.

Оператор / пользователь:

  • Получены учётные данные пользователя.
  • Настроены подключения (RDP/VNC/SSH) как отдельные записи в интерфейсе.
  • Настроены политики доступа и группы пользователей.

Критерии приёмки

  • Веб‑интерфейс доступен по HTTPS и показывает страницу логина.
  • Вход под администратором работает, пароль успешно изменён.
  • Создана минимум одна запись подключения и проверено успешное подключение к удалённой машине.
  • База данных хранит конфигурацию в персистентном томе и корректно бэкапится.

Мини‑методология развёртывания

  1. Подготовьте сервер и обновите пакеты.
  2. Установите Docker и Docker Compose.
  3. Создайте структуру директорий и тома для данных.
  4. Подготовьте инициализационные скрипты и переменные среды.
  5. Разверните контейнеры (рекомендуется через docker‑compose).
  6. Настройте обратный прокси и TLS.
  7. Выполните тестовые подключения и создайте пользователей.

Быстрый справочник терминов

  • guacd — демон проксирования VNC/RDP/SSH.
  • Guacamole — веб‑приложение для управления подключениями.
  • initdb.sh — скрипт генерации SQL‑схемы для Guacamole.

Факты и полезные приметы

  • Порты по умолчанию: guacd — 4822, веб‑интерфейс Guacamole обычно доступен на 8080 внутри контейнера, произвольно пробрасывается на 80/443.
  • Не храните пароли в открытом виде в репозиториях — используйте менеджеры секретов или переменные окружения в CI.

Когда этот подход не подходит

  • Если ваша политика безопасности запрещает Docker на продакшн‑хостах, рассмотрите развёртывание в виртуальной машине или Kubernetes с строгой политикой RBAC.
  • Для крупных инсталляций стоит использовать балансировщик нагрузки и внешнюю СУБД (например, кластер MySQL/MariaDB или managed‑DB).

Краткое резюме

Apache Guacamole предоставляет удобный браузерный доступ к рабочим столам и серверам. Развёртывание через Docker упрощает установку и управление. Для продакшн‑использования обязательно обеспечить TLS, сильные пароли, непрерывные бэкапы и мониторинг.

Если нужна помощь с конкретной проблемой (логи, ошибки при инициализации, настройка TLS или docker‑compose), пришлите вывод команд docker ps и docker logs — помогу проанализировать.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро