О проекте

Упрощенная схема платформы:



Базовый набор OpenSource-инструментов платформы:


IaC и непрерывная интеграция Continuous Integration:   Gitea
Непрерывная доставка Continuous Delivery:   Jenkins
Мониторинг:   Prometheus, Grafana
Сетевая безопасность:    Calico NetworkPolicy (Zero Trust Network Access)
Единый вход SSO во все сервисы:    Keycloak
Фронтенд:   Nginx
Бэкенд:   php-fpm, Gunicorn, uWSGI
База данных:   MySQL (phpMyAdmin), PostgreSQL(pgadmin4)
3 изолированных контура:   development, staging, production
Docker образы бэкенда:   PHP (нативный или Laravel), Python (нативный или Django)

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