Это демо приложение, демонстрирующее как можно настроить Laravel для соблюдения принципов 12 factor app.
- Утилита
mkcert(https://github.com/FiloSottile/mkcert) - Утилита
make(Поставляется в большинстве linux дистрибутивов, но не всегда установлена по умолчанию) docker+docker compose plugin(https://docs.docker.com/engine/install/)
Приложение тестировалось и гарантированно будет работать под linux. Под MacOS и Windows не тестировалось
Для первоначальной настройки приложения требуется запустить команду make init
Для запуска make up
Для остановки make down
Все примеры запросов сделаны с помощью HTTP Request в PhpStorm
-
Аутентификация на основе JWT.
Тут нет никакой полезной нагрузки, никаких проверок логина и пароля, refresh токенов, инвалидации и другого.
Просто маленькое демо, как можно начать с этим работать. Для получения токена достаточно выполнить следующий запрос:POST https://api.php-russia-2024-laravel.local/api/v1/authenticate Content-Type: application/json -
Отсылка простого сообщения фоновому процессу. Реализовано с помощью RoadRunner Jobs (https://docs.roadrunner.dev/docs/queues-and-jobs/overview-queues)
Отсылаем сообщение фоновому процессу:POST https://api.php-russia-2024-laravel.local/api/v1/send-task-to-consumer Content-Type: application/json Accept: application/json Authorization: Bearer токен, полученный от эндпоинта аутентификации { "message": "TEST" }В логе приложения видим, что сообщение пришло и обработалось
local.INFO: PONG = TESTПри разработке лог содержится в файле
storage/logs/laravel.log
Вproductionрежиме вывод будет в логах контейнераphp-daemon -
В приложениях, которые запускаются в нескольких экземплярах на разных серверах файлы обычно загружаются во внешнее хранилище по протоколу S3.
Данная фича демонстрирует как это примерно может выглядеть.
Загружаем файл:POST https://api.php-russia-2024-laravel.local/api/v1/upload-file Content-Type: multipart/form-data; boundary=WebAppBoundary Authorization: Bearer токен, полученный от эндпоинта аутентификации --WebAppBoundary Content-Disposition: form-data; name="file"; filename="test.xlsx" Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet < /home/user/test.xlsx --WebAppBoundary--В ответ получаем ссылку на скачивание файла из S3 хранилища
-
Welcome. Отображает Welcome сообщение из переменной окружения
GET https://api.php-russia-2024-laravel.local/api/v1/welcome
В файле .gitlab-ci.yml приведен пример простого деплоя приложения на условный "прод"
В Gitlab должны быть установлены следующие переменные окружения:
JWT_SECRET
WELCOME_MESSAGE
В докере поднимаются только контейнеры приложения. Подразумевается, что трафик на них проксируется каким-либо образом на контейнер php - слушает 127.0.0.1:8090 на хост машине
Также подразумевается, что на "проде" уже используется внешний S3 сервис