Упрощенная схема платформы:
Базовый набор OpenSource-инструментов платформы:
Cхема непрерывной интеграции и доставки CI/CD:
Все компоненты платформы и вашего проекта созданы из официальных Docker образов с сайта https://hub.docker.com и запущены в кластере Kubernetes
Мы используем ванильный Kubernetes и только Open Source решения и построили CI/CD платформу для разработки, тестирования и доставки проекта, полностью независимую от облачных инфраструктур и коммерческих решений
В составе платформы Вы получаете собственный хостинг кода, систему управления версиями и непрерывной интеграции Gitea. В Gitea, следуя подходу IaC, созданы репозитории микросервисов проекта, содержащие Dockerfile сборки Docker образов контейнеров микросервисов и helm чарты для доставки контейнеров микросервисов в кластер Kubernetes.
Пример репозитория с файлами конфигурации микросервиса
Пайплайны в Jenkins собирают Docker образы контейнеров микросервисов, используя Dockerfile из репозиториях Gitea и доставляют Docker контейнеры микросервисов в кластер Kubernetes, используя helm чарты из репозиториев Gitea. Так же в Jenkins предустановлены пайплайны промоушена promote вашего проекта со staing в production и пайплайн отката rollback к предыдущим релизам вашего проекта в случае доставки в production релиза с багом.
Непрерывная доставка осуществляется в 3 контура:
development - контур для динамических review окружений разработчиков
staging - контур для для демонстрации сайта заказчику
production - контур для доставки микросервисов проекта в production
Каждый контур изолирован в своем namespace и на сетевом уровне политиками NetworkPolicy, что исключает доступ разработчиков в контуры staging и production
В Gitea созданы web-хуки, которые срабатываю при каждом внесении изменений в исходный код проекта и посылают запрос в Jenkins на сборку и доставку микросервисов вашего проекта в кластер Kubernetes
Пример процесса сборка Docker образа микросервиса и доставки в staging контур
Для безопасного доступа по протоколу HTTPs к инфраструктурным доменам платформы
https://gitea.example.com
https://jenkins.example.com
https://grafana.example.com
https://auth.example.com
https://*.development.example.com
https://*.staging.example.com
https://*.production.example.com
при помощи Cert-manager создали доменный wildcard сертификат *.example.com и подписали вашим собственным CA сертификатом удостоверяющего центра. Доменный сертификат подключили к инфраструктурным доменам платформы, а CA сертификат выдали разработчикам и всем участникам проекта. Данный подход позволяет сделать вашу инфраструктуру независимой от внешних удостоверяющих центров.
Для безопасного доступа к главному домену web-сайта вашего проекта по протоколу HTTPs, Cert-manager получает и каждые 3 месяца обновляет Let`s Encrypt сертификат.
В качестве фронтенда в платформу предустановлен Nginx из официального легковесного Docker образа на базе Alpine Linux
В качестве бэкенда, на Ваш выбор в платформу предустановлен один из 4х готовых Docker образов, собраных на базе Alpine Linux для разработки на:
чистом PHP
PHP в фреймворке Laravel
чистом Python
Python в фреймворке Django
Динамику на PHP в бэкенде отрабатывает php-fpm. Динамику на Python на Ваш выбор Gunicorn или uWSGI
На Ваш выбор в контуры development, staging и production предустанавливаются базы данных:
PostgreSQL и web-интерфейс pgadmin4 для управления БД
MySQL и web-интерфейс phpMyAdmin для управления БД
Так же, мы поможем докеризировать и установить в кластер Kubernetes ваши приложения и дополнительные вспомогательные микросервисы, требующиеся для вашего проекта
Для удобства управления доступом пользователей к Web-интерфейсам сервисов платформы, реализована бесшовная аутентификация в Keycloak. Что позволяет администраторам проекта не регистрировать пользователей отдельно в каждом сервисе проекта, а иметь одну единую базу данных пользователей в Keycloak. К Web-интерфейсу каждого сервиса подключен клиент (адаптер) Keycloak, который можно вызвать кнопкой "Войти при помощи Keycloak". Ниже приведем пример окна аутентификации Gitea
Пользователя перенаправляет на окно аутентификации keycloak
Пользователь вводит свои логин и пароль и при удачной аутентификации Keycloak перенаправляет пользователя обратно в личный кабинет сервиса уже аутентифицированным. Доступ ко всем остальным Web-интерфейсам платформы пользователь получает без необходимости повторно вводить логин и пароль (технология единого входа SSO). Пользователи в Keycloak разделены на две группы admins и devs. Группе admins назначена роль администратора, дающая права на внесение изменений во все сервисы. Пользователям группы devs назначена роль, дающая права только на просмотр.
Для мониторинга платформы в кластер Kubernetes предустановлен стек Prometheus + Grafana. Поумолчанию в Grafana установлен Dashboard
из коллекции Node Exporter Full с ID 1860
По Вашему желаю, добавим сбор в Prometheus и вывод в Grafana Ваших бизнес-метрик. Так же, если потребуется, можно добавить Alertmanager и отправку алармов на e-mail