no-style

Поднимаем webtop в докер контейнере

docker-compose + linuxserver + wireguard
Полноценный Linux с GUI в браузере. Действительно? Кому это может понадобиться? Посидев подумав какое то время, идеи начали приходить одна за другой. На данный момент с появлением webtop в моём арсенале, мне удалось решить некоторые необычные кейсы которые я не мог решить довольно долго. Сегодня я расскажу как поставить всё это добро.


Необходимые требования

Чтобы всё получилось нам понадобится:

  • Сервер с 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

sudo mkdir -p /app/misc/webtop/arch-xfce/data

Сделаем нашего пользователя (не root !) владельцем этой директории

sudo chown -R $USER:$USER /app/misc/webtop/arch-xfce






Конфигурация и запуск

Перейдём в директорию, которую мы создавали выше

cd /app/misc/webtop/arch-xfce

Создадим фаил docker-compose.yml

nano docker-compose.yml

И заполняем его таким таким содержанием. Данный конфиг подойдёт сразу под amd64 и arm64 архитектуры.

Если Вы хотите поднять Webtop не светя порты наружу, прочитайте про проксирование приложения в NPM через хостнейм. После усвоения материала используйте этот фаил docker-dompose. В противном случае используйте первый вариант, изначально пост писался именно под него!

В конфиге обязательно обращаем внимание на строки PUID и PGID. Если нам это нужно то в них мы можем вписать идентификатор пользователя и группы, от которого хотим запускать контейнер!

Для этого их необходимо раскомментировать. А сами ID можно посмотреть написав в терминале:

id

Самые распространённые идентификаторы 1000 и 1001


Также обратите внимание на строку

privileged: true #optional for KDE or i3

Её можно закомментировать - но только если мы не будем использовать окружение KDE или i3. Для них наоборот эта строка должна быть раскомментирована.


Ещё одна закомментированная строка

# - /var/run/docker.sock:/var/run/docker.sock #optional for docker inside docker

Её раскомментируйте, если собираетесь использовать докер внутри контейнера с webtop. Лично я такого не планирую.


В строке ports: выставляем необходимый порт на хостовой машине

- 13390:3000

Я поставил 13390, вы можете поставить любой угодный. Главное не трогайте правую часть :3000 т.к. это порт внутри контейнера


Последний параметр который нужно рассмотреть:

shm_size: "1gb" #optional

Этот параметр отвечает за количество выделяемой оперативной памяти под контейнер. По дефолту он равен 1gb. Можно поставить побольше если это нужно.


С настройкой закончили. Сохраняем конфиг.


Я советую периодически проверять webtop на наличие новых версий. Или изменений конфига.

Стартуем контейнер с webtop

sudo docker-compose up -d


Сразу посмотрим в браузере что у нас там поднялось по адресу

http://ip.адрес.вашего.сервера:13390

Порт 13390 меняйте на свой порт если вы его меняли.


webtop launch





Про безопасность

Важно одно дело поднять webtop в локальной сети где ваш контейнер за NAT'ом. И совсем другое дело поднять webtop на боевом сервере! Заранее зная ip и port зайти может по сути любой человек имейте это в виду. Я не рекомендую поднимать webtop на боевом сервере, если вы не знаете как защитить его от посторонних. Например с помощью фильтрации по ip.



Универсальное решение

Я достаточно долго искал универсальное решение и оно нашлось.

Во первых нужно отказаться от варианта с проксированием через внешний порт. Для этого нужно воспользоваться вторым фаилом docker-compose, который я добавил в статью. Но сначала обязательно прочтите про проксирование приложения в NPM через хостнейм. Также обязательно настройте правила ACL для дополнительного слоя защиты.



Альтернативное решение

Расскажу как я решил эту проблему в конкретном частном случае. Сам сервер на котором я поднимал webtop находится в oracle cloud и имеет 4 arm ядра ии 24 gb памяти.

У каждого клиента имеется встроенный firewall в личном кабинете аккаунта в котором по стандарту все порты закрыты. Я добавил новое правило в котором указал что на порт 13390 можно подключаться только с ipv4 адреса самого сервера.


webtop security oracle 1

После чего проверил заходя по очереди сначала со своего домашнего ip, затем через socks5 proxy поднятой на сервере с webtop. В результате с домашнего интернета я ничего не увидел, а через проксю как и ожидалось открылся webtop. Но такой способ защиты подойдёт далеко не для всех.







Подключаем домен

Для удобства можно подключить домен к webtop. Делать это будем при помощи Nginx Proxy Manager, о котором я писал недавно в одноимённой статье.

В Nginx Proxy Manager(далее NPM) создаём новый хост. Заполняем необходимую информацию.

  • Домен либо поддомен
  • Ip адрес
  • Порт - 13390 (если вы не меняли его в docker-compose.yml)

webtop create host 1

Нажимаем Save и ждём примерно 60 секунд.

После этого снова редактируем только что добавленный хост, нажав на три точки справа и Edit.

На этот раз отправляемся в раздел SSL в котором запрашиваем новый ssl сертификат для нашего домена - Request a new SSL Certificate


webtop create host 2

И нажимаем кнопку Save

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

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

Мы должны увидеть страницу с webtop в конкретном случае с Archlinux + XFCE


webtop create host 3

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

Отправляемся в NPM в раздел Access Lists и создаём новый ACL нажав на кнопку Add Access List. Назовём его по имени сервиса webtop


webtop create host 4

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

Я доверил создание пароля программе pwgen

pwgen -c -n -s -B 20

webtop create host 5

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

Ну и всё - сохраняем правила. Теперь идём опять к списку доменов в NPM и для необходимого домена выставляем ACL: webtop


webtop create host 6

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


webtop create host 7

Иногда нужно почистить кэш браузера или зайти в приватном режиме либо с другого браузера.







Полезные ссылки

Docker Hub

Github

docs.linuxserver.io

fleet.linuxserver.io

Анонс webtop на linuxserver

2 Комментарии

Отправить комментарий