ืืคื ืฉื ืืชื ืืืืื ืืืืืืจ ืืงืืื, ืขืืืชื ืขื ืคืจืืืงืืื ืฉืื ืื. ืืืืื ืืจืืฉืื ืื ืืฆืืืช ืืืฉ ืืืจื ืืื ืืชื ืืืื ืืืืชื ืืืจื: ื-backender ืืืฉื ืืืชื ืืืืฆืข ืคืขืืืืช ืงืกืืืืช ืืืชืงื ื ืืคืจืืกื ืฉื ืืืคืืืงืฆืื. Docker ืืื ืืืจืื ืขืืืจ ืืคืชืื ืงืฆื ืืืืืื... ืืงืฆื ืืืืืจื ืืชืื ืืจืื ืืืืืื ืจืื ืฉื ืขืจืืืืช PHP/Java/Python/C#, ืืืืืืช ืื ืฆืจืืื ืืืกืื ืืช ืืขืชื ืฉื ืืงืฆื ืืืืืจื ืืื ืคืขื ืืื ืืืชืงืื ืืืคืจืืก ืืื. ืจืง ืืืงืื ืืื ืจืืืชื ืฉืืืื ืฉื Docker-Jenkins ืขื ืคืจืืกื ืฉืงืืคื, ืืืื ืื ืืืืืงืืช ืืืืืืืืืช.
ืืืืจืื ืืคืืจืืื ืจืืื ื ืืชืื ืขื Docker. ืืืืจ ืื ืืืืจ ืขื ืคืจืืกืช ืืืฉืื ืขืืื ืืืื ืืืืฆืขืืช VueJS/Vue Router, ืืืง ืืฉืจืช ืืื ืืฆืืจื ืฉื RESTful API ืขื NodeJS, ื- MongoDB ืืฉืืฉ ืืืกืืก ื ืชืื ืื. Docker Compose ืืฉืืฉ ืืื ืืืืืืจ ืืืืคืขืื ืืืฉืืื ืืืื ืืจืืืื.
ืืื ืฆืจืื Docker
Docker ืืืคืฉืจ ืื ืืืคืื ืืช ืชืืืื ืคืจืืกืช ืืืืฉืื ืืืืืืืื. ืืืคืชื ืืืจ ืื ืฆืจืื ืืืชืงืื ืชืืื ืืืช ืืขืฆืื ืื ืืืชืืืื ืขื ืื ืชืืืืืช ืืจืกืืืช ืืืืฉื ืฉืื. ืื ืื ืฉืืชื ืฆืจืื ืืขืฉืืช ืืื ืืืชืงืื ืืช Docker ืืืืงืืื 1-2 ืคืงืืืืช ืืงืื ืกืืื. ืืืจื ืื ืืื ืืืืชืจ ืืขืฉืืช ืืืช ืืื ืืืื ืืงืก.
ืชืืืืช ืขืืืื
ืืืชืงืื
ืืื ื ืชืืงืืืช
ืื ื ืืืฆืจืื 2 ืชืืงืืืช ืขืืืจ ืืืฉืืื ืืงืื ืืฉืจืช. ืงืืืฅ ืขื ืกืืืืช .yml ืืื ืชืฆืืจื ืืืงืจ ืืืืืื, ืฉืื ืืืืืจืื ืืืฉืืืืื ืืืืื ืืืฉืืืื.
Docker-compose.yml:
version: "3"
services:
mongo:
container_name: mongo
hostname: mongo
image: mongo
ports:
- "27017:27017"
server:
build: server/
#command: node ./server.js #ะทะดะตัั ะผะพะถะฝะพ ะฟะตัะตะทะฐะฟะธัะฐัั CMD ะธะท Dockerfile ะฒ /server
ports:
- "3000:3000"
links:
- mongo
client:
build: client/
#command: http-server ./dist #ะทะดะตัั ะผะพะถะฝะพ ะฟะตัะตะทะฐะฟะธัะฐัั CMD ะธะท Dockerfile ะฒ /client
network_mode: host
ports:
- "8089:8089"
depends_on:
- server
ืื ื ืืืฆืจืื 3 ืฉืืจืืชืื ื-Docker: ืขืืืจ NodeJS, MongoDB ืืขืืืจ ืกืืืืื ื-Vue. ื ืืกืฃ ืืืืืืจ ืืงืื ืืฉืจืช ืชืืื ืืฉืจืช. ืืื ืืงืฉืจ MongoDB ืขื API ืฉื ืืฉืจืช, ืืฉืชืืฉ ืงืืฉืืจืื ืืื ืื. ืฉืจืช, ืืงืื, ืืื ืื - ืฉืืืช ืฉืืจืืชืื.
ืืงืื VueJS
ืืชืืงืืื /ืึธืงืึผืึท ืืืคืืืงืฆืื ืืืืกืกืช ืขื VueJS. ืืืคืืืงืฆืื ื ืืฆืจื ืืืืฆืขืืช
FROM node:10
WORKDIR /client
COPY ./package*.json ./
RUN npm install
RUN npm install -g http-server
COPY . .
RUN npm run build
EXPOSE 8081
CMD ["npm", "test:dev"]
ืฉืืื ืื ืฉ-package.json ืืืขืชืง ืืืืชืงื ืื ืคืจื ืืฉืืจ ืงืืฆื ืืคืจืืืงื. ืื ื ืขืฉื ืขืืืจ ืืืฆืืขืื, ืื ืฉืืชืืื ืฉื ืืชืืงืื /node_modules ืืืฉืืจ ืืืืืื ืืขืช โโืื ืืื ืืืืฉ. ืื ืฉืืจืช ืคืงืืื ื ืฉืืจืช ืืืืืื ืื ืคืจื.
ืืืกืืฃ, ืืืฉืจ ืืืืื ืืชืืื, ืืคืงืืื ืืืืฆืขืช npm run dev
. ืคืงืืื ืื ืืชืืืจืช ื-package.json:
"scripts": {
"test:dev": "http-server dist -p 8081 -c 1 --push-state"
}
ืืื ืืืคืขืื ืงืืฆืื ืืชืืงืื / dist, ืืืชืงื ืืจืืื ืืขืืื http-server
, ืืืชืืืช ื-dev ืืืืืื spa-http-server
ืื ืฉื ืชื Vue ืืขืืื ื ืืื. ืืืื --push-state ืืคื ื ืืืืฉ ืื index.html. ืืื -c ืขื ืขืจื ืฉื ืฉื ืืื ืืืช ื ืืกืฃ http- ืฉืจืช ืื ืฉืืจ ืกืงืจืืคืืื. ืืืื ืืืืื ืืืืืงื; ืืคืจืืืงื ืืืืชื ืขืืืฃ ืืืฉืชืืฉ ื-nginx.
ืืื ืืช Vuex ืื ื ืืืฆืจืื ืฉืื apiHost: 'http://localhost:3000'
, ืฉืื ืจืฉืืื ืืฆืืืช ื-NodeJS Api. ืืืง ืืืงืื ืืืื. ืืขืช ืื ืืืงืฉืืช ืืืืงืื ืืืืืจ ืขืืืจืืช ืืืชืืืช ืืืชืจ ืืื.
API ืฉื ืฉืจืช NodeJS
ืืชืืงืืื /server
ืึดืืฆืึนืจ server.js ื- Dockerfile:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
ะ server.js ืฆืืื ืืชืืืช ืืชืจ ืขืืืจ ืืกื ื ืชืื ืื const url = 'mongodb://mongo:27017/';
. ืืชืจืช ืืงืฉืืช ืืื ืืืืืื ืื ืืืืงืื:
const clientUrl = 'http://localhost:8081';
const corsOptions = {
origin: clientUrl,
optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
};
app.use(cors());
app.all('/*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', clientUrl);
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
next();
});
app.get('/getProducts', cors(corsOptions), (req, res) => {
products.getContent
.then(data => res.json(data), err => res.json(err));
});
app.get('/getUsers', cors(corsOptions), (req, res) => {
db.getUsers()
.then(data => res.json(data), err => res.json(err));
});
ืืกืงื ื
ืืขืช ื ืขืืืจ ืืกืคืจืืืช ืืคืจืืืงื ืื ืคืขืื docker-compose build
ืืื ืืืช ืชืืื ืืช ื docker-compose up
ืืืคืขืื ืืืืืืช. ืืฆืืืช ืืจืื 3 ืืืืืืช: ืฉืจืช, ืืงืื, ืืื ืื. ืขืืืจ ืฉืจืช NodeJS, ืืชื ืืืื ืืืืืืจ ืืขืื ื ืืืืฉ ืขื ืืื ืงืืฉืืจื ืืชืืงืืืช ืืืฉืชืืฉ. ืืืืงืื ืืคืืชืื ืฆืจืื ืืืืืช ืืืฉืง ืืงืืืืช ืขื ืืขืื ื ืืืืจืช ืืื, ืืคืืขืืช ืื ืคืจื ืฉืจืช ะธ ืืื ืื. ืืื ืืืชืืื ืฉืืจืืช ื ืคืจื, ืคืฉืื ืฆืืื ืืช ืฉืื docker-compose up client
. ืื ืชืฉืื ืืขืฉืืช ืืช ืื ืืคืขืืื prune
ืืืืืงืช ืงืื ืืืื ืจืื, ืจืฉืชืืช ืืชืืื ืืช ืืื ืืคื ืืช ืืฉืืืื.
ืืชื ืืืื ืืจืืืช ืืช ืืงืื ืืืื
ืืงืืจ: www.habr.com