Сайт магазина: https://momo.vnaz.site (сайт не доступен, как и все другие ниже сервисы по причине остановки кубера)
Деплой в Prod: https://momo.vnaz.site приложения выполняетя через ArgoCD в кластер Kubernetes (развернут в Yandex Cloud), каждые 3 минуты проверяет в GitLab ветку main, директорию Helm (charts) и автоматоматческий деплоит если есть изменения.
Деплой в Stage: https://momo-stage.vnaz.site
ArgoCD Application:
- Prod : app-prod.yaml
- Stage: app-stage.yaml
Для GitLab настроил gitlab-runner в k8s, документация по настройке.
helm install --namespace default gitlab-runner -f values.yaml gitlab/gitlab-runner
В директории infra хранятся манифесты по разварачиванию инфраструктуры через Terraform(K8s, Object Storage), а также чарты приложения по ArgoCD и Monitoring.
Изображения пельменной для проекта хранятся в Object Storage.
В Cloud DNS настроеные следующие адреса:
- Prod: https://momo.vnaz.site
- Stage: https://momo-stage.vnaz.site
- ArgoCD: https://argocd.vnaz.site
- Prometheus: https://prometheus.vnaz.site
- Grafana: https://grafana.vnaz.site
Состояние Terraform state (terraform.tfstate) хранится в Object Storage.
Развертываение инфраструктуры с помощью Terraform в Yandex Cloud:
export YC_TOKEN=`yc iam create-token`
terraform init
terraform plan -var "yc_token=${YC_TOKEN}"
terraform apply -var "yc_token=${YC_TOKEN}"
Так же можно создать свой terraform.tfvars :
token = "your OAUTH token"
cloud_id = "your cloud id"
folder_id = "your folder id"
zone = "VPC zone name"
Полная инструкция по разварачиванию всей инфраструктуры для Terraform в Yandex Cloud Provider.
Установка Ingress-контроллера NGINX с менеджером для сертификатов Let's Encrypt по инcтрукции от Yandex Cloud:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx && \
helm repo update && \
helm install ingress-nginx ingress-nginx/ingress-nginx
Установить менеджер сертификатов Сert Manager:
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.9.1/cert-manager.yaml
Создать объект ClusterIssuer:
kubectl apply -f acme-issuer.yml
Доступ в ArgoCD: https://argocd.vnaz.site
cd infra/argocd
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f argocd-ingres-all.yaml
kubectl apply -n argocd -f private-repo.yaml
cd application/
kubectl apply -n argocd -f app-prod.yaml
kubectl apply -n argocd -f app-stage.yaml
Доступ в Grafana: https://grafana.vnaz.site
cd infra/monitoring/grafana
helm install --atomic grafana ./
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install --atomic loki grafana/loki-stack
DataSource: http://loki:3100
Доступ в Prometheus https://prometheus.vnaz.site
cd infra/monitoring/prometheus
helm install --atomic prometheus ./
DataSource: http://prometheus:9090
Для frontend на NGINX добавлен экспортер NGINX Prometheus Exporter.
Документация по настройке NGINX Prometheus Exporter для NGINX Ingress Controller описана тут.
Тестирование в CI с помощью SAST(eslint-sast, gosec-sast, nodejs-scan-sast, semgrep-sast).
Анализ кода в SonarQube.
Helm чарты хранятся в репозитарии GitLab Package Registry и Nexus.
Уведомления о релизах отправляются в мессенджер Telegram.
Алерты о сбое сервисов настроены с помощь Yandex Monitoring.
Версия приложения формируется из переменной VERSION
в пайплайне - 1.0.${CI_PIPELINE_ID}
variables:
VERSION: 1.0.${CI_PIPELINE_ID}
При сборке каждый образ frontend и backend получает tag с номером версии приложения и публикуется в GitLab Container Registry.