В нашей инфраструктуре есть неудобства. В отличие от доменов и поддоменов при разработке и тестировании мы используем маршрутизацию по портам. При тестировании мы используем домен 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.
Изначально кажется, что в аукционе сложнее всего делать лоты и ставки. А дальше уже всё пойдёт само собой.
Но при проектировании оказывается, что не меньше сложностей скрывается в процессе сделки. Нужно продумать весь путь с этапами оплаты и пересылки. Как принимать оплату и списывать комиссии. Как повысить надёжность процесса передачи товара с переводом денег. Как при необходимости отменять сделки и что делать с возвратами.
В этот раз проработкой этих этапов мы и займёмся в эпизоде о сделках и балансе.
Но при проектировании оказывается, что не меньше сложностей скрывается в процессе сделки. Нужно продумать весь путь с этапами оплаты и пересылки. Как принимать оплату и списывать комиссии. Как повысить надёжность процесса передачи товара с переводом денег. Как при необходимости отменять сделки и что делать с возвратами.
В этот раз проработкой этих этапов мы и займёмся в эпизоде о сделках и балансе.
Может кого-то мы отвлекаем от великого пятничного деплоя а-ля Красная Пятница, но мы усердно пилим полезный контент.
В аукционе мы уже обсудили основные этапы от черновика лота до завершения сделки. Осталось рассмотреть вспомогательные процессы модерации, арбитража и техподдержки.
Поэтому сегодня сначала смоделируем поведение автоматической и ручной модерации при публикации лота и в переписке к нему. И поговорим о причинах споров по сделкам и их решении через арбитраж.
В аукционе мы уже обсудили основные этапы от черновика лота до завершения сделки. Осталось рассмотреть вспомогательные процессы модерации, арбитража и техподдержки.
Поэтому сегодня сначала смоделируем поведение автоматической и ручной модерации при публикации лота и в переписке к нему. И поговорим о причинах споров по сделкам и их решении через арбитраж.
deworker.pro
Модерация и арбитраж
Организация модерации и автомодерации лотов. Обращения в арбитраж для решения споров по сделкам. Работа технической поддержки.
Напоминаю, что помимо просмотра скринкастов может быть интересно порой читать статьи в моём блоге @elisdnru. Сегодня там вышла вторая часть мегацикла про практики внедрения зависимостей.
С целями по HTTP-фреймворку мы в прошлый раз определились. Пора приступать к написанию.
Сегодня подготовим всю необходимую инфраструктуру, как мы с вами уже умеем делать с помощью Docker по опыту проекта аукциона.
Мы также установим и настроим локальный HTTP-сервер с PHP. А потом определим структуру проекта для написания наших классов. Потом для тестирования установим PHPUnit и напишем свой первый тест. И заодно настроим интерпретатор и запуск тестов в PHPUnit.
Сегодня подготовим всю необходимую инфраструктуру, как мы с вами уже умеем делать с помощью Docker по опыту проекта аукциона.
Мы также установим и настроим локальный HTTP-сервер с PHP. А потом определим структуру проекта для написания наших классов. Потом для тестирования установим PHPUnit и напишем свой первый тест. И заодно настроим интерпретатор и запуск тестов в PHPUnit.
deworker.pro
Сервер и структура проекта
Установка сервера Nginx c PHP-FPM в Docker. Подготовка структуры файлов и директорий проекта. Автозагрузка классов с Composer. Установка и настройка PHPUnit.
Мы разобрали внешний дизайн аукциона и его функциональность. Пришло время продумать внутренний вид личных кабинетов покупателя и продавца.
deworker.pro
Кабинет покупателя и продавца
Устройство личного кабинета покупателя и продавца. Просмотр своих лотов, ставок и сделок. Движения на балансе и избранные лоты.
Forwarded from ElisDN.ru
Выступил с докладом на третьем митапе BeerPHP SPb.
Рассказал про вертикальную группировку кода проекта по фичам на модули и компоненты вместо горизонтального разделения исходников по типам классов. Рассмотрел, что делать с контроллерами, и как удобнее раскладывать тесты и конфигурацию в такой структуре:
https://elisdn.ru/blog/149/code-structure
Рассказал про вертикальную группировку кода проекта по фичам на модули и компоненты вместо горизонтального разделения исходников по типам классов. Рассмотрел, что делать с контроллерами, и как удобнее раскладывать тесты и конфигурацию в такой структуре:
https://elisdn.ru/blog/149/code-structure
elisdn.ru
Вертикальное разделение кода, тестов и конфигов
Доклад про вертикальное разделение кода проекта по фичам на отдельные модули и компоненты вместо использования горизонтального разделения по типам классов. Размещение контроллеров, тестов и конфигурации приложения.
Вот мы с вами и составили примерное задание для разработки нашего демонстрационного аукциона. На этих требованиях мы с вами остановимся и начнём всё это программировать.
Но с ростом реального проекта после запуска будут приходить новые идеи. Сейчас мы можем только предположить, как всё это будет происходить и какие из идей можно будет реализовать позже.
Поэтому сегодня обсудим, как функциональность проекта может развиваться со временем вширь и вглубь. И по итогам эпизода будет конкурс, где вы можете выиграть бесплатное продление подписки.
Но с ростом реального проекта после запуска будут приходить новые идеи. Сейчас мы можем только предположить, как всё это будет происходить и какие из идей можно будет реализовать позже.
Поэтому сегодня обсудим, как функциональность проекта может развиваться со временем вширь и вглубь. И по итогам эпизода будет конкурс, где вы можете выиграть бесплатное продление подписки.
Месяц назад вышел PHP 8.1 с новыми возможностями. Атрибуты теперь поддерживают вложенность, которой раньше не было. Это нам мешало перейти на них в 8.0. Теперь нас ничто не останавливает.
Пришла пора завершить переход на PHP 8.0 и перевести наш проект с классических аннотаций на новые нативные атрибуты для валидатора и Doctrine ORM. Поговорить, что делать с ними в legacy-проектах.
И заодно пощупать новые компоненты из версии Symfony 6 для бэкенда и новый React Router 6 для фронтенда.
Пришла пора завершить переход на PHP 8.0 и перевести наш проект с классических аннотаций на новые нативные атрибуты для валидатора и Doctrine ORM. Поговорить, что делать с ними в legacy-проектах.
И заодно пощупать новые компоненты из версии Symfony 6 для бэкенда и новый React Router 6 для фронтенда.
Мы с вами завершили написание техзадания аукциона. Теперь пора поговорить о том, в какой последовательности и с помощью каких инструментов мы будем всё это реализовывать.
Поэтому 3 января в понедельник в 16:00 по московскому времени мы в прямом эфире разберём все требования с точки зрения программиста и обсудим, как мы всё это будем разрабатывать.
Поэтому 3 января в понедельник в 16:00 по московскому времени мы в прямом эфире разберём все требования с точки зрения программиста и обсудим, как мы всё это будем разрабатывать.
deworker.pro
Рецензирование требований
Оценка составленного задания со стороны программиста. Обсуждение требований. Предложение идей по технической реализации проекта.
В разделе скринкастов появилась вкладка истории просмотренных вами эпизодов. Достаточно залогиниться, и ваша страница истории начнёт работать. Так вам будет сразу видно, какие эпизоды вы посмотрели, а какие нет.
И для каждого видео теперь работает запоминание текущей позиции. Если вы зайдёте в недосмотренный вами ранее скринкаст и нажмёте Play, то воспроизведение продолжится с прошлого сохранённого момента.
Приятного просмотра!
И для каждого видео теперь работает запоминание текущей позиции. Если вы зайдёте в недосмотренный вами ранее скринкаст и нажмёте Play, то воспроизведение продолжится с прошлого сохранённого момента.
Приятного просмотра!
Напоминаем, что через полчаса в 16:00 по московскому времени мы разберём все требования с точки зрения программиста и обсудим, как мы всё это будем разрабатывать. Приходите к нам на эфир https://youtu.be/8YFD5lTHyXk
YouTube
Рецензирование требований ТЗ
Оценка составленного задания со стороны программиста.
Обсуждение требований https://deworker.pro/edu/series/auction-model/review
Предложение идей по технической реализации проекта.
00:00:00 - Приветствие
00:05:16 - Этапы аукциона
00:20:50 - Ответы на вопросы…
Обсуждение требований https://deworker.pro/edu/series/auction-model/review
Предложение идей по технической реализации проекта.
00:00:00 - Приветствие
00:05:16 - Этапы аукциона
00:20:50 - Ответы на вопросы…