DevOps-у

1. Общие сведения

Фронтент, бэкенд и базу данных вашего проекта Jenkins автоматически деплоит в кластер Kubernetes по по веб-хуку из Gitea. Jenkins собирает Docker образ в соответствии с Dockerfile в корне репозитория, и деплоит helm чарт из директории helm/ в кластер Kubernetes


2. Фронтенд

Инфраструктурные настройки фронтенда вашего проекта расположены в репозиториии frontend в Gitea.


В Dockerfile вы можете задать версию Nginx, реализующего функцию фронтенда. Мы рекомендуем использовать официальный легковесный Docker образ Nginx на базе Alpine Linux. Найдите актуальную версию nginx на сайте https://hub.docker.com/_/nginx и задайте в Dockerfile


Настроить Nginx вы можете в диретории helm/configs/ для каждого контура отдельно в директориях development, staging и production. Из файлов конфигурации в указанных выше директориях будут созданы ConginMap и подключены в модули фронтендов в контурах development, staging и production

В Jenkinfile вы можете задать количество реплик фронтенда для каждого контура отдельно. Для development в переменной reviewReplicaCount, для staging в stagingReplicaCount, для production в productionReplicaCount


3. Бэкенд

В зависимости от выбранного языка програмирования для бэкенда мы предлагаем готовые Docker образы:


для языка PHP:

php-fpm из официального образа на базе Alpine Linux https://hub.docker.com/_/php


для языка Python:

gunicorn или uWSGI из официального образа на базе Alpine Linux https://hub.docker.com/_/python


Задать версию языка разработки и установить необходимые модули вы можете в Dockerfile


Настроить бэкенд вы можете в диретории helm/configs/ для каждого контура отдельно в директориях development, staging и production. Из файлов конфигурации в указанных выше директориях будут созданы ConginMap и подключены в модули фронтендов в контурах development, staging и production

В Jenkinfile вы можете задать количество реплик бэкенда для каждого контура отдельно. Для development в переменной reviewReplicaCount, для staging в stagingReplicaCount, для production в productionReplicaCount


4. Shared диск между бэкендом и фронтендом

Для увеличения скорости работы, статику web-сайта вашего проекта (css, img, javascript) отдает Nginx в модуле фронтенда. В каждом контуре создан shared Persistent Volume в режиме - ReadWriteMany. В helm чарте бэкенда helm/templates/shared-pvc.yaml создается PVC, при помощи которой shared PV подключается одновременно к модулю бэкенда и фронтенда. Вы можете найти найти директорию, к которой подключается shared PV в helm чарте бэкенда helm/templates/deployment.yaml


- name: shared-volume
  mountPath: /var/www/html/public/build/

В эту директорию разработчики должны поместить всю статику web-сайта вашего проекта. Посмотреть к какой директории на фронтенде подключается shared PV можно в helm чарте фронтенда helm/templates/deployment.yaml


- name: shared-volume
  mountPath: /usr/share/nginx/html/build

Связанный с данной директорией location Nginx вы можете в конфиге Nginx helm/configs/{development,staging,production}/nginx/conf.d/default.conf


5. База данных

Из коробки мы предустанавливаем в каждый контур (development, staging, production) базу данных MySQL или PostgreSQL.


Для базы данных MySQL мы создаем репозиторий в Gitea и пайплайн в Jenkins с именем mysql. Для базы данных PostgreSQL репозиторий в Gitea и пайплайн в Jenkins с именем postgres


Задать версию БД вы можете в Dockerfile. Мы используем официальные Docker образы:


MySQL - https://hub.docker.com/_/mysql
PostgreSQL - https://hub.docker.com/_/postgres

Настроить базу данных можно для каждого из 3х контуров отдельно в директориях helm/configs/{development,staging,production}


В репозитории базы данных созданы 3 ветки, каждая из которых деплоит БД в заданный контур:


ветка development в development контур
ветка staging в staging контур
ветка production в production контур

В каждый контур для управления MySQL установлен phpMyAdmin и для управления PostgreSQL установлен pgadmin4


Для phpMyAdmin мы используем официальный Docker образ https://hub.docker.com/_/phpmyadmin
версию phpMyAdmin можно задать в helm/charts/phpmyadmin/values.yaml

для pgadmin4 мы используем Docker образ https://hub.docker.com/r/dpage/pgadmin4
версию можно задать в субчарте helm/charts/pgadmin/values.yaml

web-интерфейсы доступны по ссылкам:


https://phpmyadmin.development.example.com
https://phpmyadmin.staging.example.com
https://phpmyadmin.production.example.com
https://pgadmin.development.example.com
https://pgadmin.staging.example.com
https://pgadmin.production.example.com

6. Сетевая безопасность кластера Kubernetes

Мы настроили сетевую безопасность в кластере Kubernetes следуя концепции Zero Trust Network Access. Немспейсы инстансов и контуров development, staging и production изолировали друг от друга. Между неймспейсами разрешен трафик минимально достаточны для работы кластера. Сетевые политики вы можете найти в вашей домашней директоии в файле networkpolicy.yaml


На хост Kubernetes закрыт весь трафик кроме ICMP на вход и на выход и TCP на вход 22,2222 порты на SSH и 80 и 443 порты HTTP/PTTPs доступа к web-интерфейсам Gitea, Jenkins, Grafana и вашему сайту. Сетевые политики для хоста вы можете найти в вашей домашней директории в файле networkpolicy-host.yaml