Проект представляет собой API агрегатор на Laravel с использованием Docker для развертывания всех необходимых сервисов.
- Docker Desktop (или Docker Engine и Docker Compose)
- Git
- Минимум 2GB свободной оперативной памяти
- Свободный порт 8000 для веб-сервера
- Свободный порт 6379 для Redis (опционально)
├── docker/
│ ├── nginx/
│ │ └── default.conf # Конфигурация Nginx
│ └── php/
│ └── Dockerfile # Dockerfile для PHP-FPM
├── src/ # Laravel приложение
├── docker-compose.yml # Конфигурация Docker Compose
└── README.md # Документация проекта
git clone https://gitlab.preax.ru/php/f99d8a8e-8e5.git
cd f99d8a8e-8e5
git checkout sprint-1-task-2Важно: Перед выполнением команд убедитесь, что приложение Docker Desktop запущено и служба Docker активна.
docker compose up -d --buildЭта команда запустит следующие сервисы:
- app — PHP-FPM контейнер с Laravel (PHP 8.2, pdo_pgsql, redis)
- webserver — Nginx веб-сервер (порт 8000)
- db — PostgreSQL 15 (база данных
laravel, порт 5432 внутри сети) - redis — Redis для кеширования и очередей (порт 6379)
Проверка статуса запущенных контейнеров:
docker compose psДля быстрого запуска и проверки можно использовать готовый файл .env.review:
cp src/.env.review src/.envЛибо скопировать шаблон из .env.example:
cp src/.env.example src/.envУбедитесь, что в файле src/.env указаны актуальные параметры подключения:
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:...
APP_DEBUG=true
APP_URL=http://localhost:8000
DB_CONNECTION=pgsql
DB_HOST=db
DB_PORT=5432
DB_DATABASE=laravel
DB_USERNAME=postgres
DB_PASSWORD=postgres
CACHE_STORE=redis
REDIS_CLIENT=phpredis
REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379# Установка PHP-зависимостей через Composer внутри контейнера
docker compose exec app composer install
# Генерация уникального ключа приложения (если не был установлен ранее)
docker compose exec app php artisan key:generate
# Применение миграций Laravel к базе данных PostgreSQL
docker compose exec app php artisan migrate
# Настройка прав доступа к директориям storage и bootstrap/cache (при необходимости)
docker compose exec app chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
docker compose exec app chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cacheДля тестирования при ревью проекта используется файл конфигурации:
cp src/.env src/.env.reviewПосле успешного запуска доступны следующие маршруты:
- Веб-интерфейс: http://localhost:8000
- Статус API:
GET http://localhost:8000/api/status - Регистрация пользователя:
POST http://localhost:8000/api/auth/register - Получение токена:
POST http://localhost:8000/api/auth/token - Погода по названию города (требует Bearer токен):
GET http://localhost:8000/api/weather/city/{city} - Погода по координатам (требует Bearer токен):
GET http://localhost:8000/api/weather/coordinates/{latitude}/{longitude}
Для добавления нового API-провайдера в базу данных используется интерактивная Artisan-команда:
docker compose exec app php artisan provider:createТакже команду можно запускать неинтерактивно с передачей аргументов:
docker compose exec app php artisan provider:create \
--name="open-meteo" \
--base_url="https://api.open-meteo.com/v1" \
--description="Бесплатный сервис погоды Open-Meteo" \
--status="active"# Проверка версии Laravel
docker compose exec app php artisan --version
# Проверка доступности главной страницы
curl http://localhost:8000
# Проверка эндпоинта статуса API
curl http://localhost:8000/api/status# Регистрация нового пользователя и получение токена
curl -X POST http://localhost:8000/api/auth/register \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"name":"Alex","email":"alex@example.com","password":"password123"}'
# Получение нового API токена (аутентификация)
curl -X POST http://localhost:8000/api/auth/token \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"email":"alex@example.com","password":"password123"}'# Получение погоды по названию города (замените <TOKEN> на ваш Bearer токен)
curl -X GET http://localhost:8000/api/weather/city/Moscow \
-H "Authorization: Bearer <TOKEN>" \
-H "Accept: application/json"
# Получение погоды по координатам (широта и долгота)
curl -X GET http://localhost:8000/api/weather/coordinates/55.75/37.61 \
-H "Authorization: Bearer <TOKEN>" \
-H "Accept: application/json"docker compose exec app php artisan test# Просмотр логов
docker compose logs -f app
# Остановка контейнеров
docker compose down
# Перезапуск контейнеров
docker compose restart
# Выполнение artisan команд внутри контейнера
docker compose exec app php artisan <command>
# Подключение к базе данных
docker compose exec db psql -U postgres -d laravelИзмените порт в docker-compose.yml:
webserver:
ports:
- "8001:80" # Используйте свободный портdocker compose exec app chown -R www-data:www-data /var/www/htmldocker compose down -v # Удалит контейнеры и volumes
docker system prune # Очистит неиспользуемые ресурсы- Имя: Артём
- Ник: pechkurofff
- Статус: Спринт 1, Задача 3 выполнена