diff --git a/nginx-nodejs-redis/README.md b/nginx-nodejs-redis/README.md new file mode 100644 index 0000000..64518cb --- /dev/null +++ b/nginx-nodejs-redis/README.md @@ -0,0 +1,120 @@ +## Compose sample application + +### Node.js application with Nginx proxy and a Redis database + +Project structure: +``` +. +├── docker-compose.yml +├── nginx +│   ├── Dockerfile +│   └── nginx.conf +├── web +│   ├── Dockerfile +│   ├── package.json +│   └── server.js +├── web1 +│   ├── Dockerfile +│   ├── package.json +│   └── server.js +└── web2 + ├── Dockerfile + ├── package.json + └── server.js + +4 directories, 12 files +``` + +[_docker-compose.yaml_](docker-compose.yaml) +``` +version: '3.9' +services: + redis: + image: 'redis:alpine' + ports: + - '6379:6379' + web1: + restart: on-failure + build: ./web1 + ports: + - '81:5000' + web2: + restart: on-failure + build: ./web2 + ports: + - '82:5000' + nginx: + build: ./nginx + ports: + - '80:80' + depends_on: + - web1 + - web2 +``` +The compose file defines an application with four services `redis`, `web`, `web1` and `web2`. +When deploying the application, docker-compose maps port 80 of the web service container to port 80 of the host as specified in the file. +Redis runs on default port 6379. Make sure port 6379 on the host is not being used by another container, otherwise the port should be changed. + +## Deploy with docker-compose + +``` +$ docker-compose up -d +``` +``` +Creating nginx-nodejs-redis_redis_1 ... done +Creating nginx-nodejs-redis_web1_1 ... done +Creating nginx-nodejs-redis_web2_1 ... done +Creating nginx-nodejs-redis_nginx_1 ... done +``` + + +## Expected result + +Listing containers must show three containers running and the port mapping as below: + + +``` +docker-compose ps + Name Command State Ports +------------------------------------------------------------------------------------------ +nginx-nodejs-redis_nginx_1 /docker-entrypoint.sh ngin Up 0.0.0.0:80->80/tcp + ... +nginx-nodejs-redis_redis_1 docker-entrypoint.sh redis Up 0.0.0.0:6379->6379/tcp + ... +nginx-nodejs-redis_web1_1 docker-entrypoint.sh npm Up 0.0.0.0:81->5000/tcp + start +nginx-nodejs-redis_web2_1 docker-entrypoint.sh npm Up 0.0.0.0:82->5000/tcp + start +``` + +## Testing the app + +After the application starts, navigate to `http://localhost:80` in your web browser or run: + +``` +curl localhost:80 +curl localhost:80 +web1: Total number of visits is: 1 +``` + +``` +curl localhost:80 +web1: Total number of visits is: 2 +``` +``` +$ curl localhost:80 +web2: Total number of visits is: 3 +``` + +``` +$ curl localhost:80 +web2: Total number of visits is: 4 +``` + + +## Stop and remove the containers + +``` +$ docker-compose down +``` +