Готов анонс новой рубрики скринкастов в блоге. Там подробнее, чем было здесь.
deworker.pro
Рефакторинг в реальных проектах
Открытие новой рубрики по практическому рефакторингу на реальных примерах готовых библиотек и фреймворков.
Подвезли новые релизы:
Сегодня обновим CS Fixer, переведём Doctrine ORM на использование PSR-6 для кэширования мета-информации, сделаем более безопасным Jenkinsfile и доустановим в образ Jenkins компилятор Rust для сборки зависимостей.
Сегодня обновим CS Fixer, переведём Doctrine ORM на использование PSR-6 для кэширования мета-информации, сделаем более безопасным Jenkinsfile и доустановим в образ Jenkins компилятор Rust для сборки зависимостей.
deworker.pro
Обновление Doctrine и Jenkins
Переход на CS Fixer 3. Переход на PSR-кэш для мета-информации в Doctrine ORM. Обновление Jenkins с компиляцией Python-библиотек с Rust.
Приступаем к реализации полноценной системы аутентификации на бэкенде.
Сегодня исследуем работу готового компонента League OAuth2 Server и проинтегрируем его в наш PHP-проект. Напишем требуемые сущности и репозитории по интерфейсам компонента. Добавим сохранение авторизационного кода и токена обновления через Doctrine.
Помимо этого обновим Docker-образы и напишем свою функцию env для более удобной работы с переменными окружения.
Сегодня исследуем работу готового компонента League OAuth2 Server и проинтегрируем его в наш PHP-проект. Напишем требуемые сущности и репозитории по интерфейсам компонента. Добавим сохранение авторизационного кода и токена обновления через Doctrine.
Помимо этого обновим Docker-образы и напишем свою функцию env для более удобной работы с переменными окружения.
deworker.pro
Интеграция OAuth2 Server
Исследование работы и интеграция в PHP-проект компонента League OAuth2 Server. Написание сущностей и репозиториев. Сохранение кодов через Doctrine.
Продолжаем интеграцию.
Когда у нас готовы сущности и репозитории создадим сам компонент OAuth-сервера. Для него сгенерируем файлы ключей и сделаем их деплой из Jenkins через Docker Secrets.
Сделаем страницу входа и контроллер для генерации и обновления токенов. Все контроллеры покроем функциональными тестами.
По аналогии с Command добавим Query-модель на DBAL для выполнения запросов на чтение данных из модуля.
И заодно рассмотрим, как можно избавиться от вызова синглтона SentrySDK в коде наших сервисов и экшенов.
Когда у нас готовы сущности и репозитории создадим сам компонент OAuth-сервера. Для него сгенерируем файлы ключей и сделаем их деплой из Jenkins через Docker Secrets.
Сделаем страницу входа и контроллер для генерации и обновления токенов. Все контроллеры покроем функциональными тестами.
По аналогии с Command добавим Query-модель на DBAL для выполнения запросов на чтение данных из модуля.
И заодно рассмотрим, как можно избавиться от вызова синглтона SentrySDK в коде наших сервисов и экшенов.
deworker.pro
Страница входа и Query-модель
Разработка страницы входа и контроллера для генерации и обновления OAuth-токенов. Добавление Query-модели для выполнения запросов данных из модуля.
После добавления полноценной генерации токенов пришла пора эти JWT-токены принимать и валидировать. И извлекать из них идентификатор пользователя для использования в контроллере.
Для этого создадим компонент сервера ресурсов. Добавим middleware для аутентификации и рассмотрим несколько вариантов его написания и использования.
Для этого создадим компонент сервера ресурсов. Добавим middleware для аутентификации и рассмотрим несколько вариантов его написания и использования.
deworker.pro
Аутентификация для контроллеров
Приём, валидация и чтение JWT-токенов для определения текущего пользователя в контроллерах. Написание посредника аутентификации.
Сегодня завершаем аутентификацию для бэкенда. Доделаем нюансы, не реализованные ранее.
Сначала добавим роль в JWT. Потом напишем генератор токенов для E2E тестов. И сделаем форсированное разлогинивание пользователя и автоочистку устаревших кодов из БД по Cron в Docker Swarm.
Сначала добавим роль в JWT. Потом напишем генератор токенов для E2E тестов. И сделаем форсированное разлогинивание пользователя и автоочистку устаревших кодов из БД по Cron в Docker Swarm.
deworker.pro
Роль в JWT и Cron в Docker Swarm
Завершаем аутентификацию для бэкенда. Добавление роли в JWT. Форсированное разлогинивание пользователя. Автоочистка устаревших кодов из БД.
При реализации аутентификации мы познакомились с использованием секретов Docker для передачи контейнерам файлов ключей для JWT.
По этим же мотивам сегодня мы повысим безопасность контейнеров. Сделаем передачу паролей через секреты вместо переменных окружения. И создадим отдельного пользователя для PHP-CLI, чтобы не запускать консольные команды от root. Это нам станет полезно когда мы добавим очереди.
Заодно обновим виртуальные машины до Debian 10 и Docker 20, чтобы работать со свежими инструментами.
По этим же мотивам сегодня мы повысим безопасность контейнеров. Сделаем передачу паролей через секреты вместо переменных окружения. И создадим отдельного пользователя для PHP-CLI, чтобы не запускать консольные команды от root. Это нам станет полезно когда мы добавим очереди.
Заодно обновим виртуальные машины до Debian 10 и Docker 20, чтобы работать со свежими инструментами.
deworker.pro
Docker и безопасность паролей
Обновление Debian и Docker на серверах. Перевод передачи паролей в контейнеры с переменных окружения на секреты. Работа с секретами в функции env.
При появлении в базе данных реальных записей возникает вопрос надёжности их хранения и резервного копирования, чтобы их случайно не потерять.
Об этом сегодня и позаботимся.
Сравним варианты запуска PostgreSQL в Docker, нативно и как облачный сервис. Рассмотрим, как сделать репликацию при запуске в Docker. И напишем скрипт резервного копирования БД с загрузкой дампа в S3-совместимое хранилище.
И для удобства поднимем эмулятор хранилища для локальной разработки.
Об этом сегодня и позаботимся.
Сравним варианты запуска PostgreSQL в Docker, нативно и как облачный сервис. Рассмотрим, как сделать репликацию при запуске в Docker. И напишем скрипт резервного копирования БД с загрузкой дампа в S3-совместимое хранилище.
И для удобства поднимем эмулятор хранилища для локальной разработки.
deworker.pro
Репликация и бэкап БД в S3
Запуск БД в Docker и без него. Способы организации репликации. Написание скрипта резервного копирования базы данных PostgreSQL с загрузкой в S3-совместимое файловое хранилище. Эмуляция хранилища для локальной разработки.
Стрим нового рабочего сезона
Спасибо за ваши предложения по контенту в комментариях и в обратную связь! С вами мы делаем наши видео лучше, чем изначально планировали.
Открываем новый рабочий сезон. Об этом поговорим с вами на стриме в эту пятницу 20 августа в 19:00 МСК.
Спасибо за ваши предложения по контенту в комментариях и в обратную связь! С вами мы делаем наши видео лучше, чем изначально планировали.
Открываем новый рабочий сезон. Об этом поговорим с вами на стриме в эту пятницу 20 августа в 19:00 МСК.
deworker.pro
Открытие нового рабочего сезона
Стрим о настоящем и будущем проекта. Направления и планы по записи новых эпизодов и перезаписи старых. Ответы на ваши вопросы в чате и комментариях.
В нашей инфраструктуре есть неудобства. В отличие от доменов и поддоменов при разработке и тестировании мы используем маршрутизацию по портам. При тестировании мы используем домен gateway вместо localhost. Все поддомены нам приходится вписывать вручную. И из-за монополии на 80 и 443 порты кластера мы не можем задеплоить несколько проектов.
Сегодня мы всё это решим. И от Nginx и Certbot перейдём на декларативное управление доменными именами и проксированием с помощью Traefik с автополучением Let's Encrypt сертификатов. И как бонус вынесем прокси-сервер в отдельный репозиторий, чтобы можно было деплоить в один кластер сколько угодно проектов
Сегодня мы всё это решим. И от Nginx и Certbot перейдём на декларативное управление доменными именами и проксированием с помощью Traefik с автополучением Let's Encrypt сертификатов. И как бонус вынесем прокси-сервер в отдельный репозиторий, чтобы можно было деплоить в один кластер сколько угодно проектов
deworker.pro
Управление хостами и Traefik
Декларативное централизованное управление доменными именами с помощью Traefik. Автополучение Let's Encrypt сертификатов. Деплой нескольких проектов в один кластер.
Как и обещали в стриме, начинаем перезапись старых эпизодов.
Сегодня выкладываем обновлённое видео про жизненный цикл HTTP-запроса. Изменили стиль, улучшили качество и доработали часть про DNS.
Сегодня выкладываем обновлённое видео про жизненный цикл HTTP-запроса. Изменили стиль, улучшили качество и доработали часть про DNS.
deworker.pro
Жизненный цикл HTTP-запроса
Кто такие сервер и клиент и как осуществляется запрос и возвращается ответ при HTTP-взаимодействии
Продолжаем делать контент лучше и удобнее. Сегодня рассмотрим структуру запроса и ответа с хостами, ресурсами, методами и статусами. Поговорим про идемпотентность запросов, о которой не все знают.
deworker.pro
Структура HTTP-запроса и ответа
Как производится запрос и какие результаты возвращает сервер. Какие запросы являются безопасными.
Помимо записи новых эпизодов и переписывания старых для удобства просмотра дописываем тайм-коды к имеющимся. Сегодня добавили их к эпизоду о подключении БД и установке Doctrine ORM.
deworker.pro
Создание БД и установка Doctrine ORM
Подключение базы данных в Docker. Конфигурирование через переменными окружения. Плюсы и минусы подходов DB-First и Code-First. Обзор Doctrine ORM. Установка и регистрация в DI контейнере.
Вы уже познакомились с деятельностью Юли на прошлом стриме. Её любовь к систематизации и классификации в дополнение к нашей программистской безбашенности было решено направить в нужное русло. Посему она возьмёт штурвал проектирования ТЗ и дизайна аукциона в свои скрупулёзные руки пока мы с вами пишем код. И всё это подробно расскажет и покажет в своей серии о проектировании. Занимайте места ближе к экрану и поехали вместе :)
С типом аукциона мы с вами определились. Сегодня начинаем рисовать. Подсмотрим несколько идей у других готовых аукционов и набросаем структуру главной страницы.
deworker.pro
Требования к главной странице
Анализ бизнес-требований владельца продукта и анализ потребностей посетителей. Проработка функциональности главной страницы аукциона.
Начинаем делать свой удобный HTTP-фреймворк на PHP. От нас не скроется ни один нюанс его работы. Мы исследуем его устройство вдоль и поперёк через написание с нуля каждого компонента.
Сегодня в начале нашего пути дадим определение компонентного HTTP-фреймворка. Рассмотрим место фреймворка и библиотек в потоке управления. Встретим и решим проблему совместимости фреймворков путём использования рекомендаций PSR.
Заваривайте себе тёплого чая и поехали вместе с нами!
Сегодня в начале нашего пути дадим определение компонентного HTTP-фреймворка. Рассмотрим место фреймворка и библиотек в потоке управления. Встретим и решим проблему совместимости фреймворков путём использования рекомендаций PSR.
Заваривайте себе тёплого чая и поехали вместе с нами!
deworker.pro
Суть компонентного фреймворка
Определение и суть компонентного HTTP-фреймворка. Место фреймворка и библиотек в потоке управления. Совместимость фреймворков и рекомендации PSR.
Главную страницу аукциона мы придумали. Теперь приступаем к лоту и ставкам, так как это в проекте самое главное.
Нужно подробно продумать жизненный цикл лота с его нюансами и вписать всё в ТЗ, чтобы потом было понятно, что программировать. Разобрать, как будем работать с городами и странами. Решить, нужно ли давать редактировать опубликованный лот или отменять ставки. И если можно, то как это делать корректно и безопасно. И нарисовать, что будет выводиться на странице лота.
Об этом сегодня поговорим и всё это нарисуем.
Нужно подробно продумать жизненный цикл лота с его нюансами и вписать всё в ТЗ, чтобы потом было понятно, что программировать. Разобрать, как будем работать с городами и странами. Решить, нужно ли давать редактировать опубликованный лот или отменять ставки. И если можно, то как это делать корректно и безопасно. И нарисовать, что будет выводиться на странице лота.
Об этом сегодня поговорим и всё это нарисуем.
Вот и все пакеты Doctrine полностью перешли на новый DBAL 3.0. А SwiftMailer решил в этом месяце уйти в закат, выдвинув себе достойную замену.
Сегодня встретим новые версии пакетов бэкенда и обновим стили фронтенда по новым правилам StyleLint.
Сегодня встретим новые версии пакетов бэкенда и обновим стили фронтенда по новым правилам StyleLint.