Git Product home page Git Product logo

momo-store's Introduction

Momo Store aka Пельменная №2

image

Frontend локальная сборка

npm install
NODE_ENV=production VUE_APP_API_URL=http://localhost:8081 npm run serve

Backend локальная сборка

go run ./cmd/api
go test -v ./... 

Ссылка на развернутое приложение: momo-store.hopto.org.
IP: 84.201.129.209

Реализован полный цикл сборки-поставки приложения, используя практики CI/CD

  1. Код хранится в GitLab с использованием модели ветвления github flow.
  2. В проекте присутствует модульный .gitlab-ci.yml, в котором описаны шаги сборки. Изменения в папках frontend и backend запускаются дочерние пайплайны, который лежат в соответствующих папках.
  3. Артефакты сборки публикуются в систему хранения Nexus (архивы фронтенда, бинарные файлы бэкенда, docker-образы хранятся в Gitlab Container Registry.
  4. Артефакты сборки версионируются по правилам SemVer2.
  5. Написаны Dockerfile'ы для сборки Docker-образов бэкенда и фронтенда.
    • Бэкенд: бинарный файл Go в Docker-образе.
    • Фронтенд: HTML-страница раздаётся с Nginx.
  6. В GitLab CI описаны шаги сборки и публикации артефактов.
  7. В GitLab CI описаны шаги тестирования (тесты Sonarqube для фронтенда: eslint-sast, gosec-sast, nodejs-scan-sast, semgrep-sast, sonarqube-frontend; тесты unit и Sonarqube для бэкенда: semgrep-sast, sonarqube-backend).
  8. В GitLab CI описан шаг деплоя в кластер Docker Swarm из трех нод (manager и 2 worker).
  9. Кластер Docker Swarm развернут в облаке Yandex.Cloud.
  10. Кластер Docker Swarm описан в виде кода Terraform, код хранится в GitLab.
  11. Конфигурация всех необходимых ресурсов описана согласно IaC.
  12. Состояние Terraform'а хранится в S3.
  13. Картинки, которые использует сайт, хранятся в S3.
  14. Секреты не хранятся в открытом виде.
  15. Для удобства визуального контроля за кластером установлен Portainer (http://84.201.129.209:9000/, гостевые парамерты входа: guest:DF2cUq5pxphgEBude68w).
  16. Дашборд мониторинга Grafana (http://84.201.129.209:3000, гостевые парамерты входа: guest:DF2cUq5pxphgEBude68w).

Развертываение инфраструктуры

Развертываение инфраструктуры проводить Terraform'ом с установленным провайдером Yandex.Cloud, ключи запуска:

terraform init -backend-config "access_key=$YC_STORAGE_ACCESS_KEY" -backend-config "secret_key=$YC_STORAGE_SECRET_KEY" -reconfigure
terraform apply --auto-approve -var=s3_access_key=$YC_STORAGE_ACCESS_KEY -var=s3_secret_key=$YC_STORAGE_SECRET_KEY -var=IAM_token=$IAM_token
terraform destroy --auto-approve -var=s3_access_key=$YC_STORAGE_ACCESS_KEY -var=s3_secret_key=$YC_STORAGE_SECRET_KEY -var=IAM_token=$IAM_token

Terraform поднимает в облаке указанное в переменных variables.tf количество виртуальных машин для управляющих и рабочих нод кластера (по-умолчанию 1 и 2 соответственно), параметры RAM, CPU, disk и т.д. задаются в том же файле.
Также Terraform:

  • устанавливает на все виртуальные машины пакеты, необходимые для работы docker,
  • на мастер-ноде запускает команду инициализации кластера на дефолтном сетевом интерфейсе docker swarm init --advertise-addr eth0 и устанавливает Portainer,
  • рабочие ноды добавляются в кластер с полученным на предыдущем шаге токеном командой docker swarm join {ip_master_node}:2377 --token $TOKEN

После завершения работы Terraform получаем полностью работоспособный и готовый к работе кластер из 3 нод. Внешний IP-адрес управляющей ноды следует через веб-интерфейс console.cloud.yandex.ru назначить статическим и добавить в переменную Gitlab как SWARM_HOST. Последний шаг - скопировать картинки сайта в s3 бакет и облачная инфраструктура готова к деплою приложения.


Развертываение приложения

В переменные Gitlab SSH_PRIVATE_KEY_SWARM и SSH_PUBLIC_KEY_SWARM положить предварительно сгенерированные SSH ключи для авторизации раннеров на нодах кластера.
При запуске Run pipeline или изменении файлов проекта в директориях frontend или backend, после выполнения всех этапов и шагов, произойдет автоматический деплой в подготовленную облачную инфраструктуру.

momo-store's People

Contributors

bbrodriges avatar sudmed avatar voborgus avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.