Современные практики DevOps: от разработки до развертывания

Введение в DevOps

Значимость DevOps в современном IT

DevOps (Development and Operations) — это культурная философия и набор практик, направленных на объединение разработчиков (Dev), операционных инженеров (Ops) и других участников процесса разработки программного обеспечения. В 2025 году DevOps стал неотъемлемой частью цифровой трансформации и имеет критическое значение для бизнеса:

  1. Ускорение цифровой трансформации: Современные компании используют DevOps для сокращения времени вывода продуктов на рынок с нескольких месяцев до нескольких часов.
  2. Автоматизация и AI/ML интеграция: Внедрение искусственного интеллекта и машинного обучения в процессы CI/CD для предиктивной аналитики и автоматического масштабирования.
  3. Качество и безопасность: DevSecOps обеспечивает встроенную безопасность на всех этапах разработки, снижая количество уязвимостей на 70%.
  4. Экономическая эффективность: Автоматизация снижает операционные расходы на 30-50% и повышает производительность команд.
  5. Устойчивость к кризисам: Пандемия показала важность гибких и масштабируемых систем для удаленной работы.

Современные принципы DevOps (CALMS Framework)

Современный DevOps основан на расширенной модели CALMS:

  • Culture (Культура): Создание психологически безопасной среды, где команды экспериментируют и учатся на ошибках.
  • Automation (Автоматизация): Полная автоматизация конвейера поставки ПО от коммита до продакшена.
  • Lean (Бережливость): Минимизация потерь и оптимизация процессов на основе данных.
  • Measurement (Измерение): Сбор метрик DORA (DevOps Research and Assessment) для оценки производительности.
  • Sharing (Обмен знаниями): Внутренние сообщества практик и внешние open-source проекты.
  • Security (Безопасность): Встроенная безопасность (DevSecOps) на всех этапах жизненного цикла.

Непрерывная интеграция и развертывание (CI/CD) в 2025 году

Современные подходы к CI/CD включают:

  • GitOps: Декларативное управление инфраструктурой через Git с автоматической синхронизацией состояния.
  • Progressive Delivery: Постепенное развертывание с канареечными тестами, A/B тестированием и feature flags.
  • Infrastructure as Code (IaC): Управление инфраструктурой через код с использованием Terraform, Pulumi.
  • Policy as Code: Автоматическая проверка соответствия политикам безопасности и комплаенса.
  • Непрерывная интеграция (CI): Автоматическое тестирование каждого коммита с использованием параллельных тестов и кэширования.
  • Непрерывная доставка (CD): Автоматическое развертывание в staging среду с ручным подтверждением для production.
  • Непрерывное развертывание (CD): Полностью автоматическое развертывание в production после прохождения всех тестов.

Средства автоматизации

В DevOps используется множество инструментов для автоматизации различных аспектов процесса разработки и развертывания:

  • Системы управления версиями: Git, SVN.
  • Инструменты для CI/CD: Jenkins, GitLab CI, CircleCI.
  • Конфигурационные менеджеры: Ansible, Puppet, Chef.
  • Контейнеризация: Docker, Kubernetes.
  • Мониторинг и логирование: Prometheus, Grafana, ELK Stack.

Эти инструменты помогают снизить человеческий фактор, ускорить процессы и повысить надежность и предсказуемость систем.

DevSecOps: Безопасность в DevOps

Важность безопасности в современном DevOps

DevSecOps интегрирует безопасность на каждом этапе жизненного цикла разработки, превращая ее из финального этапа в непрерывный процесс:

Ключевые принципы DevSecOps:

  • Shift Left Security: Перенос проверок безопасности на ранние стадии разработки
  • Automated Security Testing: Автоматическое сканирование уязвимостей в коде и зависимостях
  • Compliance as Code: Автоматическая проверка соответствия стандартам (GDPR, HIPAA, PCI-DSS)
  • Continuous Monitoring: Постоянный мониторинг безопасности в production

Инструменты DevSecOps:

  • SAST (Static Application Security Testing): SonarQube, Checkmarx, Veracode
  • DAST (Dynamic Application Security Testing): OWASP ZAP, Burp Suite
  • Container Security: Twistlock, Aqua Security, Sysdig Secure
  • Secrets Management: HashiCorp Vault, AWS Secrets Manager, Azure Key Vault
  • Vulnerability Scanning: Nessus, OpenVAS, Qualys VMDR

Облачные платформы и DevOps

Современные облачные подходы

Облачные платформы стали неотъемлемой частью DevOps, предоставляя масштабируемую и гибкую инфраструктуру:

Основные облачные провайдеры:

  • Amazon Web Services (AWS): EC2, ECS, EKS, Lambda, CodePipeline, CodeBuild
  • Microsoft Azure: Azure DevOps, AKS, Azure Container Instances, GitHub Actions
  • Google Cloud Platform (GCP): GKE, Cloud Build, Cloud Run, Artifact Registry
  • Multi-cloud стратегии: Использование нескольких облаков для повышения надежности

Преимущества облачного DevOps:

  • Эластичность: Автоматическое масштабирование по требованию
  • Глобальное распределение: Развертывание приложений по всему миру
  • Управление затратами: Оплата только за использованные ресурсы
  • Managed Services: Использование управляемых сервисов вместо самообслуживания

Мониторинг и наблюдаемость (Observability)

Три столпа наблюдаемости

Современный мониторинг основан на трех ключевых типах данных:

1. Метрики (Metrics):

  • Системные метрики: CPU, память, диск, сеть
  • Прикладные метрики: количество запросов, время ответа, процент ошибок
  • Бизнес-метрики: конверсия, выручка, активные пользователи

2. Логи (Logs):

  • Структурированные логи в формате JSON
  • Централизованное хранение и анализ
  • Корреляция логов между микросервисами

3. Трейсы (Traces):

  • Распределенный трейсинг запросов между микросервисами
  • Анализ производительности и выявление узких мест
  • Инструменты: Jaeger, Zipkin, AWS X-Ray

Современные инструменты мониторинга:

  • Prometheus + Grafana: Сбор метрик и визуализация
  • ELK/EFK Stack: Сбор и анализ логов
  • Jaeger/Zipkin: Распределенный трейсинг
  • New Relic, DataDog, Splunk: Комплексные платформы observability
  • Sentry: Мониторинг ошибок в приложениях
  • PagerDuty, OpsGenie: Управление инцидентами

SRE и Error Budgets

Site Reliability Engineering (SRE) применяет принципы DevOps к управлению надежностью:

  • Service Level Objectives (SLO): Целевые показатели доступности и производительности
  • Error Budget: Допустимое количество простоев для баланса между скоростью и надежностью
  • Blameless Culture: Культура без вины, фокусирующаяся на улучшении систем

Выводы

Современный DevOps в 2025 году представляет собой комплексную экосистему, включающую автоматизацию, безопасность, мониторинг и облачные технологии. Организации, успешно внедряющие DevOps-практики, достигают:

  • Сокращения времени вывода продуктов на рынок на 60-80%
  • Повышения частоты релизов в 200 раз
  • Снижения количества инцидентов на 50-70%
  • Улучшения стабильности систем и удовлетворенности пользователей

Системы управления версиями (VCS)

Введение в системы управления версиями (VCS)

  • Определение VCS: Системы управления версиями (Version Control Systems) позволяют отслеживать изменения в файлах и управлять версиями кода, обеспечивая контроль над историей изменений и возможность совместной работы.
  • Важность VCS в DevOps: VCS являются основой для процессов CI/CD и автоматизации, позволяя эффективно управлять изменениями кода и обеспечивая стабильность и предсказуемость разработки.

Типы систем управления версиями

  1. Локальные системы управления версиями (Local VCS)
    • Хранят версии файлов локально на одном компьютере.
    • Пример: RCS (Revision Control System).
    • Плюсы: Простота использования.
    • Минусы: Ограниченная возможность совместной работы, высокий риск потери данных при сбое компьютера.
  2. Централизованные системы управления версиями (Centralized VCS)
    • Хранят все версии файлов на одном центральном сервере.
    • Примеры: SVN (Apache Subversion), CVS (Concurrent Versions System).
    • Плюсы: Улучшенная поддержка совместной работы, централизованное управление.
    • Минусы: Уязвимость к сбоям сервера, ограниченная поддержка работы в оффлайн-режиме.
  3. Распределенные системы управления версиями (Distributed VCS)
    • Каждое рабочее место разработчика содержит полный клон репозитория, включая историю изменений.
    • Примеры: Git, Mercurial.
    • Плюсы: Высокая надежность и производительность, поддержка работы в оффлайн-режиме, гибкость.
    • Минусы: Более сложное администрирование.

Основные функции VCS

  • Отслеживание изменений: Возможность отслеживания всех изменений, внесенных в проект, с указанием автора и времени изменения.
  • Создание веток (branching): Разделение разработки на параллельные потоки, что позволяет работать над новыми функциями, исправлениями и экспериментами без влияния на основную ветку.
  • Слияние изменений (merging): Объединение изменений из разных веток в одну, позволяя интегрировать разработки различных команд и разработчиков.
  • Ревертинг (reverting): Возможность отката к предыдущим версиям кода, что позволяет быстро исправить ошибки и вернуть рабочую версию.

Популярные системы управления версиями

  1. Git
    • Описание: Самая популярная распределенная система управления версиями, созданная Линусом Торвальдсом в 2005 году.
    • Особенности: Высокая производительность, надежность, гибкость в работе с ветками и слиянием.
    • Инструменты: GitHub, GitLab, Bitbucket – платформы для хостинга Git-репозиториев с дополнительными возможностями для управления проектами.
    • Команды: git init, git clone, git add, git commit, git push, git pull, git branch, git merge, git rebase.
  2. Mercurial
    • Описание: Другая популярная распределенная система управления версиями, разработанная для повышения производительности и простоты использования.
    • Особенности: Простота в использовании, хорошая производительность, но меньшее сообщество и количество инструментов по сравнению с Git.
    • Инструменты: Bitbucket – платформа, которая поддерживает как Git, так и Mercurial репозитории.
    • Команды: hg init, hg clone, hg add, hg commit, hg push, hg pull, hg branch, hg merge.
  3. SVN (Apache Subversion)
    • Описание: Централизованная система управления версиями, популярная в корпоративных средах.
    • Особенности: Надежность и стабильность, централизованное управление, но ограниченная поддержка оффлайн-режима и масштабируемости по сравнению с распределенными системами.
    • Команды: svn checkout, svn update, svn commit, svn add, svn delete, svn merge, svn revert.

Практическое использование VCS

  • Создание репозитория в Git:
    • Шаг 1: Инициализация нового репозитория.

      1git init
      
    • Шаг 2: Клонирование существующего репозитория.

      1git clone <repository-url>
      
    • Шаг 3: Добавление файлов в индекс и коммит изменений.

      1git add <file>
      2git commit -m "Initial commit"
      
    • Шаг 4: Создание новой ветки и переключение на нее.

      1git branch new-feature
      2git checkout new-feature
      
    • Шаг 5: Слияние веток.

      1git checkout main
      2git merge new-feature
      
  • Использование GitHub для совместной работы:
    • Шаг 1: Создание нового репозитория на GitHub.

    • Шаг 2: Настройка удаленного репозитория.

      1git remote add origin <repository-url>
      2git push -u origin main
      
    • Шаг 3: Создание pull request для предложенных изменений.

    • Шаг 4: Ревью и слияние pull request.

Непрерывная интеграция (CI) и непрерывное развертывание (CD)

Определение CI и CD

  • Непрерывная интеграция (Continuous Integration, CI)
    • Практика регулярного слияния изменений в коде в основной репозиторий. Каждый коммит проверяется автоматическими сборками и тестами, чтобы гарантировать, что изменения не нарушают существующую функциональность.
    • Цель: Раннее обнаружение ошибок и проблем, минимизация рисков и затрат на исправление багов.
  • Непрерывное развертывание (Continuous Deployment, CD)
    • Процесс автоматического развертывания кода в различные среды (тестирование, стейджинг, продуктив) после прохождения всех этапов тестирования.
    • Цель: Быстрая и надежная доставка новых функций и исправлений пользователям.

Процесс CI/CD

  1. Написание и объединение кода
    • Разработчики пишут код и регулярно коммитят его в систему управления версиями (например, Git).
    • Инструменты: Git, GitHub, GitLab.
  2. Автоматизированное тестирование
    • После каждого коммита запускаются автоматические тесты, которые проверяют новый код на наличие ошибок и соответствие требованиям.
    • Инструменты: JUnit, Selenium, TestNG, Jest.
  3. Сборка и артефакты
    • Успешные тесты инициируют процесс сборки, создавая артефакты (например, исполняемые файлы, контейнеры).
    • Инструменты: Maven, Gradle, Docker.
  4. Развертывание
    • Сборка автоматически разворачивается в тестовой среде для дополнительного тестирования, затем в стейджинг и, наконец, в продуктивную среду.
    • Инструменты: Jenkins, Ansible, Kubernetes.
  5. Мониторинг и обратная связь
    • После развертывания приложение мониторится на предмет производительности и ошибок. Обратная связь используется для улучшения кода.
    • Инструменты: Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana).

Преимущества CI/CD

  • Ранняя идентификация ошибок
    • Систематическое и частое тестирование позволяет быстро выявлять и исправлять ошибки, прежде чем они попадут в продуктивную среду.
  • Быстрая доставка функционала
    • Автоматизация процессов развертывания позволяет быстрее доставлять новые функции и улучшения пользователям, повышая их удовлетворенность.
  • Уменьшение риска развертывания
    • Автоматизация и стандартизация процессов развертывания снижает вероятность человеческих ошибок и обеспечивает предсказуемость результатов.

Инструменты для CI/CD

  1. Jenkins
    • Один из самых популярных инструментов для настройки CI/CD пайплайнов.
    • Поддерживает большое количество плагинов для интеграции с различными системами и инструментами.
  2. GitLab CI/CD
    • Интегрированный инструмент CI/CD, который работает непосредственно с репозиториями GitLab.
    • Обеспечивает простой и интуитивно понятный интерфейс для настройки пайплайнов.
  3. CircleCI
    • Облачный сервис для CI/CD, который позволяет легко масштабировать процессы сборки и развертывания.
    • Поддерживает интеграцию с GitHub и Bitbucket.
  4. Travis CI
    • Облачный сервис для CI, который особенно популярен среди проектов с открытым исходным кодом.
    • Легко настраивается и интегрируется с GitHub.

Средства автоматизации

Зачем нужна автоматизация?

  • Экономия времени: Автоматизация позволяет выполнять рутинные задачи быстрее и освобождает время для более сложных и творческих задач.
  • Минимизация человеческого фактора: Снижается вероятность ошибок, вызванных человеческим фактором, поскольку задачи выполняются по строго заданным сценариям.
  • Повышение стабильности и предсказуемости: Автоматизированные процессы выполняются одинаково каждый раз, что повышает стабильность и предсказуемость результатов.

Категории средств автоматизации

  1. Инструменты управления конфигурацией
    • Ansible
      • Описание: Инструмент для автоматизации задач управления конфигурацией, развертывания приложений и оркестрации.
      • Особенности: Использует простой язык YAML для написания сценариев (playbooks), агентless архитектура.
      • Примеры использования: Настройка серверов, развертывание приложений, управление сетевой конфигурацией.
    • Chef
      • Описание: Инструмент для управления конфигурацией и автоматизации развертывания.
      • Особенности: Использует язык Ruby для написания сценариев (recipes), модель client-server.
      • Примеры использования: Управление инфраструктурой как кодом, развертывание приложений, автоматизация процессов обновления.
    • Puppet
      • Описание: Инструмент для управления конфигурацией и автоматизации ИТ-инфраструктуры.
      • Особенности: Использует декларативный язык для описания состояния системы, модель client-server.
      • Примеры использования: Настройка серверов, управление конфигурацией ПО, обеспечение соответствия политик безопасности.
  2. Инструменты контейнеризации и оркестрации
    • Docker
      • Описание: Платформа для контейнеризации, позволяющая упаковывать приложения и их зависимости в контейнеры.
      • Особенности: Легкость и портативность контейнеров, возможность запуска на любых платформах.
      • Примеры использования: Создание и развертывание контейнеризированных приложений, управление зависимостями, повышение изоляции приложений.
    • Kubernetes
      • Описание: Система оркестрации контейнеров для автоматизации развертывания, масштабирования и управления контейнерными приложениями.
      • Особенности: Поддержка автоматического масштабирования, самовосстановление, управление сетями и хранилищем.
      • Примеры использования: Развертывание микросервисной архитектуры, управление кластерами контейнеров, автоматизация DevOps процессов.
  3. Инструменты мониторинга и логирования
    • Prometheus
      • Описание: Система мониторинга и оповещения с возможностью сбора и анализа метрик.
      • Особенности: Поддержка мультидименсиональной модели данных, мощный язык запросов PromQL, интеграция с различными системами.
      • Примеры использования: Мониторинг производительности приложений, сбор и анализ метрик, настройка оповещений.
    • Grafana
      • Описание: Инструмент для визуализации данных, собранных системами мониторинга.
      • Особенности: Поддержка множества источников данных, гибкие и настраиваемые дашборды.
      • Примеры использования: Визуализация метрик, создание дашбордов для мониторинга, интеграция с Prometheus.
    • ELK Stack (Elasticsearch, Logstash, Kibana)
      • Описание: Набор инструментов для логирования и анализа данных.
      • Elasticsearch: Хранилище и поисковая система.
      • Logstash: Инструмент для сбора и обработки логов.
      • Kibana: Визуализация данных из Elasticsearch.
      • Примеры использования: Сбор и анализ логов, поиск и визуализация данных, создание дашбордов для мониторинга логов.

Docker

Docker - это платформа с открытым исходным кодом, предназначенная для разработки, доставки и запуска приложений в контейнерах. Docker обеспечивает унификацию окружений разработки и развертывания, что позволяет программистам, системным администраторам и DevOps-инженерам легко создавать, управлять и масштабировать приложения в любой среде.

Основные компоненты Docker

  1. Docker Engine: Ядро Docker, которое позволяет создавать и запускать контейнеры на хост-системе. Он включает в себя демон Docker (dockerd) и клиентские утилиты (docker).

  2. Docker Image: Шаблон для создания контейнера, который включает в себя приложение и все его зависимости, необходимые для его работы. Docker Image является основой для создания контейнеров.

  3. Docker Container: Экземпляр Docker Image, который запущен и работает в изолированной среде. Контейнер обеспечивает непрерывное окружение для выполнения приложения, где все зависимости настроены и изолированы.

  4. Dockerfile: Текстовый файл, который содержит инструкции для построения Docker Image. С помощью Dockerfile можно определить, какие зависимости и конфигурации должны быть включены в образ.

  5. Docker Registry: Централизованное хранилище для Docker Image. Он позволяет пользователям обмениваться и загружать образы, а также управлять доступом к ним. Некоторые известные реализации Docker Registry включают Docker Hub, AWS Elastic Container Registry (ECR) и Google Container Registry (GCR).

Преимущества Docker

  1. Изолированность: Контейнеры обеспечивают изоляцию приложений и их зависимостей, что позволяет избежать конфликтов между приложениями и обеспечивает надежность и безопасность.

  2. Портативность: Docker обеспечивает унифицированный способ упаковки приложений и их зависимостей в образы, которые могут быть легко перенесены и запущены в любой среде, поддерживающей Docker.

  3. Масштабируемость: Docker позволяет горизонтально масштабировать приложения, запуская несколько экземпляров контейнеров и управляя ими с помощью оркестраторов, таких как Docker Swarm и Kubernetes.

  4. Эффективное использование ресурсов: Контейнеры используют общие ядра операционной системы и обеспечивают более легкий и эффективный способ развертывания приложений по сравнению с виртуальными машинами.

  5. Ускоренный цикл разработки: Docker упрощает развертывание и управление окружениями разработки, что позволяет разработчикам быстрее создавать, тестировать и развертывать приложения.

Как работает Docker

  1. Создание образа: Разработчики определяют Dockerfile, который содержит инструкции для построения Docker Image. Этот файл определяет, какие зависимости и файлы должны быть включены в образ.

  2. Построение образа: Docker Engine использует Dockerfile для сборки Docker Image. Он загружает необходимые зависимости из Docker Registry, выполняет инструкции Dockerfile и создает образ.

  3. Запуск контейнера: После создания Docker Image, Docker Engine использует его для запуска контейнера. В этом контейнере приложение запускается и работает в изолированной среде.

  4. Управление контейнерами: Docker предоставляет команды для управления контейнерами, такие как запуск, остановка, удаление и мониторинг. Это позволяет администраторам легко управлять приложениями и их окружениями.

Docker стал неотъемлемой частью инфраструктуры в сфере разработки и развертывания приложений благодаря своей простоте, эффективности и портативности. Он обеспечивает непрерывное и надежное развертывание приложений в любой среде, что делает его основой для современной DevOps практики.

Пример развертывания приложения на Express.js

Введение

В этом разделе мы рассмотрим пошаговый процесс развертывания приложения на Express.js. Мы создадим простое приложение, настроим его для развертывания в Docker, и развернем его с использованием Docker Compose. Также настроим CI/CD pipeline с использованием GitHub Actions для автоматического развертывания.

Шаг 1: Создание простого приложения на Express.js

  1. Установка Node.js и npm: Убедитесь, что у вас установлены Node.js и npm. Если нет, скачайте и установите их с официального сайта Node.js.

  2. Создание нового проекта:

    1mkdir my-express-app
    2cd my-express-app
    3npm init -y
    
  3. Установка Express.js:

    1npm install express
    
  4. Создание файла index.js:

     1const express = require('express');
     2const app = express();
     3const port = process.env.PORT || 3000;
     4
     5app.get('/', (req, res) => {
     6  res.send('Hello World!');
     7});
     8
     9app.listen(port, () => {
    10  console.log(`App is listening at http://localhost:${port}`);
    11});
    
  5. Обновление package.json: В разделе scripts добавьте команду для запуска приложения:

    1"scripts": {
    2  "start": "node index.js"
    3}
    
  6. Запуск приложения:

    1npm start
    

    Проверьте работу приложения, открыв в браузере http://localhost:3000.

Шаг 2: Настройка Docker для контейнеризации приложения

  1. Создание файла Dockerfile:

     1FROM node:14
     2
     3WORKDIR /usr/src/app
     4
     5COPY package*.json ./
     6
     7RUN npm install
     8
     9COPY . .
    10
    11EXPOSE 3000
    12
    13CMD ["npm", "start"]
    
  2. Создание файла .dockerignore:

    1node_modules
    2npm-debug.log
    
  3. Построение Docker образа:

    1docker build -t my-express-app .
    
  4. Запуск контейнера:

    1docker run -p 3000:3000 my-express-app
    

    Приложение будет доступно по адресу http://localhost:3000.

Шаг 3: Настройка Docker Compose

  1. Создание файла docker-compose.yml:

     1version: '3.8'
     2
     3services:
     4  app:
     5    image: my-express-app
     6    build: .
     7    ports:
     8      - "3000:3000"
     9    environment:
    10      - NODE_ENV=production
    
  2. Запуск приложения с помощью Docker Compose:

    1docker-compose up
    

Шаг 4: Настройка CI/CD pipeline с использованием GitHub Actions

  1. Создание файла конфигурации GitHub Actions: В вашем репозитории на GitHub создайте директорию .github/workflows и файл ci-cd.yml внутри нее.

     1name: CI/CD Pipeline
     2
     3on:
     4  push:
     5    branches:
     6      - main
     7  pull_request:
     8    branches:
     9      - main
    10
    11jobs:
    12  build:
    13    runs-on: ubuntu-latest
    14
    15    steps:
    16      - name: Checkout code
    17        uses: actions/checkout@v2
    18
    19      - name: Set up Node.js
    20        uses: actions/setup-node@v2
    21        with:
    22          node-version: '14'
    23
    24      - name: Install dependencies
    25        run: npm install
    26
    27      - name: Run tests
    28        run: npm test
    29
    30      - name: Build Docker image
    31        run: docker build -t my-express-app .
    32
    33      - name: Log in to DockerHub
    34        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
    35
    36      - name: Push Docker image
    37        run: docker push my-express-app
    
  2. Добавление секретов в GitHub: Перейдите в настройки репозитория на GitHub и добавьте секреты DOCKER_USERNAME и DOCKER_PASSWORD для аутентификации в DockerHub.

  3. Push изменений в репозиторий:

    1git add .
    2git commit -m "Setup CI/CD pipeline"
    3git push origin main
    

GitHub Actions автоматически запустит pipeline при каждом push или pull request в ветку main. Pipeline будет включать сборку и тестирование приложения, создание Docker образа и его публикацию в DockerHub.

Заключение

В этом разделе мы рассмотрели, как создать простое приложение на Express.js, контейнеризировать его с помощью Docker, настроить Docker Compose для управления контейнерами и настроить CI/CD pipeline с использованием GitHub Actions. Эти шаги помогут вам автоматизировать процесс развертывания и управления приложениями, следуя принципам DevOps.

← REST интерфейс и аутентификация … Веб-безопасность: защита современных … →