Skip to content

ivanUtkov/as_devops_task

Repository files navigation

as_devops_task

DevOps тестовое задание: Laravel + MySQL

1. Что есть в проекте

  • Laravel 12 (PHP 8.2+) c простым HTML-листингом задач (GET /).
  • Модель App\Models\Task, миграция create_tasks_table и сид TaskSeeder.
  • Health-check JSON-эндпоинт GET /health, который проверяет подключение к БД.
  • Лог-файлы по умолчанию пишутся в storage/logs/laravel.log.

2. Минимальные требования

  • PHP 8.2+ с расширениями, необходимыми Laravel (pdo_mysql, mbstring, xml и т.д.).
  • Composer 2.x.
  • MySQL 8.x (или совместимый сервер, например MariaDB 10.6+).
  • Node.js 18+ и npm (опционально, только если потребуется собрать фронтенд-ассеты).

3. Быстрый старт для локальной проверки

  1. Скопировать переменные окружения:
    cp .env.example .env
  2. В .env указать параметры подключения к MySQL и сгенерировать ключ приложения:
    composer install
    php artisan key:generate
  3. Применить миграции и загрузить демо-данные:
    php artisan migrate --seed
  4. Запустить встроенный веб-сервер:
    php artisan serve --host=0.0.0.0 --port=8000
  5. Проверить работу:
    • http://localhost:8000/ - список задач.
    • http://localhost:8000/health - health-check (возвращает {"app":"up","database":"up","timestamp":"..."} при успешном подключении к БД).

4. Структура и полезные команды

  • Миграции: database/migrations/.
  • Сиды: database/seeders/TaskSeeder.php.
  • Основной маршрут: routes/web.php.
  • Просмотр маршрутов: php artisan route:list.
  • Запуск unit-тестов (их пока нет, но пайплайн должен уметь): php artisan test.
  • Логи: storage/logs/laravel.log (понадобится для настройки log forwarding).

5. Задание

Выполнить следующие шаги. Платформа CI/CD на выбор: Jenkins или GitLab CI.

  1. Подготовка инфраструктуры

    • Развернуть виртуальную машину (Linux, предпочтительно Ubuntu 22.04+).
    • Установить PHP, Composer, веб-сервер/прокси (nginx или Apache) и MySQL.
    • Настроить .env через переменные окружения или секреты, без хранения паролей в репозитории.
    • Выполнить php artisan migrate --seed в целевой среде.
  2. Настройка CI/CD

    • Описать pipeline (Jenkinsfile или .gitlab-ci.yml).
    • Минимальные стадии: lint/testbuilddeploy.
    • В lint/test выполнить composer install --no-dev (или --prefer-dist) и php artisan test.
    • В build собрать артефакт приложения (например, архив с vendor, ресурсами, env-примером).
    • В deploy задеплоить на VM, выполнить миграции/сиды и перезапустить сервисы.
    • Приложить инструкцию, как воспроизвести pipeline (требования к агентам, переменным и т.д.).
  3. Мониторинг и наблюдаемость

    • Настроить использование GET /health как liveness/readiness probe (HTTP 200/500).
    • Организовать сбор логов Laravel (например, ротация + доставка в journald/ELK/CloudWatch - на выбор).
    • Реализовать базовые метрики (варианты: экспортер, интеграция с Prometheus/node-exporter, алерты по логам или состоянию сервиса). Допускаются открытые решения (Netdata, Grafana Agent, Prometheus + Alertmanager и т.д.).
  4. Документация и сдача работы

    • README или отдельный файл с описанием:
      • архитектуры и схемы развёртывания;
      • требований к окружению;
      • куда выкладываются логи и метрики;
      • как запустить/перезапустить приложение.
    • Скриншоты/экспорт дашбордов и алертов (если есть).
    • Доступ к пайплайну (скринкасты, публичный URL или описание шагов для ревью).

6. Критерии оценки

  • Автоматизация: минимальное количество ручных шагов, наличие пайплайна, инфраструктура как код (Terraform/Ansible) приветствуется.
  • Наблюдаемость: наличие рабочих health-check'ов, логов и метрик.
  • Надёжность: корректная обработка секретов, миграций, перезапусков сервисов.
  • Документация: чёткие инструкции, возможность воспроизвести окружение без дополнительных вопросов.
  • Бонусы: контейнеризация, Helm Chart, IaC, интеграция с S3 для бэкапов.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages