Skip to content

IAMN1/page-tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Page Tracker - Учебный проект по Docker и CI/CD

CI Status

Учебный веб-проект для отслеживания количества просмотров страниц с использованием Flask, Redis и Docker. Проект создан в рамках углубления в практики DevOps, Docker, Docker Compose, CI/CD и контейнеризации приложений.

📋 О проекте

Page Tracker - это простое веб-приложение на Flask, которое:

  • Отслеживает количество посещений веб-страницы
  • Хранит данные в Redis
  • Полностью контейнеризировано с помощью Docker
  • Имеет автоматизированные тесты и CI/CD пайплайн

Цель проекта: Практическое освоение современных инструментов разработки и DevOps.

🏗️ Архитектура

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   Web Service   │────▶│    Redis DB     │◀────│   Test Service  │
│   (Flask)       │     │   (Storage)     │     │   (Pytest)      │
│   порт: 5000    │     │   порт: 6379    │     │   (профиль)     │
└─────────────────┘     └─────────────────┘     └─────────────────┘

🚀 Быстрый старт

Предварительные требования

  • Docker и Docker Compose
  • Python 3.13+ (для локальной разработки)

Запуск через Docker Compose

# Клонируйте репозиторий
git clone https://github.com/IAMN1/page-tracker.git
cd page-tracker

# Запустите все сервисы
docker compose up -d

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

📁 Структура проекта

page-tracker/
├── web/                          # Основное приложение
│   ├── src/page_tracker/
│   │   ├── app.py               # Flask приложение
│   │   └── __init__.py
│   ├── tests/
│   │   ├── unit/               # Модульные тесты
│   │   └── e2e/                # End-to-end тесты
│   ├── Dockerfile              # Для продакшн-сборки
│   ├── Dockerfile.dev          # Для разработки и тестирования
│   ├── pyproject.toml          # Зависимости Python
│   └── constraints.txt         # Фиксированные версии зависимостей
├── docker-compose.yml          # Конфигурация многоконтейнерного приложения
├── .github/workflows/
│   └── ci.yml                  # GitHub Actions для CI/CD
└── README.md                   # Документация

🔧 Разработка

Локальная настройка (без Docker)

cd web

# Создание виртуального окружения
python -m venv venv
source venv/bin/activate  # Linux/Mac
# или venv\Scripts\activate  # Windows

# Установка зависимостей
python -m pip install --editable ".[dev]"
python -m pip freeze --exclude-editable > constraints.txt

# Запуск Redis (требуется установленный Redis)
docker run -d --name redis-server -p 6379:6379 redis:latest

# Запуск Flask приложения
flask --app page_tracker.app run

Сборка Docker образа

# Сборка с тегированием по хэшу коммита
docker build -t page-tracker:$(git rev-parse --short HEAD) ./web

# Или через docker-compose
docker compose build

🧪 Тестирование

Модульные тесты

# Локально
cd web
python -m pytest tests/unit/ -v

# В Docker контейнере
docker compose --profile testing up --build --exit-code-from test-service

End-to-end тесты

# Тестирование развернутой системы
python -m pytest tests/e2e/ \
    --flask-url http://localhost:5000 \
    --redis-url redis://localhost:6379

Статический анализ кода

cd web

# Проверка форматирования
python -m black ./src --check
python -m isort ./src --check

# Линтинг
python -m flake8 ./src
python -m pylint ./src --disable=C0114,C0116,R1705

# Проверка безопасности
python -m bandit -r ./src --quiet

🐳 Docker команды

Управление сетями и volumes

# Создание сети для изоляции сервисов
docker network create page-tracker-network

# Создание volume для persistent storage Redis
docker volume create redis-volume

# Запуск Redis с volume
docker run -d \
    -v redis-volume:/data \
    --network page-tracker-network \
    --name redis-service \
    redis:latest

Запуск приложения в Docker сети

# Запуск веб-сервиса с подключением к Redis
docker run -d \
    -p 5000:5000 \
    -e REDIS_URL=redis://redis-service:6379 \
    --network page-tracker-network \
    --name web-service \
    page-tracker:latest

📊 CI/CD Pipeline

Проект использует GitHub Actions для автоматизации:

Что делает CI/CD пайплайн:

  1. На каждый Pull Request:

    • Сборка Docker образов
    • Запуск модульных и E2E тестов
    • Проверка качества кода
  2. На push в master (закомментировано, но настроено):

    • Авторизация в Docker Hub
    • Публикация образа в реестр
    • Тегирование по SHA коммита и как latest

Файл конфигурации:

  • .github/workflows/ci.yml - определение workflow

🧠 Изученные концепции

В этом проекте реализованы и изучены:

Docker & Контейнеризация

  • Создание Dockerfile для Python приложений
  • Многоэтапные сборки (multi-stage builds)
  • Оптимизация размеров образов
  • Управление зависимостями в контейнерах

Docker Compose

  • Оркестрация многоконтейнерных приложений
  • Настройка сетей и volumes
  • Зависимости между сервисами
  • Профили для разных сценариев (development, testing)

Тестирование

  • Модульное тестирование Flask приложений
  • End-to-end тестирование распределенных систем
  • Изолированное тестирование в контейнерах
  • Mock объектов для внешних зависимостей

CI/CD с GitHub Actions

  • Автоматизация сборки и тестирования
  • Интеграция с Docker Hub
  • Условное выполнение шагов
  • Управление секретами

Качество кода

  • Автоматическое форматирование (Black, isort)
  • Статический анализ (flake8, pylint)
  • Проверка безопасности (bandit)
  • pre-commit хуки

🔍 Пример использования API

# Получить текущее количество просмотров
curl http://localhost:5000/

# Увеличить счетчик просмотров
curl -X POST http://localhost:5000/

# Сбросить счетчик
curl -X DELETE http://localhost:5000/

📚 Основано на учебных материалах

Этот проект создан на основе туториала Real Python:

🛠️ Используемые технологии

  • Backend: Flask (Python)
  • Database: Redis
  • Containerization: Docker, Docker Compose
  • Testing: pytest, unittest mocking
  • CI/CD: GitHub Actions
  • Code Quality: Black, isort, flake8, pylint, bandit
  • Documentation: Markdown, docstrings

📄 Лицензия

MIT

👤 Автор

IAMN1 - Учебный проект для освоения DevOps инструментов


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published