- Notifications
You must be signed in to change notification settings - Fork90
koutsoumposval/laravel-microservices
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A simple laravel pseudo-microservices demo project.This is NOT a real "microservices" setup or at least something that is production ready!It is only here to point out the separation of concerns between each service and get you startedwith a containerized local environment using docker with a reverse proxy on top.
This project consists of three web servicesuser
,product
&order
andone API gatewayapi-gateway
.
The webservices are containerised with Docker and are accessible within aTraefik proxy interface.
traefik
image is used for the proxy container andphp:7.1-apache
is used and extendedfor the web services containers & the API gateway
Theapi
is using the Guzzle API Client in order to maintain connection with the web services.
Lumen was preferred since it is an easy way to expose APIs.
The current Docker environment is based on Docker Toolbox.If you don't have Docker Toolbox installed, you can download ithere.
docker-machine create laravel-microservices eval $(docker-machine env laravel-microservices)
To prevent permission problems we leverage Docker-Machine-NFS to mount volumes as NFS.First,install docker-machine-nfs and then run the following command:
docker-machine-nfs laravel-microservices --nfs-config="-alldirs -maproot=0" --mount-opts="noacl,async,nolock,vers=3,udp,noatime,actimeo=1"
docker network create traefik_webgateway
# Get the ip of the VMachine docker-machine ip laravel-microservices # Update /etc/hosts file 192.168.99.100 lm.local user.lm.local inventory.lm.local order.lm.local api.lm.local
In order to get up and running, you need to setup eachindividual service.
Once you set all services, you are ready to use them.
docker-compose -f docker/docker-compose.yml up -d --build
You can access the applications from:
#user http://user.lm.local #inventory http://inventory.lm.local #order http://order.lm.local #api gateway http://api.lm.local
You can access Traefik interface from:
http://lm.local:8080
docker-compose -f docker/docker-compose.yml down --volumes --remove-orphans
# DEPRECATED docker-compose -f docker/docker-compose.yml scale ${container-name}
Removing thetraefik.frontend.rule
from the Web services will makethem accessible only from the API gateway (traefik backend network)
Once you get started, you need to consider some of the following:
- Use databases to store data. You can add new docker
mysql
containers indocker/docker-compose.yml
and applyproxy configuration in order to be able to access them. - Each service must be accessible from a unique entry point, in our case the APIs.This should be the only way for communication between services.
- Communication between the services should not be direct. One service should not be aware of the other!This type of communication can be achieved by using messaging or events.
- Tests are essential part of software development. Functionality of each service should beunit tested. Functionality of the whole flow should be functionally tested.
- This is a setup that is using older versions of Docker, Laravel/Lumen. Update them in order to be able touse their latest features.
About
Pseudo-microservices project written in Laravel
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.