Необходимые требования
Чтобы всё получилось нам понадобится:
- Сервер с Root доступом. Рекомендую вот этот
- Доменное имя. Можно бесплатный домен или поддомен
- Установленный Docker + Docker-Compose
- Установленный и настроенный Nginx Proxy Manager
- 15 - 30 минут времени
В двух словах о webtop
Webtop представляет из себя, готовый образ, слепок если хотите разнообразных дистрибутивов:
- Alpine
- Arch
- Fedora
- Ubuntu
С разнообразными средами рабочего стола. Такими как:
- i3
- IceWM
- KDE
- MATE
- Openbox
- XFCE
Всё что нужно сделать конечному пользователю это выбрать тэг отвечающий за саму систему + выбрать сопутствующую для него среду рабочего стола. В данном посте я буду рассматривать Arch-XFCE.
В webtop есть поддержка буфера обмена. Эта штука располагается слева при клике по чёрной стрелке. Там же есть поддержка экранной клавиатуры
Одна из особенностей webtop заключается в том что при остановке контейнера, он забудет все изменения которые вы с ним делали. Хотя и сохранит некоторую информацию. То есть грубо говоря если вы подняв контейнер наставили туда разного софта а потом выключили контейнер - то при следующем запуске установленного софта вы не обнаружете, хотя скаченные данные остануться.
Подготовка
Как и в предыдущих статьях про докер контейнеры мы будем придерживаться правила - хранить все контейнеры в одном месте. Создаём необходимые директории для webtop
Сделаем нашего пользователя (не root !) владельцем этой директории
Конфигурация и запуск
Перейдём в директорию, которую мы создавали выше
Создадим фаил docker-compose.yml
И заполняем его таким таким содержанием. Данный конфиг подойдёт сразу под amd64 и arm64 архитектуры.
Если Вы хотите поднять Webtop не светя порты наружу, прочитайте про проксирование приложения в NPM через хостнейм. После усвоения материала используйте этот фаил docker-dompose. В противном случае используйте первый вариант, изначально пост писался именно под него!
В конфиге обязательно обращаем внимание на строки PUID и PGID. Если нам это нужно то в них мы можем вписать идентификатор пользователя и группы, от которого хотим запускать контейнер!
Для этого их необходимо раскомментировать. А сами ID можно посмотреть написав в терминале:
Самые распространённые идентификаторы 1000 и 1001
Также обратите внимание на строку
Её можно закомментировать - но только если мы не будем использовать окружение KDE или i3. Для них наоборот эта строка должна быть раскомментирована.
Ещё одна закомментированная строка
Её раскомментируйте, если собираетесь использовать докер внутри контейнера с webtop. Лично я такого не планирую.
В строке ports: выставляем необходимый порт на хостовой машине
Я поставил 13390, вы можете поставить любой угодный. Главное не трогайте правую часть :3000 т.к. это порт внутри контейнера
Последний параметр который нужно рассмотреть:
Этот параметр отвечает за количество выделяемой оперативной памяти под контейнер. По дефолту он равен 1gb. Можно поставить побольше если это нужно.
С настройкой закончили. Сохраняем конфиг.
Я советую периодически проверять webtop на наличие новых версий. Или изменений конфига.
Стартуем контейнер с webtop
Сразу посмотрим в браузере что у нас там поднялось по адресу
Порт 13390 меняйте на свой порт если вы его меняли.

Про безопасность
Важно одно дело поднять webtop в локальной сети где ваш контейнер за NAT'ом. И совсем другое дело поднять webtop на боевом сервере! Заранее зная ip и port зайти может по сути любой человек имейте это в виду. Я не рекомендую поднимать webtop на боевом сервере, если вы не знаете как защитить его от посторонних. Например с помощью фильтрации по ip.
Универсальное решение
Я достаточно долго искал универсальное решение и оно нашлось.
Во первых нужно отказаться от варианта с проксированием через внешний порт. Для этого нужно воспользоваться вторым фаилом docker-compose, который я добавил в статью. Но сначала обязательно прочтите про проксирование приложения в NPM через хостнейм. Также обязательно настройте правила ACL для дополнительного слоя защиты.
Альтернативное решение
Расскажу как я решил эту проблему в конкретном частном случае. Сам сервер на котором я поднимал webtop находится в oracle cloud и имеет 4 arm ядра ии 24 gb памяти.
У каждого клиента имеется встроенный firewall в личном кабинете аккаунта в котором по стандарту все порты закрыты. Я добавил новое правило в котором указал что на порт 13390 можно подключаться только с ipv4 адреса самого сервера.

После чего проверил заходя по очереди сначала со своего домашнего ip, затем через socks5 proxy поднятой на сервере с webtop. В результате с домашнего интернета я ничего не увидел, а через проксю как и ожидалось открылся webtop. Но такой способ защиты подойдёт далеко не для всех.
Подключаем домен
Для удобства можно подключить домен к webtop. Делать это будем при помощи Nginx Proxy Manager, о котором я писал недавно в одноимённой статье.
В Nginx Proxy Manager(далее NPM) создаём новый хост. Заполняем необходимую информацию.
- Домен либо поддомен
- Ip адрес
- Порт - 13390 (если вы не меняли его в docker-compose.yml)

Нажимаем Save и ждём примерно 60 секунд.
После этого снова редактируем только что добавленный хост, нажав на три точки справа и Edit.
На этот раз отправляемся в раздел SSL в котором запрашиваем новый ssl сертификат для нашего домена - Request a new SSL Certificate

И нажимаем кнопку Save
Обратите внимание, что после нажатия кнопки Save не должно быть никаких ошибок. Если у вас всё же были какие то ошибки, скорее всего это связано с тем что у вас не успели обновиться записи в DNS, либо вы превысили лимиты(количество попыток) LetsEncrypt. В обоих случаях надо просто подождать и повторить попытку позже.
Если же у вас не выдало никаких ошибок с сертификатом, то сразу проверяем результат в браузере, открыв только что добавленный домен.
Мы должны увидеть страницу с webtop в конкретном случае с Archlinux + XFCE

Тут есть одна интересная деталь. Несмотря на то что вход по ip:port был разрешён только для определённого ip, в случае с доменом это правило не сработало. И у нас получается опять торчит наружу голопопый домен, который никак не защищён от посторонних. Предлагаю сразу решить эту проблему.
Отправляемся в NPM в раздел Access Lists и создаём новый ACL нажав на кнопку Add Access List. Назовём его по имени сервиса webtop

Теперь придумываем логин и пароль посложнее и вписываем в соответствующие поля.
Я доверил создание пароля программе pwgen

На вкладке Access можно указать список дозволенных ip, но я специально не стал этого делать, т.к. планирую иногда предоставлять доступ другим людям. Если будете его заполнять, то на первой вкладке Details отключите radio-button Satisfy Any чтобы у вас работала сразу защита по ip и логин + пароль
Ну и всё - сохраняем правила. Теперь идём опять к списку доменов в NPM и для необходимого домена выставляем ACL: webtop

Теперь заходя на наш домен нам будет предложено сначала ввести логин и пароль, и если мы не введём правильные то нас никуда не пустит.

Иногда нужно почистить кэш браузера или зайти в приватном режиме либо с другого браузера.
Как узнать пароль от аккаунта ABC?
ОтветитьУдалитьsudo passwd abc
УдалитьОтправить комментарий