Skip to content

Commit f5374b3

Browse files
committed
Orchestrate using Docker with nginx
1 parent 8e4555d commit f5374b3

File tree

8 files changed

+142
-13
lines changed

8 files changed

+142
-13
lines changed

docker-compose.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
web:
2+
image: nginx
3+
links:
4+
- upload
5+
- preview
6+
- save
7+
ports:
8+
- "8000:80"
9+
volumes:
10+
- ./microservices.conf:/etc/nginx/conf.d/microservices.conf
11+
command: [nginx, '-g', 'daemon off;']
12+
13+
upload:
14+
build: ./upload
15+
environment:
16+
- AWS_ACCESS_KEY=${AWS_ACCESS_KEY}
17+
- AWS_SECRET_KEY=${AWS_SECRET_KEY}
18+
preview:
19+
build: ./preview
20+
environment:
21+
- AWS_ACCESS_KEY=${AWS_ACCESS_KEY}
22+
- AWS_SECRET_KEY=${AWS_SECRET_KEY}
23+
save:
24+
build: ./save
25+
environment:
26+
- AWS_ACCESS_KEY=${AWS_ACCESS_KEY}
27+
- AWS_SECRET_KEY=${AWS_SECRET_KEY}

microservices.conf

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
upstream backend_upload {
2+
server upload:3000;
3+
}
4+
5+
upstream backend_preview {
6+
server preview:3000;
7+
}
8+
9+
upstream backend_save {
10+
server save:3000;
11+
}
12+
13+
server {
14+
listen 80;
15+
server_name microservices;
16+
17+
location /upload {
18+
proxy_set_header Host $host;
19+
proxy_set_header X-Real-IP $remote_addr;
20+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
21+
proxy_set_header X-Forwarded-Proto $scheme;
22+
proxy_http_version 1.1;
23+
24+
if ($request_uri ~* "/upload(.*)") {
25+
proxy_pass http://backend_upload$1;
26+
}
27+
}
28+
29+
location /preview {
30+
proxy_set_header Host $host;
31+
proxy_set_header X-Real-IP $remote_addr;
32+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
33+
proxy_set_header X-Forwarded-Proto $scheme;
34+
proxy_http_version 1.1;
35+
36+
if ($request_uri ~* "/preview(.*)") {
37+
proxy_pass http://backend_preview$1;
38+
}
39+
}
40+
41+
location /save {
42+
proxy_set_header Host $host;
43+
proxy_set_header X-Real-IP $remote_addr;
44+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
45+
proxy_set_header X-Forwarded-Proto $scheme;
46+
proxy_http_version 1.1;
47+
48+
if ($request_uri ~* "/save(.*)") {
49+
proxy_pass http://backend_save$1;
50+
}
51+
}
52+
}

preview/Dockerfile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
FROM node:6.10.2-alpine
2+
3+
COPY . /src/app
4+
WORKDIR /src/app
5+
6+
RUN apk add --no-cache \
7+
build-base \
8+
g++ \
9+
cairo-dev \
10+
jpeg-dev \
11+
pango-dev \
12+
giflib-dev
13+
RUN npm install
14+
RUN npm install -g micro
15+
16+
EXPOSE 3000
17+
18+
CMD [ "micro", "image-preview.js" ]

preview/image-preview.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
'use strict'
22

3-
const fs = require('fs')
4-
const path = require('path')
53
const mime = require('mime-types')
4+
const S3 = require('aws-sdk/clients/s3')
65
const { send, json } = require('micro')
76
const Filter = require('instagram_js_filter')
87
const effects = new Filter()
98

9+
const s3 = new S3({
10+
region: 'us-west-2',
11+
params: { Bucket: 'medellinjs-microservicios' },
12+
accessKeyId: process.env.AWS_ACCESS_KEY,
13+
secretAccessKey: process.env.AWS_SECRET_KEY
14+
})
15+
1016
//
1117
// This microservice will be served as /preview
1218
//
@@ -36,13 +42,16 @@ module.exports = async function (req, res) {
3642
//
3743
// Convert an image and applies a filter
3844
//
39-
function convert (src, filter) {
45+
function convert (name, filter) {
4046
return new Promise((resolve, reject) => {
41-
fs.readFile(path.join(__dirname, 'uploads', src), (err, buffer) => {
47+
s3.getObject({
48+
Key: `uploads/${name}`
49+
}, (err, result) => {
4250
if (err) return reject(err)
4351

44-
const result = effects.apply(buffer, filter, {})
45-
resolve(result)
52+
const image = effects.apply(result.Body, filter, {})
53+
54+
resolve(new Buffer(image, 'base64'))
4655
})
4756
})
4857
}

preview/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
},
1717
"homepage": "https://github.com/julianduque/microservices-demo#readme",
1818
"dependencies": {
19+
"aws-sdk": "^2.43.0",
1920
"instagram_js_filter": "^1.4.0",
2021
"micro": "^7.3.2",
2122
"mime-types": "^2.1.15"

rules.js

Lines changed: 0 additions & 7 deletions
This file was deleted.

save/Dockerfile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
FROM node:6.10.2-alpine
2+
3+
COPY . /src/app
4+
WORKDIR /src/app
5+
6+
RUN apk add --no-cache \
7+
build-base \
8+
g++ \
9+
cairo-dev \
10+
jpeg-dev \
11+
pango-dev \
12+
giflib-dev
13+
RUN npm install
14+
RUN npm install -g micro
15+
16+
EXPOSE 3000
17+
18+
CMD [ "micro", "image-save.js" ]

upload/Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM node:6.10.2-alpine
2+
3+
COPY . /src/app
4+
WORKDIR /src/app
5+
6+
RUN npm install
7+
RUN npm install -g micro
8+
9+
EXPOSE 3000
10+
11+
CMD [ "micro", "image-upload.js" ]

0 commit comments

Comments
 (0)