Docker cqrs react
-
Upload
simone-di-maulo -
Category
Engineering
-
view
119 -
download
4
Transcript of Docker cqrs react
![Page 1: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/1.jpg)
CQRS, REACTJS, DOCKERIN A NUTSHELL
Andrea GiulianoClaudio D'Alicandro Simone Di Maulo
![Page 2: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/2.jpg)
NEW AMAZING PROJECT
![Page 3: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/3.jpg)
WE CAN WRITE IT FROM SCRATCH
![Page 4: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/4.jpg)
BUT
![Page 5: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/5.jpg)
immagine manager incazzato
WE NEED IT IN A VERY FEW TIME
![Page 6: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/6.jpg)
AND
![Page 7: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/7.jpg)
IT SHOULD BE
![Page 8: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/8.jpg)
WTF!
![Page 9: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/9.jpg)
WHERE DO WE START?
![Page 10: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/10.jpg)
COMFORT ZONE
![Page 11: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/11.jpg)
DOMAIN
▸ data come from and go to external entities
▸ users can configure to send a subset of data
▸ users send data based on their plan
send data from a source to a targetGOAL
![Page 12: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/12.jpg)
THE DOMAIN
▸ unpredictable data structures
▸ ad hoc workflow for each vendor
▸ variable number of steps
▸ handle rate limits from different vendors
▸ handle different error cases from different vendors
▸ handle business-oriented limits (based on plans...)
▸ some tasks need to be done asynchronously
![Page 13: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/13.jpg)
IDEA
![Page 14: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/14.jpg)
BLACK BOX REASONING▸ identify the main entities involved
▸ define a common input and output
▸ find a way to let things talk
INPUT OUTPUT
![Page 15: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/15.jpg)
FROM BLACK BOXES TO BOUNDED CONTEXTS
![Page 16: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/16.jpg)
DEPENDENCIES INFRA BC
MODEL
APPLICATION
PRESENTATION
![Page 17: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/17.jpg)
PROJECT DIRECTORY TREE
![Page 18: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/18.jpg)
APP DIRECTORY TREE
![Page 19: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/19.jpg)
INFRASTRUCTURE DIRECTORY TREE
![Page 20: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/20.jpg)
INSIDE THE BOUNDED CONTEXT
![Page 21: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/21.jpg)
BC DIRECTORY TREE
![Page 22: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/22.jpg)
BC APPLICATION DIRECTORY TREE
![Page 23: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/23.jpg)
BC MODEL DIRECTORY TREE
![Page 24: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/24.jpg)
BC PRESENTATION DIRECTORY TREE
![Page 25: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/25.jpg)
EVERYTHING'S AWESOME
▸ the framework is an implementation detail
▸ the directory structure is explicit
▸ the domain is isolated
![Page 26: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/26.jpg)
WE DON'T WANT TO MESS THINGS UP
![Page 27: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/27.jpg)
DON'T MESS UP THINGS
![Page 28: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/28.jpg)
WHAT'S THE ISSUE HERE
▸ understandable?
▸ code can't be reused
▸ high coupling
▸ untestable
▸ too many responsibilities
▸ hard to find bugs
▸ not changes-prone
![Page 29: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/29.jpg)
WHAT WE WANT
![Page 30: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/30.jpg)
COMMAND QUERY RESPONSIBILITY SEGREGATION AKA CQRS
A SOLUTION
![Page 31: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/31.jpg)
CQRS
▸ separe reads from writes
▸ commands perform actions
▸ queries return data
▸ heterogeneous data storages
▸ easy scaling
▸ deal with eventual consistency
![Page 32: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/32.jpg)
WRITE STORAGE
QUERY
COMMAND
COMMAND
COMMAND BUS
COMMAND HANDLERDOMAIN
REPOSITORY
READ STORAGEREPOSITORY
EVENT BUS
EVENT SUBSCRIBER
![Page 33: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/33.jpg)
IT'S ALL ABOUT BUSES
![Page 34: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/34.jpg)
IT'S ALL ABOUT BUSES COMMUNICATION
![Page 35: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/35.jpg)
INTERNAL COMMUNICATION
BC
EVENT
COMMAND
![Page 36: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/36.jpg)
MESSAGE BUS
$ composer require simple-bus/message-bus
![Page 37: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/37.jpg)
COMMANDS
COMMAND BUS
Represent the change that should be done in the domain
They are named with a verb in the imperative tense and may include the aggregate type, for example ScheduleATask.
![Page 38: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/38.jpg)
COMMANDS
COMMAND BUS
CONTROLLER
$commandBus->handle( ScheduleATask::fromTaskId($taskId) );
HANDLER
public function handle(Command $command) { //do something with the $command }
![Page 39: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/39.jpg)
EVENTS
BC 1 BC 2
EVENT BUS
An event represents something that took place in the domain. They are always named with a past-participle verb, such as TaskScheduled
![Page 40: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/40.jpg)
EVENTS
BC 1 BC 2
EVENT BUS
subscribes_to: 'user-created'
subscribes_to: 'task-stopped'
subscribes_to: 'task-suspended'
![Page 41: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/41.jpg)
EVENTS
BC 1 BC 2
EVENT BUS
$messageBus->handle( UserCreatedEvent::fromUser($user) );
subscribes_to: 'user-created'
subscribes_to: 'task-stopped'
subscribes_to: 'task-suspended'$messageBus->handle( TaskSuspendedEvent::fromTask($task) );
![Page 42: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/42.jpg)
COMMUNICATION AMONG BCS
BC 1 BC 2
QUEUE
NETWORK
![Page 43: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/43.jpg)
QUEUE
BC 1 BC 2
QUEUE
$producer->publish($message); $consumer->consume($message);
![Page 44: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/44.jpg)
NETWORK
BC 1 BC 2
NETWORK
$httpClient->post('/tasks/schedule');
POST /tasks/schedule
![Page 45: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/45.jpg)
SCENARIO: TRIGGER THE TASKS SCHEDULE EVERY 10 MINUTES
TIMER
![Page 46: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/46.jpg)
SCENARIO: TRIGGER THE TASKS SCHEDULE EVERY 10 MINUTES
TIMER SCHEDULERPOST /tasks/schedule
![Page 47: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/47.jpg)
SCENARIO: TRIGGER THE TASKS SCHEDULE EVERY 10 MINUTES
TIMER SCHEDULERPOST /tasks/schedule
DATA STORAGE
$taskRepository->getAll()
![Page 48: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/48.jpg)
SCENARIO: TRIGGER THE TASKS SCHEDULE EVERY 10 MINUTES
TIMER SCHEDULERPOST /tasks/schedule
DATA STORAGE
$taskRepository->getAll()
TASK QUEUE
enqueue($taskId)
![Page 49: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/49.jpg)
SCENARIO: TRIGGER THE TASKS SCHEDULE EVERY 10 MINUTES
TIMER SCHEDULERPOST /tasks/schedule
DATA STORAGE
$taskRepository->getAll()
TASK QUEUE
enqueue($taskId)
W1 W2 W3 W..N...
![Page 50: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/50.jpg)
LET ME SEE WHAT YOU HAVE DONE
IT'S TIME TO SHOW DOWN
![Page 51: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/51.jpg)
WHAT THE TEAM HAS DELIVERED
![Page 52: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/52.jpg)
WHAT THE MANAGEMENT SEE
![Page 53: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/53.jpg)
WHAT THE MANAGEMENT WANTS
![Page 54: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/54.jpg)
LET'S START FROM THE TEMPLATE
![Page 55: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/55.jpg)
TWIG
![Page 56: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/56.jpg)
THE FRONTEND STUFF
![Page 57: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/57.jpg)
THE FRONTEND STUFFORDER DEPENDENT
![Page 58: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/58.jpg)
THE FRONTEND STUFF
GLOBAL SCOPE
![Page 59: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/59.jpg)
<script> $('.btn').click(function(e){
e.stopPropagation(); // Do something cool! }); </script>
NEVER TRUST THE GLOBAL SCOPE
![Page 60: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/60.jpg)
A STEP BACKWARD
![Page 61: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/61.jpg)
WE ARE BACKEND DEVELOPERS
![Page 62: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/62.jpg)
OUR COMFORT ZONE
![Page 63: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/63.jpg)
OOP
![Page 64: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/64.jpg)
ENCAPSULATION
![Page 65: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/65.jpg)
MODULES
![Page 66: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/66.jpg)
DEPENDENCY INJECTION
![Page 67: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/67.jpg)
GOOD NEWS
![Page 68: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/68.jpg)
![Page 69: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/69.jpg)
ECMASCRIPT 6
![Page 70: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/70.jpg)
DEFAULT VALUES
![Page 71: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/71.jpg)
CLASSES
![Page 72: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/72.jpg)
INHERITANCE
![Page 73: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/73.jpg)
CREATE YOUR MODULES
![Page 74: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/74.jpg)
IMPORT A MODULE
![Page 75: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/75.jpg)
IMPORT ONLY WHAT YOU NEED
![Page 76: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/76.jpg)
WHAT ABOUT THE UI?
![Page 77: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/77.jpg)
![Page 78: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/78.jpg)
var React = require('react'); var ReactDOM = require('react-dom');
ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('app') );
![Page 79: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/79.jpg)
![Page 80: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/80.jpg)
https://kangax.github.io/compat-table/es6/
![Page 81: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/81.jpg)
![Page 82: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/82.jpg)
ASSETIC CUSTOM FILTERS
![Page 83: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/83.jpg)
![Page 84: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/84.jpg)
ANOTHER STEP BACKWARD
![Page 85: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/85.jpg)
REMEMBER THE BOUNDED CONTEXT
![Page 86: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/86.jpg)
A LOT OF SMALL COMPONENTS
![Page 87: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/87.jpg)
A LOT OF SMALL APPLICATIONS
![Page 88: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/88.jpg)
BOUNDED CONTEXT FACEBOOK BOUNDED CONTEXT MAILCHIMPBOUNDED CONTEXT MAPPING
![Page 89: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/89.jpg)
BOUNDED CONTEXT FACEBOOK BOUNDED CONTEXT MAILCHIMPBOUNDED CONTEXT MAPPING
![Page 90: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/90.jpg)
Gulp Bundler
+
BOUNDED CONTEXT FACEBOOK BOUNDED CONTEXT MAILCHIMPBOUNDED CONTEXT MAPPING
![Page 91: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/91.jpg)
DEVELOPMENT WORKFLOW
![Page 92: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/92.jpg)
$ docker/gulp
docker-compose run --rm --entrypoint bash npm -c "gulp"
![Page 93: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/93.jpg)
// gulpfile.js var gulp = require('gulp'); var hub = require('gulp-hub');
process .env .WEBPACK_CONFIG_FILE = path.join( __dirname, 'webpack.config.js' ) ;
hub(['src/**/gulpfile.js']);
![Page 94: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/94.jpg)
BOUNDED CONTEXT FACEBOOK BOUNDED CONTEXT MAILCHIMPBOUNDED CONTEXT MAPPING
gulpfile.js gulpfile.js gulpfile.js
![Page 95: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/95.jpg)
BOUNDED CONTEXT FACEBOOK
gulpfile.js
"## FacebookPresentationBundle.php $## Resources "## assets "## config "## public $## views
![Page 96: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/96.jpg)
$ app/console assets:install
LET'S EXPOSE TO THE WEB
![Page 97: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/97.jpg)
APPLICATION ENTRYPOINT
![Page 98: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/98.jpg)
IT'S A BIG WORLD OUT THERE!
![Page 99: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/99.jpg)
![Page 100: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/100.jpg)
![Page 101: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/101.jpg)
![Page 102: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/102.jpg)
![Page 103: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/103.jpg)
THE DEVELOPMENT ENVIRONMENT
▸ Easy to use so many technologies at no installation cost
▸ Prepare the scaffolding for a new developer is extremely simple
▸ Superior performances over previous systems
![Page 104: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/104.jpg)
docker-compose.yml docker-compose.dev.yml
![Page 105: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/105.jpg)
THE INFRASTRUCTURE
![Page 106: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/106.jpg)
THE INFRASTRUCTURE
![Page 107: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/107.jpg)
THE INFRASTRUCTURE
![Page 108: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/108.jpg)
THE INFRASTRUCTURE
![Page 109: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/109.jpg)
THE INFRASTRUCTURE
VS
![Page 110: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/110.jpg)
THE INFRASTRUCTURE
VS
![Page 111: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/111.jpg)
STAGE
▸ Automate image building
▸ Copy the same structure used in dev
![Page 112: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/112.jpg)
STAGE
▸ Automate image building
▸ Copy the same structure used in dev
![Page 113: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/113.jpg)
AUFS: VOLUMES MIGHT BE A LITTLE HARDER THAN IT SEEMS
![Page 114: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/114.jpg)
SYMFONY PARAMETERS
![Page 115: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/115.jpg)
incenteev/composer-parameter-handler
![Page 116: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/116.jpg)
DOCKER CLOUD REPOSITORY CONFIGURATION
![Page 117: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/117.jpg)
![Page 118: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/118.jpg)
![Page 119: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/119.jpg)
DATA ONLY CONTAINER
![Page 120: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/120.jpg)
DATA ONLY CONTAINER
![Page 121: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/121.jpg)
DATA ONLY CONTAINER
![Page 122: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/122.jpg)
DATA ONLY CONTAINER
![Page 123: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/123.jpg)
FIRST DEPLOY
![Page 124: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/124.jpg)
AN ELEPHANT IN THE ROOM... WE NEED
▸ Automated deploy strategy
▸ The freedom to easily scale
![Page 125: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/125.jpg)
SCALE
$ docker-compose scale \web=2 \worker=3
![Page 126: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/126.jpg)
HARD TRUTH
fpm:
image: 'adespresso/hubespresso-staging:fpm-latest'
deployment_strategy: every_node
sequential_deployment: true
tags:
- fpm
- hubespresso
- production
volumes:
- /var/www/project
volumes_from:
- shared-fpm.hubespresso-production
SCALE CONTAINERS IS WORTHLESS IF YOU DO NOT SCALE NODES
![Page 127: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/127.jpg)
HARD TRUTH
SCALE CONTAINERS IS WORTHLESS IF YOU DO NOT SCALE NODES
fpm:
image: 'adespresso/hubespresso-staging:fpm-latest'
deployment_strategy: every_node
sequential_deployment: true
tags:
- fpm
- hubespresso
- production
volumes:
- /var/www/project
volumes_from:
- shared-fpm.hubespresso-production
![Page 128: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/128.jpg)
DATA ONLY CONTAINER IS A PAIN
![Page 129: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/129.jpg)
![Page 130: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/130.jpg)
DEPLOYMENT
▸ deploy the infrastructure is not straightforward
▸ multiple container in multiple nodes
▸ every container has its own lifecycle
▸ we are not assuring zero-downtime on deployment
![Page 131: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/131.jpg)
THE SOLUTION: GREEN BLUE DEPLOYMENT
![Page 132: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/132.jpg)
THE SOLUTION: GREEN BLUE DEPLOYMENT
![Page 133: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/133.jpg)
THE SOLUTION: GREEN BLUE DEPLOYMENT
![Page 134: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/134.jpg)
CONCLUSION
![Page 135: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/135.jpg)
CQRSPHP7
DOCKERREACTJS
MONGODBWEBPACKGULP
![Page 136: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/136.jpg)
LEAVE THE COMFORT ZONE
![Page 137: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/137.jpg)
THANKS
![Page 138: Docker cqrs react](https://reader033.fdocuments.us/reader033/viewer/2022051300/58ee07be1a28ab6a5f8b45f1/html5/thumbnails/138.jpg)
QUESTIONS?