Использованные версии:
- Laravel v8.6.3
- composer:2.1
- php:8.0-fpm
- Ubuntu 20.04.3 LTS (запущено на релизе 20.04)
- в качестве базы данных используется MongoDb и драйвер jenssegers/mongodb ^3.8.4, но так же преднастроена mysql, но закомментирована
git clone https://github.com/itaidi/tapir1.git
cd tapir1
docker-compose up
(повторить команду docker-compose up
, в случае таймаута загрузки пакетов 💤)
➡️ открыть - api http://localhost:7777/api/store ..., если сразу не открылось, нужно обновить .
📋 открыть api docs в editor.swagger.io/?url= ...
(работает после отображения выполнения миграций в терминал, когда отобразиться ✅ cars_cron | <pre>Migration table created successfully.
)
Возможные конфликты при запуске, могут помочь команды:
- очистка открых контейнеров (случае конфликтов)
docker rm -f $(docker ps -aq)
- остановка apache если перекрыт порт 80 (для ubuntu/linux)
/etc/init.d/apache2 stop
- проверка занятых портов, если не получилось
sudo lsof -i -P -n | grep 80
- доки:
https://editor.swagger.io/?url=https://raw.githubusercontent.com/itaidi/tapir1/main/docs/swagger.yaml (просмотр запросов)
Запуск в докере -
(в каталоге проекта, запустить в терминале) docker run -it --rm -p 7778:80 -v "$(pwd)/docs":/usr/share/nginx/html/swagger/ -e SPEC_URL=swagger/swagger.yaml redocly/redoc
redoc будет по адресу - http://localhost:7778
https://www.mongodb.com/products/compass
через Compas - mongodb://root:your_mongodb_root_password@localhost:27017/laravel?authSource=admin
Через терминал -
docker exec -it cars_mongodb bash
затем mongo --username root --password your_mongodb_root_password --authenticationDatabase admin --host localhost:27017 --port 27017
(подключение к терминалу mongo)
Просмотр данных:
show databases
use laravel
db.cars.find().limit(1)
(выведет одну запись)
Дополнительно:
- Запуск проекта в фоне
docker-compose up -d --build
📌 Логи обработки json записываются в - /src/storage/logs/laravel.log
- cron реализован двумя способами
- конейнер без php который запускает расписание через curl, в основном контейнере (
cron_only.Dockerfile
) - конейнер с php, который выполняет artisan как отдельный сервис (
cron_with_php.Dockerfile
)cron/cron-cars
- файл cron
т.к. без php сборка быстрее, используется №1 вариант
curl запускает файлы /src/public/check_schedule.php
, и /src/public/check_update_cars.php
(при первом запуске, команда прописана в docker-compose.yml
, у соответствующего контейнра) PS: там же запуск php artisan migrate
обработка файлов здесь - /app/console/commands/GetCars.php
, метод php artisan cars:get
, вызов расписания через каждые 10 минут php artisan schedule:run
Апи эндпоинт здесь - /app/http/controllers/CarsController.php
и routes/api.php
4.1)
пришлось создать файл /src/composer_ready_check.php
проверки загрузки comoser install
, т.к. докер контейнеры запускаются асинхронно, - проверка запускается через curl в docker-compose в файле check_update_cars.php
(скрипт ожидает, пока скопилируется autoload.php)
4.2)
и отдельный файл который создает laravel.log с нужными правами от сервера, чтобы curl /src/public/start_commands_preset.php
, запускается перед composer install
- это обеспечивает работоспособность при первом запуске ✅