Учебный веб-проект для отслеживания количества просмотров страниц с использованием 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+ (для локальной разработки)
# Клонируйте репозиторий
git clone https://github.com/IAMN1/page-tracker.git
cd page-tracker
# Запустите все сервисы
docker compose up -d
# Приложение будет доступно по адресу:
# http://localhost:5000page-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 # Документация
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 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# Тестирование развернутой системы
python -m pytest tests/e2e/ \
--flask-url http://localhost:5000 \
--redis-url redis://localhost:6379cd 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 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# Запуск веб-сервиса с подключением к Redis
docker run -d \
-p 5000:5000 \
-e REDIS_URL=redis://redis-service:6379 \
--network page-tracker-network \
--name web-service \
page-tracker:latestПроект использует GitHub Actions для автоматизации:
-
На каждый Pull Request:
- Сборка Docker образов
- Запуск модульных и E2E тестов
- Проверка качества кода
-
На push в master (закомментировано, но настроено):
- Авторизация в Docker Hub
- Публикация образа в реестр
- Тегирование по SHA коммита и как
latest
.github/workflows/ci.yml- определение workflow
В этом проекте реализованы и изучены:
- Создание Dockerfile для Python приложений
- Многоэтапные сборки (multi-stage builds)
- Оптимизация размеров образов
- Управление зависимостями в контейнерах
- Оркестрация многоконтейнерных приложений
- Настройка сетей и volumes
- Зависимости между сервисами
- Профили для разных сценариев (development, testing)
- Модульное тестирование Flask приложений
- End-to-end тестирование распределенных систем
- Изолированное тестирование в контейнерах
- Mock объектов для внешних зависимостей
- Автоматизация сборки и тестирования
- Интеграция с Docker Hub
- Условное выполнение шагов
- Управление секретами
- Автоматическое форматирование (Black, isort)
- Статический анализ (flake8, pylint)
- Проверка безопасности (bandit)
- pre-commit хуки
# Получить текущее количество просмотров
curl http://localhost:5000/
# Увеличить счетчик просмотров
curl -X POST http://localhost:5000/
# Сбросить счетчик
curl -X DELETE http://localhost:5000/Этот проект создан на основе туториала Real Python:
- Docker Continuous Integration Tutorial
- Разделы: Docker basics, Docker Compose, Testing, CI/CD
- 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 инструментов