ВГТУ
2025-11-13
DevOps (Development and Operations) — это культурная философия и набор практик, направленных на объединение разработчиков (Dev), операционных инженеров (Ops) и других участников процесса разработки программного обеспечения. В 2025 году DevOps стал неотъемлемой частью цифровой трансформации и имеет критическое значение для бизнеса:
Современный DevOps основан на расширенной модели CALMS:
Современные подходы к CI/CD включают:
В 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, предоставляя масштабируемую и гибкую инфраструктуру:
Основные облачные провайдеры: - 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: Использование управляемых сервисов вместо самообслуживания
Современный мониторинг основан на трех ключевых типах данных:
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: Управление инцидентами
Site Reliability Engineering (SRE) применяет принципы DevOps к управлению надежностью:
Современный DevOps в 2025 году представляет собой комплексную экосистему, включающую автоматизацию, безопасность, мониторинг и облачные технологии. Организации, успешно внедряющие DevOps-практики, достигают: - Сокращения времени вывода продуктов на рынок на 60-80% - Повышения частоты релизов в 200 раз - Снижения количества инцидентов на 50-70% - Улучшения стабильности систем и удовлетворенности пользователей
git init, git clone, git add, git commit, git push, git pull, git branch, git merge, git rebase.hg init, hg clone, hg add, hg commit, hg push, hg pull, hg branch, hg merge.svn checkout, svn update, svn commit, svn add, svn delete, svn merge, svn revert.Шаг 1: Инициализация нового репозитория.
Шаг 2: Клонирование существующего репозитория.
Шаг 3: Добавление файлов в индекс и коммит изменений.
Шаг 4: Создание новой ветки и переключение на нее.
Шаг 5: Слияние веток.
Шаг 1: Создание нового репозитория на GitHub.
Шаг 2: Настройка удаленного репозитория.
Шаг 3: Создание pull request для предложенных изменений.
Шаг 4: Ревью и слияние pull request.
Docker - это платформа с открытым исходным кодом, предназначенная для разработки, доставки и запуска приложений в контейнерах. Docker обеспечивает унификацию окружений разработки и развертывания, что позволяет программистам, системным администраторам и DevOps-инженерам легко создавать, управлять и масштабировать приложения в любой среде.
Docker Engine: Ядро Docker, которое позволяет создавать и запускать контейнеры на хост-системе. Он включает в себя демон Docker (dockerd) и клиентские утилиты (docker).
Docker Image: Шаблон для создания контейнера, который включает в себя приложение и все его зависимости, необходимые для его работы. Docker Image является основой для создания контейнеров.
Docker Container: Экземпляр Docker Image, который запущен и работает в изолированной среде. Контейнер обеспечивает непрерывное окружение для выполнения приложения, где все зависимости настроены и изолированы.
Dockerfile: Текстовый файл, который содержит инструкции для построения Docker Image. С помощью Dockerfile можно определить, какие зависимости и конфигурации должны быть включены в образ.
Docker Registry: Централизованное хранилище для Docker Image. Он позволяет пользователям обмениваться и загружать образы, а также управлять доступом к ним. Некоторые известные реализации Docker Registry включают Docker Hub, AWS Elastic Container Registry (ECR) и Google Container Registry (GCR).
Изолированность: Контейнеры обеспечивают изоляцию приложений и их зависимостей, что позволяет избежать конфликтов между приложениями и обеспечивает надежность и безопасность.
Портативность: Docker обеспечивает унифицированный способ упаковки приложений и их зависимостей в образы, которые могут быть легко перенесены и запущены в любой среде, поддерживающей Docker.
Масштабируемость: Docker позволяет горизонтально масштабировать приложения, запуская несколько экземпляров контейнеров и управляя ими с помощью оркестраторов, таких как Docker Swarm и Kubernetes.
Эффективное использование ресурсов: Контейнеры используют общие ядра операционной системы и обеспечивают более легкий и эффективный способ развертывания приложений по сравнению с виртуальными машинами.
Ускоренный цикл разработки: Docker упрощает развертывание и управление окружениями разработки, что позволяет разработчикам быстрее создавать, тестировать и развертывать приложения.
Создание образа: Разработчики определяют Dockerfile, который содержит инструкции для построения Docker Image. Этот файл определяет, какие зависимости и файлы должны быть включены в образ.
Построение образа: Docker Engine использует Dockerfile для сборки Docker Image. Он загружает необходимые зависимости из Docker Registry, выполняет инструкции Dockerfile и создает образ.
Запуск контейнера: После создания Docker Image, Docker Engine использует его для запуска контейнера. В этом контейнере приложение запускается и работает в изолированной среде.
Управление контейнерами: Docker предоставляет команды для управления контейнерами, такие как запуск, остановка, удаление и мониторинг. Это позволяет администраторам легко управлять приложениями и их окружениями.
Docker стал неотъемлемой частью инфраструктуры в сфере разработки и развертывания приложений благодаря своей простоте, эффективности и портативности. Он обеспечивает непрерывное и надежное развертывание приложений в любой среде, что делает его основой для современной DevOps практики.
В этом разделе мы рассмотрим пошаговый процесс развертывания приложения на Express.js. Мы создадим простое приложение, настроим его для развертывания в Docker, и развернем его с использованием Docker Compose. Также настроим CI/CD pipeline с использованием GitHub Actions для автоматического развертывания.
Установка Node.js и npm: Убедитесь, что у вас установлены Node.js и npm. Если нет, скачайте и установите их с официального сайта Node.js.
Создание нового проекта:
Установка Express.js:
Создание файла index.js:
Обновление package.json: В разделе scripts добавьте команду для запуска приложения:
Запуск приложения:
Проверьте работу приложения, открыв в браузере http://localhost:3000.
Создание файла Dockerfile:
Создание файла .dockerignore:
node_modules
npm-debug.logПостроение Docker образа:
Запуск контейнера:
Приложение будет доступно по адресу http://localhost:3000.
Создание файла docker-compose.yml:
Запуск приложения с помощью Docker Compose:
Создание файла конфигурации GitHub Actions: В вашем репозитории на GitHub создайте директорию .github/workflows и файл ci-cd.yml внутри нее.
name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build Docker image
run: docker build -t my-express-app .
- name: Log in to DockerHub
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- name: Push Docker image
run: docker push my-express-appДобавление секретов в GitHub: Перейдите в настройки репозитория на GitHub и добавьте секреты DOCKER_USERNAME и DOCKER_PASSWORD для аутентификации в DockerHub.
Push изменений в репозиторий:
GitHub Actions автоматически запустит pipeline при каждом push или pull request в ветку main. Pipeline будет включать сборку и тестирование приложения, создание Docker образа и его публикацию в DockerHub.
В этом разделе мы рассмотрели, как создать простое приложение на Express.js, контейнеризировать его с помощью Docker, настроить Docker Compose для управления контейнерами и настроить CI/CD pipeline с использованием GitHub Actions. Эти шаги помогут вам автоматизировать процесс развертывания и управления приложениями, следуя принципам DevOps.