Developing Microservices - Node, React, and Docker
http://mherman.org/microservice-movies/
Architecture
Name | Service | Container | Tech |
---|---|---|---|
Web | Web | web | React, React-Router |
Movies API | Movies | movies | Node, Express |
Movies DB | Movies | movies-db | Postgres |
Swagger | Movies | swagger | Swagger UI |
Users API | Users | users | Node, Express |
Users DB | Users | users-db | Postgres |
Functional Tests | Test | n/a | TestCafe |
Want to learn how to build this project?
Check out the blog post.
Want to use this project?
Setup
-
Fork/Clone this repo
-
Download Docker (if necessary)
-
Make sure you are using a Docker version >= 17:
$ docker -v Docker version 17.03.0-ce, build 60ccb22
Build and Run the App
Set the Environment variables
$ export NODE_ENV=development
Fire up the Containers
Build the images:
$ docker-compose build
Run the containers:
$ docker-compose up -d
Migrate and Seed
With the apps up, run:
$ sh init_db.sh
Sanity Check
Test out the following services...
http://localhost:3000
(1) Users -Endpoint | HTTP Method | CRUD Method | Result |
---|---|---|---|
/users/ping | GET | READ | pong |
/users/register | POST | CREATE | add a user |
/users/login | POST | CREATE | log in a user |
/users/user | GET | READ | get user info |
http://localhost:3001
(2) Movies -Endpoint | HTTP Method | CRUD Method | Result |
---|---|---|---|
/movies/ping | GET | READ | pong |
/movies/user | GET | READ | get all movies by user |
/movies | POST | CREATE | add a single movie |
http://localhost:3007
(3) Web -Endpoint | HTTP Method | CRUD Method | Result |
---|---|---|---|
/ | GET | READ | render main page |
/login | GET | READ | render login page |
/register | GET | READ | render register page |
/logout | GET | READ | log a user out |
/collection | GET | READ | render collection page |
(4) Movies Database and (5) Users Database
To access, get the container id from docker ps
and then open psql
:
$ docker exec -ti <container-id> psql -U postgres
(6) Functional Tests
With the containers up running and TestCafe globally installed, run:
$ sh test.sh
http://localhost:3003/docs
(7) Swagger -Access Swagger docs at the above URL
Commands
To stop the containers:
$ docker-compose stop
To bring down the containers:
$ docker-compose down
Want to force a build?
$ docker-compose build --no-cache
Remove images:
$ docker rmi $(docker images -q)