- backend:
- Исходные коды бэкенда приложения на языке Go
- Мультистейдж Dockerfile для сборки контейнера на базе исходных кодов
- Конфиг файл .gitlab-ci.yml для CI/CD конвейера Gitlab
- frontend:
- исходные коды фронтенда на языке JavaScript
- Мультистейдж Dockerfile для сборки контейнера на основе образа nginx
- Конфиг файл .gitlab-ci.yml для CI/CD конвейера Gitlab
- В папке nginx находится шаблон с конфигом где указаны эндпоинты бэкенда
- k8s-chart
- Helm чарты для развертывания приложений Пельменной №2 и мониторинга в Kubernetes кластер
- Конфиг файл grafana/dashboards/kubernetes.json для импорта дашборда в Grafana
- terraform
- Конфигурационные файлы для разворачивания кластера (Managed Service for Kubernetes в Яндекс облаке)
- В корневой папке находится основной конфиг файл .gitlab-ci.yml для CI/CD конвейера Gitlab
-
Яндекс облако
- Войдите или создайте учетную запись в Яндекс облаке
- Установите интерфейс командной строки Yandex Cloud (CLI)
- Получите данные для аутентификации в облаке для управления инфраструктурой с помощью Terraform
- В консоли управления облаком создайте S3 бакеты:
- с именем terraform-momo-store для хранения статуса terraform
- с именем momo-store-artamokhin-aleksandr для хранения картинок с сайта Пельменной
- Создайте сервисного пользователя и статический ключ для него (нужен для файла backend.tf в папке terraform)
-
Terraform
- Скачайте Terraform из зеркала Yandex.Cloud
- После загрузки добавьте путь к папке с исполняемым файлом в переменную PATH:
export PATH=$PATH:/path/to/terraform
- Укажите источник установки провайдера, добавив следующую конфигурацию в файл ~/.terraformrc (если такого файла нет на вашей машине, его нужно создать):
provider_installation { network_mirror { url = "https://terraform-mirror.yandexcloud.net/" include = ["registry.terraform.io/*/*"] } direct { exclude = ["registry.terraform.io/*/*"] } }
- Перейдите в папку terraform/momo-store и запустите команды:
- export TF_VAR_S3secret_key=<секретная часть статического ключа сервисного пользователя>
- terraform init -backend-config "secret_key=$TF_VAR_S3secret_key"
- terraform plan (убедитесь в правильности конфигурации)
- terraform apply
-
Kubernetes
- Создайте статический ключ для доступа к кластеру
-
SonarQube
- Создайте или войдите в учетную запись SonarQube и создайте в нем проекты
- momo-store-artamokhin
- momo-store-backend-artamokhin
- Создайте или войдите в учетную запись SonarQube и создайте в нем проекты
-
Nexus
- Создайте или войдите в репозиторий Nexus, создайте проект для хранения Helm чартов с именем "momo-store-helm-artamokhin-aleksandr-12"
-
Gitlab
- Добавьте в раздел CI/CD Settings - Variables следующие переменные
- kubeconfig со значением из файла ~/.kube/config, закодированным по алгоритму base64
- Переменные для статических тестов исходных кодов
- SonarQubeLogin
- SonarQubeProjectMomo (линк на проект фронтенда)
- SonarQubeProjectMomoBackend (линк на проект бэкенда)
- SonarQubeToken
- SonarQubeUrl
- Переменные для хранилища артефактов Nexus
- NEXUS_HELM_REPO
- NEXUS_REPO_PASS
- NEXUS_REPO_USER
- dockerconfigjson (Секрет (в base64 формате), необходимый, чтобы взаимодействовать с Docker Registry в GitLab)
- CHAT_ID (ID чата телеграм для отправки сообщений)
- BOT_TOKEN (токен для доступа в телеграм)
- Скачайте Docker образы с Dockerhub в репозиторий Gitlab для избежания превышения лимитов на скачивание
- Укажите логин на личный репозиторий:
docker login -u $login -p $password gitlab.praktikum-services.ru:5050/std-012-056/sausage-store
- Скачайте нужный образ с докерхаба:
docker pull alpine:3.15.0
- Измените тег:
docker tag alpine:3.15.0 gitlab.praktikum-services.ru:5050/std-012-056/sausage-store/alpine:3.15.0
- Отправьте образ в репозиторий Gitlab:
docker push gitlab.praktikum-services.ru:5050/std-012-056/sausage-store/alpine:3.15.0
- Добавьте в раздел CI/CD Settings - Variables следующие переменные
-
DNS
- На сайте https://www.cloudns.net/ создайте доменные записи типа А с IP адресом Ingress контроллера (узнать можно с помощью команды: kubectl get ingress)
- momo-store.cloudns.ph
- grafana.momo-store.cloudns.ph
- prometheus.momo-store.cloudns.ph
- alertmanager.momo-store.cloudns.ph
- На сайте https://www.cloudns.net/ создайте доменные записи типа А с IP адресом Ingress контроллера (узнать можно с помощью команды: kubectl get ingress)
-
Запуск CI/CD происходит:
- в случае изменений в папках backend и frontend по полному циклу со сборкой и разворачиванием Helm чарта в k8s кластер
- при изменениях в папке k8s-chart - только стадия Deploy из папки backend
-
Grafana
- Зайдите в панель управления Grafana
- Добавьте источник данных в меню Connections - Your connections - Data sources - add new - Prometheus
- Выберите пункт меню Dashboards-New-Import и в поле "Import via panel json" вставьте JSON код из файла grafana/dashboards/kubernetes.json