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

Что такое 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://
Стандартные учётные данные по умолчанию:
Пользователь: guacadmin
Пароль: guacadmin

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

Рекомендации по безопасности
- Немедленно смените пароль 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 и показывает страницу логина.
- Вход под администратором работает, пароль успешно изменён.
- Создана минимум одна запись подключения и проверено успешное подключение к удалённой машине.
- База данных хранит конфигурацию в персистентном томе и корректно бэкапится.
Мини‑методология развёртывания
- Подготовьте сервер и обновите пакеты.
- Установите Docker и Docker Compose.
- Создайте структуру директорий и тома для данных.
- Подготовьте инициализационные скрипты и переменные среды.
- Разверните контейнеры (рекомендуется через docker‑compose).
- Настройте обратный прокси и TLS.
- Выполните тестовые подключения и создайте пользователей.
Быстрый справочник терминов
- 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 — помогу проанализировать.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента