• Как деплоить php приложение вместе с docker?

    @Markusam Автор вопроса
    nokimaro,

    А ещё могут понадобится фоновые процессы, например обработчики очередей или запускать что-то через cron.


    На практике сталкивался только с тем что всякие фоновые процессы помещали обычно в тот же контейнер что и веб приложении и за процессом обычно присматривал supervisor. Насколько знаю это не совсем правильная практика, рекомендуются под каждый процесс по контейнеру. А не будет ли это слишком накладно по ресурсам? И насколько понимаю тогда под фоновые процессы надо создавать отдельный docker image(php-cli) Надо ли в связи с этим тогда переделывать архитектуру приложения?
    Написано
  • Как деплоить php приложение вместе с docker?

    @Markusam Автор вопроса
    как CD pipeline знает адреса серверов? В современном "облачном" окружении они часто меняются, нужен какой-то метод для их динамического получения


    В самом скрипте pipeline адрес сервера можно записать как переменную и при деплое(тогда это должен быть по идеи отдельный pipeline?) передавать это значение, ну это если адреса не меняются динамически.

    как обеспечить бесперебойную работу приложения во время деплоя?

    Ну это тогда надо внедрять green\blue deployment?

    Либо как я понимаю ответом на все это есть как вы указали managed services? Но это при использовании клауд решений(если какой нибудь hetzner брать то там такого может не быть?)

    P.S. Прошу прощения за возможно глупые вопросы, потому что в devops практиках не гуру
    Написано
  • Как деплоить php приложение вместе с docker?

    @Markusam Автор вопроса
    Alexey Dmitriev, Работать будет и если через ftp архив с кодом загружать, вопрос в том насколько мной описаный алгоритм соответствует devops практикам и best practices по использованию docker
    Написано
  • Какой метод реализации при подходе CQRS правильный?

    @Markusam Автор вопроса
    Понял, спасибо
    Написано
  • Какой метод реализации при подходе CQRS правильный?

    @Markusam Автор вопроса
    Вы не только модули к агрегатам приравняли, но и BoundedContext к ним?

    Да, насколько понимаю это ошибка так как в одном context может быть n модулей?
    Написано
  • Какой метод реализации при подходе CQRS правильный?

    @Markusam Автор вопроса
    Что за паттерн "Api service", который какие-то DTO отдает?

    Ну это выходит anti corruption layer, так как он получает данные из одного контекста и превращает их в формат который может поддерживать другой контекст но я так понимаю это не желательно делать, а достаточно ограничится просто store id?

    Делать это нужно в Application, вызвать 2 агрегата последовательно. Не нужно делать это ответственностью Order.


    Если полностью перейти к практической реализации то правильно ли понимаю, в OrderHandler сначала выполняю проверяю спецификацию Store, если условие удовлетворено уже создаем Order?
    Написано
  • Какой метод реализации при подходе CQRS правильный?

    @Markusam Автор вопроса
    Виктор,
    Архитектура монолит, модуль это набор логически связанных между собой классов в одном неймспейсе, то есть например для Order это его классы которые лежать в папке Order, различные его Value Object, вспомогательные сервис классы, repository и fetcher для Order, его Aggregate Root. За пределами своего неймспейса модуля, классы напрямую не используются и не вызываются, кроме Api service классов. Упрощенный пример такого Service для Store

    Интерфейс
    interface StoreApiServiceInterface
    {
        public function retrieveActiveStore(DateTimeImmutable $currentTime): ?StoreDTO;
    }
    namespace App\Store\Application\Api;

    И такая же упрощенная реализация

    namespace App\Store\Application\Api;
    
    use App\Store\Application\UseCase\Get\Active\GetActiveStoreQuery;
    use App\Store\Application\UseCase\Get\Active\GetActiveStoreQueryHandler;
    use App\Store\Domain\ReadModel\StoreReadModel;
    
    final class StoreApiService implements StoreApiServiceInterface
    {
        private GetActiveStoreQueryHandler $storeQueryHandler;
    
        public function __construct(GetActiveStoreQueryHandler $storeQueryHandler)
        {
            $this->storeQueryHandler = $storeQueryHandler;
        }
    
        public function retrieveActiveStore(DateTimeImmutable $currentTime): ?StoreDTO
        {
            $query = new GetActiveStoreQuery();
            $query->currentTime = $currentTime;
            
            $resultCollection = $this->storeQueryHandler->handle($query);
            if ($resultCollection->isEmpty()) {
                return null;
            }
           
            /** @var StoreReadModel $store */
            $store = $resultCollection->getFirstElement();
    
            return new StoreDTO(
                $store->id,
                $store->name,
            );
        }
    }


    Для модуля - два отдельных сервиса?


    Для модуля который планируем вызывать из вне заводим подобные свои сервисы, то есть для модуля один такой сервис
    Написано