Докер как облачная среда разработки в браузере
Привет, Хабр! Меня зовут Ильдар.
Последнее время я использую докер, как среду разработки, в этом посте я расскажу, как я это делаю.
Я разработал Облачную ОС, которая позволяет разрабатывать микросервисы в облаке, на сервере или локальном компьютере.
Сферы применения:
автоматизация процессов CI/CD;
локальные системы контроля версий;
облачные IDE системы для разработки программного обеспечения;
управление веб хостингом;
и т.п.
Проект https://cloud.bayrell.org/ru/
Что такое Облачная ОС?
BAYRELL Cloud OS — это opensource облачная операционная система с возможностью устанавливать приложения и различный софт в единую облачную экосистему, с помощью веб интерфейса.
Облачная ОС позволяет развернуть свое собственное облако на базе Docker Swarm и управлять им через веб интерфейс.
В чем отличие от Portainer?
В Облачной ОС не нужно создавать YAML файлы. Вся конфигурация по запуску приложения находится в самом приложении.
Я хочу создать репозиторий готовых программ, которые помогут программистам и devops в их работе, позволяя устанавливать эти программы через веб интерфейс, без необходимости править конфиги nginx и yaml файлы.
Например:
админка для управления сервером;
настройка nginx через веб интерфейс;
деплой проектов;
мониторинг сервера и логов;
и т.д
Функционал Облачной ОС
Веб панель для управления докер кластером
Запустить приложения можно из репозитория облачного ПО https://bayrell.org/ru/repo

В классическом докер у меня возникал вопрос. Я запустил базу данных. А как ей управлять и получить доступ к веб интерфейсу adminer? Особенно если сервер в интернете?
В Облачной ОС это решается следующим образом. Рядом с запущенным контейнером если у программы есть интерфейс управления, появляется кнопка админ. Параметры админки задаются шаблоном приложения, который разработал вендор при сборке контейнера.
В данном случае доступны две админки:
управление базой данных MySQL
доступ к VSCode в браузере
Возможность запускать контейнера без yaml файла
Основная идея в заранее подготовленных шаблонах. При сборке контейнера, тот кто собирает контейнер, должен создать шаблон запуска этого контейнера. Этот шаблон содержит информацию как запускать контейнер.
Указываются:
параметры запуска контейнера
volume, которые нужно подключить
переменные для запуска
прочие настройки
Смысл в том, чтобы пользователь при запуске контейнера, указал только необходимые параметры запуска, и не думал, как нужно создать yaml файл и откуда его взять.
Например, для запуска MySQL контейнера нужно указать только root password и hostname где запустить контейнер.

HTTP маршрутизация
BAYRELL Cloud OS содержит аналог Ingress из Kubernetes — встроенный Nginx для маршрутизации запросов к контейнерам.
После создания докер кластера возникает вопрос. А как добавить домены? Обычно начинают открывать порты 8080, либо ставить traefik. Имхо, нужно несколько раз подумать, прежде чем открывать порты в докере. Потому что открывая порты, вы даете доступ всему интернет.
В Облачной ОС встроен механизм управления маршрутизацией запросов в контейнеры, через веб интерфейс. Можно добавить домен и указать в какой контейнер должен быть отправлен запрос.

Для каждого домена можно настроить маршруты

Система виртуальных пространств
Виртуальные пространства нужны для запуска ERP систем в едином окне. Например, нужно запустить систему контроля версий, корпоративную почту, систему тайм менеджмента и корпоративную википедию на одном домене.
Для этого есть виртуальные пространства. Создается пространство, добавляется домен, и запускаются все приложения в едином окне.
Единое окно означает:
Будет единая авторизация между корпоративными системами.
Системы доступны будут с одного URL.
Управление пользователями из единого источника.
Тонкий клиент
Еще одна причина, почему я не пользуюсь Portainer, в том, что он открывает доступ к управлению к серверу по HTTP, иногда даже без сертификата.
В Облачной ОС разработан тонкий клиент https://blog.bayrell.org/ru/bayrell-os/441-ustanovka-bayrell-cloud-os-desktop-client.html
Тонкий клиент позволяет получить доступ к веб интерфейсу и настройкам кластера используя защищенное SSH соединение.
Как использовать Облачную ОС для разработки в браузере?
Основная инструкция содержится в видео
Инструкция по установке https://blog.bayrell.org/ru/bayrell-os/267-ustanovka-bayrell-cloud-os.html
Если вкратце, то нужно:
Установить облачную ОС
Через веб интерфейс поставить MySQL и VSCode
Запустить контейнер с настроенным php или python
Добавить домен для локальной разработки
Зайти через веб интерфейс в запущенный VSCode
Начать разрабатывать проект
Что есть для разработчиков:
Готовые сборки для php
Админка для MySQL
Управление доменами и nginx конфигурацией
Возможность собирать и запускать контейнеры в браузере на сервере.
Редактор кода VSCode в браузере
Зачем это нужно?
Разрабатывать софт можно в браузере. Каждый проект работает в контейнере изолированно друг от друга. Особенно, это полезно для python проектов, где могут быть конфликты pip.
Если у вас большой проект и много микросервисов, то вам не нужно запускать их все локально. Вы можете вести разработку сразу на сервере. Для каждого программиста можно настроить свою докер среду.
Можно разрабатывать и обучать нейронки прямо на сервере. Об этом подробнее здесь https://habr.com/ru/articles/694616/
Если у вас есть опыт использования облачных сред разработки — делитесь в комментариях.