Создание Docker-контейнеров в CapRover

Создание Docker-контейнеров в CapRover не ограничивается каким-то одним конкретным методом. Самым предпочтительным из них по праву считается набор готовых шаблонов веб-приложений для установки в один клик. Но что если нужного приложения нет в списке? На выручку приходит так называемый пустой контейнер CapRover.

Как им пользоваться? Давайте узнаем.

Что будем устанавливать?

В нашем примере мы будем использовать GUI для Wireguard. В случае ручной установки через Docker CLI, наша команда выглядела бы следующим образом:

docker run -d \
--name=vpn \
-e SESSION_SECRET=8top7Fgkb1V3n \
-e WGUI_USERNAME=table8567 \
-e WGUI_PASSWORD=YhF58j8dv3M29J \
-v ~/.db:/app/db \
-v /etc/wireguard:/etc/wireguard \
--cap-add NET_ADMIN \
ngoduykhanh/wireguard-ui:latest

Где:

  • –name – имя контейнера;
  • -e – все переменные окружения, которые мы хотим указать для нашего контейнера, вроде логина и пароля администратора, информация о базе данных и пр.;
  • -v – это постоянное хранилище данных;
  • –cap-add – дополнительная опция (о которой поговорим в конце).

В этой пошаговой инструкции мы перенесём данные из CLI команды в GUI-интерфейс CapRover. При необходимости вы всегда можете возвращаться сюда, чтобы понять, откуда берутся те или иные данные.

Установка на примере wireguard-ui

  1. Создание Docker-контейнеров в CapRover практически всегда начинается с заготовки – так называемого пустого контейнера. Даём ему имя, например vpn, и отмечаем галочкой вариант Persistent data.
  1. Заходим в созданный контейнер и переходим во вкладку App Configs. В первую очередь нас интересует раздел Environmental Variables. Нажимаем на кнопку Add Key/Value Pair и вносим ранее установленные -e переменные в следующем формате:
  1. Раздел Port Mapping нужен нам в том случае, если внутри приложения есть процессы, к которым нужно иметь доступ извне. В случае, если бы в состав нашего контейнера входил сам Wireguard, а не только GUI, процесс слушал бы запросы на порту 51820. В таком случае нам нужно было бы заполнить поля следующим образом:

В нашем примере никаких дополнительных настроек производить не нужно, поэтому переходим дальше.

  1. В следующем разделе Persistent Volumes мы настроим хранилище данных, которое должно сохранять рабочие данные приложения даже в случае удаления контейнера. Заполняем его следующим образом:

Как вы видите, строки немного различаются. Потому что в случае с томом /etc/wireguard мы обращаемся к существующему на сервере каталогу. В таких ситуациях предварительно надо убедиться, что у каталога установлено достаточно прав доступа.

  1. Сохраняем предыдущие настройки и возвращаемся на вкладку HTTP Settings.
  1. На странице находим поле Container HTTP Port. По умолчанию здесь установлен стандартный 80 порт. Через него мы сможем получить доступ к GUI. Если приложение использует нестандартный порт, выставляем другое значение. Как правило это указывается где-то в описании к исходникам проекта или в инструкциях по установке. В нашем случае страница GitHub указывает на порт 5000.
  2. Снова сохраняем настройки и далее нажимаем на кнопку Enable HTTPS на этой же вкладке. CapRover сгенерирует сертификат Let’s Encrypt, чтобы в дальнейшем соединение между клиентом и сервером было защищено по протоколу HTTPS.
    Далее находим опцию Force HTTPS by redirecting all HTTP traffic to HTTPS и ставим галочку. После снова сохраняем изменения.
  1. Устанавливаем образ в контейнер, переходя во вкладку Deployment и пролистнув до 6-го метода Deploy via ImageName. Вставляем в поле название образа (в нашем случае ngoduykhanh/wireguard-ui:latest) и нажимаем на кнопку Deploy Now.

Дайте контейнеру примерно 30 секунд на запуск, при этом в логах вы сможете наблюдать за ходом сборки контейнера и запуском приложения.

Таким нехитрым образом пустой контейнер CapRover стал полноценным веб-приложением и теперь доступен по адресу vpn.мойдомен.ru.

Минусы данного подхода

CapRover не позволяет использовать дополнительные опции для запуска контейнера, так как использует довольно устаревшую реализацию Docker Swarm. В нашем примере это касается таких опций, как cap-add и sysctl.

Так, чтобы применить cap-add к нашему контейнеру, необходимо войти на сервер через SSH и запустить команду:

docker service update --cap-add *Здесь вставляем аргумент* srv-captain--*имя нашего контейнера в сети CapRover*

Хочу сказать, что установленные таким образом опции в моём случае не сохранялись после перезагрузки сервера, поэтому временно рекомендую обходить приложения, которым подобные опции просто необходимы. Возможно в будущих версиях CapRover что-то поменяется.

Базы данных и другие зависимости

В моём примере не предусматривается установка базы данных и прочих зависимостей, но скорее всего они пригодятся для любого другого крупного веб-приложения.

В первую очередь советую просмотреть репозиторий CapRover на предмет готового шаблона для установки в один клик. Если вы нашли нужный компонент (например, базу данных), смело устанавливайте её по шаблону. После установки контейнер получит своё имя в сети CapRover в формате srv-captain--*имя нашего контейнера в сети CapRover*. При помощи этих имён приложения внутри сети могут “общаться” друг с другом. Поэтому, когда вы устанавливаете приложение, зависимое от базы данных, в адресе BD указывайте присвоенное ей имя (например srv-captain--db).

Итог

Как мы видим, создание Docker-контейнеров в CapRover является не самой сложной затеей. При этом, сегодня мы познакомились лишь с одним из известных способов. Пишите в комментариях, какой альтернативный способ интересует Вас больше всего, и мы рассмотрим его уже в ближайшем будущем!


Автор: Владислав Лищенко / HomeHosted.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *