Автор выбрал Фонд свободного и открытого исходного кода для получения пожертвования в рамках программы Write for DOnations.
Введение
Даже несмотря на растущую популярность облачных сервисов, необходимость запуска собственных приложений по-прежнему существует.
Используя noVNC и TigerVNC, вы можете запускать собственные приложения внутри контейнера Docker и получать к ним удаленный доступ с помощью веб-браузера. Кроме того, вы можете запустить свое приложение на сервере с большим количеством системных ресурсов, чем у вас может быть доступно локально, что может обеспечить повышенную гибкость при запуске больших приложений.
В этом руководстве вы поместите почтовый клиент Mozilla Thunderbird в контейнер с помощью Docker. После этого вы защитите его и предоставите удаленный доступ с помощью веб-сервера Caddy.
Когда вы закончите, вы сможете получить доступ к Thunderbird с любого устройства, используя только веб-браузер. При желании вы также сможете получить локальный доступ к файлам из него с помощью WebDAV. У вас также будет полностью автономный образ Docker, который вы сможете запускать где угодно.
Предварительные условия
Прежде чем приступить к работе с этим руководством, вам понадобится следующее:
- Один сервер Ubuntu 18.04 с оперативной памятью не менее 2 ГБ и дисковым пространством 4 ГБ.
- Пользователь без полномочий root с привилегиями
sudo
.
- Докер настроен на вашем сервере. Вы можете следовать инструкциям по установке и использованию Docker в Ubuntu 18.04.
Шаг 1 — Создание конфигурации supervisord
Теперь, когда ваш сервер запущен и Docker установлен, вы готовы приступить к настройке контейнера вашего приложения. Поскольку ваш контейнер состоит из нескольких компонентов, вам необходимо использовать диспетчер процессов для их запуска и мониторинга. Здесь вы будете использовать supervisord
. supervisord
— это менеджер процессов, написанный на Python, который часто используется для управления сложными контейнерами.
Сначала создайте и войдите в каталог thunderbird
для вашего контейнера:
- mkdir ~/тандерберд
- компакт-диск ~/тандерберд
Теперь создайте и откройте файл supervisord.conf
с помощью nano
или вашего любимого редактора:
- нано супервизорд.конф
Теперь добавьте этот первый блок кода в supervisord.conf
, который определит глобальные параметры супервизора:
~/thunderbird/supervisord.conf
[ supervisord ] nodaemon = true pidfile = /tmp/supervisord.pid logfile = /dev/fd/1 logfile_maxbytes = 0
В этом блоке вы настраиваете сам supervisord
. Вам необходимо установить nodaemon
значение true
, поскольку он будет работать внутри контейнера Docker в качестве точки входа. Поэтому вы хотите, чтобы он продолжал работать на переднем плане. Вы также устанавливаете pidfile
в путь, доступный пользователю без полномочий root (подробнее об этом позже), а logfile
— стандартный вывод, чтобы вы могли видеть журналы.
Затем добавьте еще один небольшой блок кода в supervisord.conf
. Этот блок запускает TigerVNC, который представляет собой комбинированный сервер VNC/X11:
~/thunderbird/supervisord.conf
... [ program:x11 ] priority = 0 command = /usr/bin/Xtigervnc -desktop "Thunderbird" -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0 autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true
В этом блоке вы настраиваете сервер X11. X11 — это протокол сервера отображения, который позволяет запускать приложения с графическим интерфейсом. Отметим, что в будущем он будет заменен на Wayland, но удаленный доступ все еще находится в разработке.
Для этого контейнера вы используете TigerVNC и его встроенный VNC-сервер. Это имеет ряд преимуществ по сравнению с использованием отдельного сервера X11 и VNC:
- Более быстрое время отклика, поскольку отрисовка графического пользовательского интерфейса выполняется непосредственно на VNC-сервере, а не в промежуточном фреймбуфере (памяти, в которой хранится содержимое экрана).
- Автоматическое изменение размера экрана, которое позволяет удаленному приложению автоматически изменять размер в соответствии с размером клиента (в данном случае, окна вашего веб-браузера).
При желании вы можете изменить аргумент опции -desktop
с Thunderbird
на что-то другое по вашему выбору. Сервер отобразит выбранный вами заголовок веб-страницы, используемой для доступа к вашему приложению.
Теперь давайте добавим третий блок кода в supervisord.conf
, чтобы запустить easy-novnc
:
~/thunderbird/supervisord.conf
... [ program:easy-novnc ] priority = 0 command = /usr/local/bin/easy-novnc --addr :8080 --host localhost --port 5900 --no-url-password --novnc-params "resize=remote" autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true
В этом блоке вы настраиваете easy-novnc
— автономный сервер, который представляет собой оболочку noVNC. Этот сервер выполняет две роли. Во-первых, он предоставляет простую страницу подключения, которая позволяет вам настроить параметры подключения и установить параметры по умолчанию. Во-вторых, он проксирует VNC через WebSocket, что позволяет получить к нему доступ через обычный веб-браузер.
Обычно изменение размера выполняется на стороне клиента (т. е. масштабирование изображения), но вы используете опцию resize=remote
чтобы в полной мере воспользоваться преимуществами удаленной настройки разрешения TigerVNC. Это также обеспечивает меньшую задержку на более медленных устройствах, таких как Chromebook более низкого уровня:
Note: В этом руководстве используется easy-novnc
. Если хотите, вместо этого вы можете использовать websockify
и отдельный веб-сервер. Преимущество easy-novnc
в том, что использование памяти и время запуска значительно ниже, а также в том, что он автономен. easy-novnc
также предоставляет более чистую страницу подключения, чем страница noVNC по умолчанию, и позволяет устанавливать параметры по умолчанию, которые полезны для этой настройки (например, resize=remote
).
Теперь добавьте следующий блок в вашу конфигурацию, чтобы запустить OpenBox, оконный менеджер:
~/thunderbird/supervisord.conf
... [ program:openbox ] priority = 1 command = /usr/bin/openbox environment = DISPLAY=:0 autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true
В этом блоке вы настраиваете OpenBox, облегченный оконный менеджер X11. Вы можете пропустить этот шаг, но без него у вас не будет заголовков и возможности изменять размеры окон.
Наконец, давайте добавим последний блок в supervisord.conf
, который запустит основное приложение:
~/thunderbird/supervisord.conf
... [ program:app ] priority = 1 environment = DISPLAY=:0 command = /usr/bin/thunderbird autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true
В этом последнем блоке вы устанавливаете priority
на 1
, чтобы гарантировать, что Thunderbird запустится после TigerVNC, иначе он столкнется с состоянием гонки и случайно не запустится. Мы также установили autorestart=true
для автоматического повторного открытия приложения, если оно закрывается по ошибке. Переменная среды DISPLAY
сообщает приложению, что оно должно отображаться на VNC-сервере, который вы настроили ранее.
Вот как будет выглядеть ваш завершенный supervisord.conf
:
~/thunderbird/supervisord.conf
[ supervisord ] nodaemon = true pidfile = /tmp/supervisord.pid logfile = /dev/fd/1 logfile_maxbytes = 0 [ program:x11 ] priority = 0 command = /usr/bin/Xtigervnc -desktop "Thunderbird" -localhost -rfbport 5900 -SecurityTypes None -AlwaysShared -AcceptKeyEvents -AcceptPointerEvents -AcceptSetDesktopSize -SendCutText -AcceptCutText :0 autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true [ program:easy-novnc ] priority = 0 command = /usr/local/bin/easy-novnc --addr :8080 --host localhost --port 5900 --no-url-password --novnc-params "resize=remote" autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true [ program:openbox ] priority = 1 command = /usr/bin/openbox environment = DISPLAY=:0 autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true [ program:app ] priority = 1 environment = DISPLAY=:0 command = /usr/bin/thunderbird autorestart = true stdout_logfile = /dev/fd/1 stdout_logfile_maxbytes = 0 redirect_stderr = true
Если вы хотите поместить в контейнер другое приложение, замените /usr/bin/thunderbird
на путь к исполняемому файлу вашего приложения. В противном случае теперь вы готовы настроить главное меню вашего графического интерфейса.
Теперь, когда ваш менеджер процессов настроен, давайте настроим меню OpenBox. Это меню позволяет нам запускать приложения внутри контейнера. При необходимости мы также добавим терминал и монитор процессов для отладки.
В каталоге вашего приложения используйте nano
или ваш любимый текстовый редактор, чтобы создать и открыть новый файл с именем menu.xml
:
- нано ~/thunderbird/menu.xml
Теперь добавьте следующий код в menu.xml
:
~/thunderbird/menu.xml
< openbox_menu xmlns = " http://openbox.org/ " xmlns: xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi: schemaLocation = " http://openbox.org/ file:///usr/share/openbox/menu.xsd " > < menu id = " root-menu " label = " Openbox 3 " > < item label = " Thunderbird " > < action name = " Execute " > < execute > /usr/bin/thunderbird execute > action > item > < item label = " Terminal " > < action name = " Execute " > < execute > /usr/bin/x-terminal-emulator execute > action > item > < item label = " Htop " > < action name = " Execute " > < execute > /usr/bin/x-terminal-emulator -e htop execute > action > item > menu > openbox_menu >
Этот XML-файл содержит пункты меню, которые появляются при щелчке правой кнопкой мыши на рабочем столе. Каждый элемент состоит из метки и действия.
Если вы хотите поместить в контейнер другое приложение, замените /usr/bin/thunderbird
путем к исполняемому файлу вашего приложения и измените label
элемента.
Шаг 3 — Создание Dockerfile
Теперь, когда OpenBox настроен, вы создадите файл Dockerfile, который свяжет все воедино.
Создайте Dockerfile в каталоге вашего контейнера:
- нано ~/thunderbird/Dockerfile
Для начала давайте добавим немного кода для сборки easy-novnc
:
~/thunderbird/Dockerfile
FROM golang:1.14-buster AS easy-novnc-build WORKDIR /src RUN go mod init build && go get github.com/geek1011/easy-novnc@v1.1.0 && go build -o /bin/easy-novnc github.com/geek1011/easy-novnc
На первом этапе вы создаете easy-novnc
. Это делается на отдельном этапе для простоты и экономии места — вам не понадобится вся цепочка инструментов Go в окончательном изображении. Обратите внимание на @v1.1.0
в команде сборки. Это гарантирует, что результат будет детерминированным, что важно, поскольку Docker кэширует результат каждого шага. Если вы не указали явную версию, Docker будет ссылаться на последнюю версию easy-novnc
на момент первой сборки образа. Кроме того, вам необходимо убедиться, что вы загружаете конкретную версию easy-novnc
на случай, если в интерфейс CLI будут внесены критические изменения.
Теперь давайте создадим второй этап, который станет финальным изображением. Здесь вы будете использовать Debian 10 (buster) в качестве базового образа. Обратите внимание: поскольку он выполняется в контейнере, он будет работать независимо от дистрибутива, который вы используете на своем сервере.
Затем добавьте следующий блок в свой Dockerfile
:
~/thunderbird/Dockerfile
... FROM debian:buster RUN apt-get update -y && apt-get install -y --no-install-recommends openbox tigervnc-standalone-server supervisor gosu && rm -rf /var/lib/apt/lists && mkdir -p /usr/share/desktop-directories
В этой инструкции вы устанавливаете Debian 10 в качестве базового образа, а затем устанавливаете минимум, необходимый для запуска приложений с графическим интерфейсом в вашем контейнере. Обратите внимание, что вы запускаете apt-get update
как часть той же инструкции, чтобы предотвратить проблемы с кэшированием в Docker. Для экономии места вы также удаляете загруженные впоследствии списки пакетов (сами кэшированные пакеты удаляются по умолчанию). Вы также создаете /usr/share/desktop-directories
поскольку некоторые приложения зависят от существующего каталога.
Добавим еще один небольшой блок кода:
~/thunderbird/Dockerfile
... RUN apt-get update -y && apt-get install -y --no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip && rm -rf /var/lib/apt/lists
В этой инструкции вы устанавливаете несколько полезных утилит и пакетов общего назначения. Особый интерес здесь представляют xdg-utils
(который предоставляет базовые команды, используемые настольными приложениями в Linux) и ca-certificates
(который устанавливает корневые сертификаты, позволяющие нам получать доступ к сайтам HTTPS).
Теперь мы можем добавить инструкции для основного приложения:
~/thunderbird/Dockerfile
... RUN apt-get update -y && apt-get install -y --no-install-recommends thunderbird && rm -rf /var/lib/apt/lists
Как и прежде, здесь мы устанавливаем приложение. Если вы помещаете в контейнер другое приложение, вы можете заменить эти команды теми, которые необходимы для установки вашего конкретного приложения. Для запуска некоторых приложений внутри Docker потребуется немного больше работы. Например, если вы устанавливаете приложение, использующее Chrome, Chromium или QtWebEngine, вам потребуется использовать аргумент командной строки --no-sandbox
, поскольку он не поддерживается в Docker.
Далее давайте начнем добавлять инструкции по добавлению последних нескольких файлов в контейнер:
~/thunderbird/Dockerfile
... COPY --from = easy-novnc-build /bin/easy-novnc /usr/local/bin/ COPY menu.xml /etc/xdg/openbox/ COPY supervisord.conf /etc/ EXPOSE 8080
Здесь вы добавляете в образ созданные ранее файлы конфигурации и копируете двоичный файл easy-novnc
с первого этапа.
Следующий блок кода создает каталог данных и добавляет выделенного пользователя для вашего приложения. Это важно, поскольку некоторые приложения отказываются запускаться от имени пользователя root. Также рекомендуется не запускать приложения от имени пользователя root, даже в контейнере.
~/thunderbird/Dockerfile
... RUN groupadd --gid 1000 app && useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && mkdir -p /data VOLUME /data
Чтобы обеспечить согласованность UID/GID
для файлов, вы явно устанавливаете для обоих значение 1000
. Вы также монтируете том в каталог данных, чтобы гарантировать его сохранение между перезапусками.
Наконец, добавим инструкции по запуску всего:
~/thunderbird/Dockerfile
... CMD [ "sh" , "-c" , "chown app:app /data /dev/stdout && exec gosu app supervisord" ]
Установив команду по умолчанию для supervisord
, менеджер запустит процессы, необходимые для запуска вашего приложения. В этом случае вы используете CMD
, а не ENTRYPOINT
. В большинстве случаев это не имеет никакого значения, но использование CMD
лучше подходит для этой цели по нескольким причинам. Во-первых, supervisord
не принимает никаких аргументов, которые могли бы иметь для нас значение, и если вы предоставляете аргументы контейнеру, они заменяют CMD
и добавляются к ENTRYPOINT
. Во-вторых, использование CMD
позволяет нам предоставить совершенно другую команду (которая будет выполняться /bin/sh -c
) при передаче аргументов в контейнер, что упрощает отладку.
И, наконец, вам необходимо запустить chown
от имени пользователя root перед запуском supervisord
, чтобы предотвратить проблемы с разрешениями на томе данных и позволить дочерним процессам открывать stdout
. Это также означает, что вам нужно использовать gosu
вместо инструкции USER
для переключения пользователя.
Вот как будет выглядеть ваш завершенный Dockerfile
:
~/thunderbird/Dockerfile
FROM golang:1.14-buster AS easy-novnc-build WORKDIR /src RUN go mod init build && go get github.com/geek1011/easy-novnc@v1.1.0 && go build -o /bin/easy-novnc github.com/geek1011/easy-novnc FROM debian:buster RUN apt-get update -y && apt-get install -y --no-install-recommends openbox tigervnc-standalone-server supervisor gosu && rm -rf /var/lib/apt/lists && mkdir -p /usr/share/desktop-directories RUN apt-get update -y && apt-get install -y --no-install-recommends lxterminal nano wget openssh-client rsync ca-certificates xdg-utils htop tar xzip gzip bzip2 zip unzip && rm -rf /var/lib/apt/lists RUN apt-get update -y && apt-get install -y --no-install-recommends thunderbird && rm -rf /var/lib/apt/lists COPY --from = easy-novnc-build /bin/easy-novnc /usr/local/bin/ COPY menu.xml /etc/xdg/openbox/ COPY supervisord.conf /etc/ EXPOSE 8080 RUN groupadd --gid 1000 app && useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && mkdir -p /data VOLUME /data CMD [ "sh" , "-c" , "chown app:app /data /dev/stdout && exec gosu app supervisord" ]
Сохраните и закройте ваш Dockerfile
. Теперь мы готовы собрать и запустить наш контейнер, а затем получить доступ к Thunderbird — приложению с графическим интерфейсом.
Шаг 4 — Создание и запуск контейнера
Следующий шаг — создать контейнер и настроить его запуск при запуске. Вы также настроите том для сохранения данных приложения между перезапусками и обновлениями.
Сначала создайте свой контейнер. Обязательно запустите эти команды в каталоге ~/thunderbird
:
- docker build -t Thunderbird .
Теперь создайте новую сеть, которая будет использоваться контейнерами приложения:
- Сеть Docker создать Thunderbird-Net
Затем создайте том для хранения данных приложения:
- том Docker создает данные Thunderbird
Наконец, запустите его и настройте автоматический перезапуск:
- docker run --detach --restart = всегда --volume = Thunderbird-data:/data --net = Thunderbird-net --name = приложение Thunderbird громовая птица
Обратите внимание: если хотите, вы можете заменить thunderbird-app
после опции --name
другим именем. Что бы вы ни выбрали, ваше приложение теперь помещено в контейнер и работает. Теперь давайте воспользуемся веб-сервером Caddy, чтобы защитить его и удаленно подключиться к нему.
Шаг 5 — Настройка Caddy
На этом этапе вы настроите веб-сервер Caddy для обеспечения аутентификации и, при необходимости, удаленного доступа к файлам через WebDAV. Для простоты и для того, чтобы вы могли использовать его с существующим обратным прокси-сервером, вы запустите его в другом контейнере.
Создайте новый каталог и затем перейдите в него:
- mkdir ~/кадди
- компакт-диск ~/кадди
Теперь создайте новый Dockerfile
, используя nano
или ваш любимый редактор:
- нано ~/caddy/Dockerfile
Затем добавьте следующие директивы:
~/caddy/Dockerfile
FROM golang:1.14-buster AS caddy-build WORKDIR /src RUN echo 'module caddy' > go.mod && echo 'require github.com/caddyserver/caddy/v2 v2.1.1' >> go.mod && echo 'require github.com/mholt/caddy-webdav v0.0.0-20200523051447-bc5d19941ac3' >> go.mod RUN echo 'package main' > caddy.go && echo 'import caddycmd "github.com/caddyserver/caddy/v2/cmd"' >> caddy.go && echo 'import _ "github.com/caddyserver/caddy/v2/modules/standard"' >> caddy.go && echo 'import _ "github.com/mholt/caddy-webdav"' >> caddy.go && echo 'func main() { caddycmd.Main() }' >> caddy.go RUN go build -o /bin/caddy . FROM debian:buster RUN apt-get update -y && apt-get install -y --no-install-recommends gosu && rm -rf /var/lib/apt/lists COPY --from = caddy-build /bin/caddy /usr/local/bin/ COPY Caddyfile /etc/ EXPOSE 8080 RUN groupadd --gid 1000 app && useradd --home-dir /data --shell /bin/bash --uid 1000 --gid 1000 app && mkdir -p /data VOLUME /data WORKDIR /data CMD [ "sh" , "-c" , "chown app:app /data && exec gosu app /usr/local/bin/caddy run -adapter caddyfile -config /etc/Caddyfile" ]
Этот Dockerfile собирает Caddy с включенным плагином WebDAV, а затем запускает его на порту 8080
с Caddyfile
в /etc/Caddyfile
. Сохраните и закройте файл.
Далее вы настроите веб-сервер Caddy. Создайте файл с именем Caddyfile
в только что созданном каталоге:
- нано ~/caddy/Caddyfile
Теперь добавьте следующий блок кода в ваш Caddyfile
:
~/caddy/Caddyfile
{ order webdav last } :8080 { log root * /data reverse_proxy thunderbird-app:8080 handle_path /files/* { file_server browse } redir /files /files/ handle /webdav/* { webdav { prefix /webdav } } redir /webdav /webdav/ basicauth /* { {env.APP_USERNAME} {env.APP_PASSWORD_HASH} } }
Этот Caddyfile
передает корневой каталог в контейнер thunderbird-app
, созданный вами на шаге 4 (Docker преобразует его в правильный IP-адрес). Он также будет обслуживать веб-браузер файлов только для чтения в /files
и запускать сервер WebDAV в /webdav
, который вы можете смонтировать локально для доступа к своим файлам. Имя пользователя и пароль считываются из переменных среды APP_USERNAME
и APP_PASSWORD_HASH
.
Теперь создайте контейнер:
- docker build -t Thunderbird-Caddy .
Caddy v.2 требует, чтобы вы хешировали желаемый пароль. Выполните следующую команду и не забудьте заменить mypass
надежным паролем по вашему выбору:
- docker run --rm -it Thunderbird-caddy caddy хэш-пароль -plaintext ' mypass '
Эта команда выведет строку символов. Скопируйте это в буфер обмена, чтобы подготовиться к выполнению следующей команды.
Теперь вы готовы запустить контейнер. Обязательно замените myuser
выбранным вами именем пользователя, а mypass-hash
выводом команды, которую вы выполнили на предыдущем шаге. Вы также можете изменить порт (здесь 8080
), чтобы получить доступ к вашему серверу через другой порт:
- docker run --detach --restart = всегда --volume = Thunderbird-data:/data --net = Thunderbird-net --name = Thunderbird-Web --env = APP_USERNAME = " myuser " --env = APP_PASSWORD_HASH = " mypass-hash " --публиковать = 8080 :8080 Thunderbird-Caddy
Теперь мы готовы получить доступ к нашему приложению и протестировать его.
Шаг 6 — Тестирование и управление приложением
Давайте получим доступ к вашему приложению и проверим, что оно работает.
Сначала откройте http:// your_server_ip : 8080
в веб-браузере, войдите в систему, используя учетные данные, которые вы выбрали ранее, и нажмите Connect .
Теперь вы сможете взаимодействовать с приложением, и его размер должен автоматически измениться в соответствии с размером окна вашего браузера.
Если вы щелкнете правой кнопкой мыши по черному рабочему столу, вы увидите меню, позволяющее получить доступ к терминалу. Если вы щелкните средней кнопкой мыши, вы увидите список окон.
Теперь откройте http:// your_server_ip : 8080 /files/
в веб-браузере. У вас должен быть доступ к вашим файлам.
При желании вы можете попробовать смонтировать http:// your_server_ip : 8080 /webdav/
в клиенте WebDAV. Вы должны иметь возможность напрямую получать доступ к своим файлам и изменять их. Если вы используете параметр Map network drive в проводнике Windows, вам нужно будет либо использовать обратный прокси-сервер для добавления HTTPS, либо установить HKLMSYSTEMCurrentControlSetServicesWebClientParametersBasicAuthLevel
значение DWORD:2
.
В любом случае ваше собственное приложение с графическим интерфейсом теперь готово к удаленному использованию.
Заключение
Теперь вы успешно настроили контейнер Docker для Thunderbird, а затем с помощью Caddy настроили доступ к нему через веб-браузер. Если вам когда-нибудь понадобится обновить приложение, остановите контейнеры, запустите docker rm thunderbird-app thunderbird-web
, заново создайте образы, а затем повторно запустите команды docker run
из предыдущих шагов, описанных выше. Ваши данные по-прежнему будут сохранены, поскольку они хранятся в томе.
Если вы хотите узнать больше об основных командах Docker, вы можете прочитать это руководство или эту шпаргалку. При долгосрочном использовании вы также можете рассмотреть возможность включения HTTPS (для этого требуется домен) для дополнительной безопасности.
Кроме того, если вы развертываете более одного приложения, вы можете использовать Docker Compose или Kubernetes вместо запуска каждого контейнера вручную. И помните, это руководство может служить основой для запуска любого другого приложения Linux на вашем сервере, включая:
- Wine — уровень совместимости для запуска приложений Windows в Linux.
- GIMP, редактор изображений с открытым исходным кодом.
- Cutter — платформа обратного инжиниринга с открытым исходным кодом.
Последний вариант демонстрирует большой потенциал контейнеризации и удаленного доступа к приложениям с графическим интерфейсом. Благодаря этой настройке вы теперь можете использовать сервер со значительно большей вычислительной мощностью, чем у вас локально, для запуска ресурсоемких инструментов, таких как Cutter.