ααΌα
αααα’αααα’αΆα
αααααΆαααΈα’ααααααα»ααααα»αααΆαααααΎααΆαααΎααααααααααααααααΆα ααααααααΌααα
αααα»ααααα»αααααΈααΆααααααΆααΎαααΆααα·ααΈααΌα
ααααΆα α’ααααα
ααΈαααααα’αααα»αααΆαα½ααααα»α α αΎαααααΎαααααααΆααααααααααΎααααΈααα‘αΎα αα·αααΆααα±ααααααΎααααΆαααααααα·ααΈα Docker ααΊβαα·αβα’αΆα
βααααβααΆαβαααααΆααβα’αααβα’αα·ααααααβαααααβααΆαβαα»αβααααα... αααααααΆααααααααααΌαααΆααααααααΆααΉαααΆαααα
αααα»ααα½αααααααΌααΆααα PHP/Java/Python/C# stacks α αΎααααααααΆααα»ααα·αα
αΆαααΆα
αααααΆα backend ααΆαααααααΎααααΈααα‘αΎα αα·αααΆαααααααΆαα’αααΈααααααααΆααααααα ααΆααααα
αααααααα½αααα»αααααααααααα»αααΎαααΆααα½ααααα
αΌαααααΆαααΆα Docker-Jenkins ααΆαα½αααΉαααΆαααΆαααααααΆααααααααααααααΆααΆα αααααα ααα» αα·αααΆαααααΎαααααααααααααααααα·α
α’ααααααααα’α·αααΆα
αααΎαααααΌαααΆααααααα’αααΈ Docker α α’ααααααααααΉααα·ααΆαα’αααΈααΆαααΆααα±ααααααΎααααΆααααΌα Single Page Application αααααααΎ VueJS/Vue Router ααααααααΆαααΈααααααα·ααα
αααα»ααααααα RESTful API ααΆαα½α NodeJS α αΎα MongoDB ααααΌαααΆαααααΎααΆααΌαααααΆααα·ααααααα Docker Compose ααααΌαααΆαααααΎααΎααααΈααααα αα·αααααΎαααΆααααααα·ααΈαα»αααΊαααα
αααΎαα
α ααα»α’αααΈααΆαααΆ Docker ααααΌαααΆα
Docker α’αα»ααααΆαα±ααα’αααααααΎααααααααααααα·ααααααααΎαααΆαααααΆαααΆαααααααΆααααααα·ααΈα α’αααα’αα·αααααααααααααΌαααΆαααα‘αΎααααααα·ααΈααααααα½αα―α α¬αααααααΆαααΆααα·αααααααΆαααααααα ααΎαααΆαααΈαααααααΆαααααα αΎαα α’αααΈαααα’αααααααΌαααααΎααΊααα‘αΎα Docker α αΎαααΆαααΆααααααααΆ 1-2 αα αααα»ααα»αααΌαα αααααααΆαααΆααααα½ααααα»αααΎααααΈααααΎααΆααΊαα ααΎααΈαα»α α
α αΆααααααΎα
ααα‘αΎα
αα ααΆαααααααααα
ααΎααααααΎαααα―αααΆαα
ααα½α 2 αααααΆαααααααα·ααΈαααΆαααΈαααααα αα·ααααΆαααΈαααα α―αααΆααααααΆαααααααααααα .yml ααΊααΆααΆαααααα ααααα Dockerααααα»αααΊααααααααα·ααΈααααΌαααΆαααααα αα·αααΆαααααααα
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 ααΆαα½α server API ααΌαααααΎ ααααΆαα mongo. αααΆαααΈααα αααΆαααΈαααααα ααα»αα ααα - αααααααααΆααααα
αααΆαααΈαααααα 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"
}
ααΎααααΈααααΎαααΆαα―αααΆαααΈααα―αααΆα / ααΈα, ααα‘αΎαααΆααα http-server
α αΎααα
αααα»α dev-dependencies αααα
αα spa-http-server
ααΎααααΈα±αα Vue Router ααααΎαααΆαααΆαααααΉαααααΌαα ααα --push-state ααααΌααα·ααα
index.html α ααα -c αααααΆαααααα 1 αα·ααΆααΈααααΌαααΆααααααααα
http-server αα·αααΆααααααΆαα»αααααααΈαααα αααβααΊβααΆβα§ααΆα αααβααΆαααααβαα½αβαα
βααΎβααααααβαα·αβααΆβαααααΎαβαααα»αβααΆαβααααΎ nginx α
αα
αααα»αα αΆα Vuex ααΎααααααΎαααΆααα½αα apiHost: 'http://localhost:3000'
αααααΆαααααααααα
ααα NodeJS Api ααααΌαααΆαα
α»ααααααα αααααα’αα·αα·αααα½α
ααΆααα α₯α‘αΌααααααΆααααααΎααΈα’αα·αα·αααα
ααΆαααααα ααΌαα
αΌααα
ααΆαα url αααα
NodeJS server API
αα
αααα»αααα―αααΆα /server
αααααΎα server.js αα·α Dockerfileα
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Π server.js α
ααα’α»ααααα αΆα url αααααΆααααΌαααααΆααα·αααααα 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
ααΎααααΈααααΎαααΆααα»αα αααα»αααΆαααΆαααΉαααΎααα»αα
ααα½α α£α αααΆαααΈααα, αααΆαααΈαααααα, ααα»αα ααα. αααααΆαααααΆαααΈααα NodeJS α’αααα’αΆα
ααααααα
ααΆαααααααα hot-reload αααααααΆααααΆαα
ααα’αααααααΎααααΆααα α αΎααααΆαααΈααααααααααααα»αα’αα·αααααα½αααααααΌαααΆαααΎαααααΎαααΆααααα»ααααα»αααΆαα½αααΉαααΆααααα»αα‘αΎααα·ααααα
αααααααΎαααΆααααα‘ααααΈααααΆα αααΆαααΈααααααΎ ΠΈ mongo. ααΎααααΈα
αΆααααααΎαααααΆααααααΆα
ααααα‘αα ααααΆαααααααααΆαααααααααααααΆα docker-compose up client
. αα»αααααα
ααααΎααΆααααααα prune
αα·αααΆααα»ααα»αααΊααα αααααΆα αα·αααΌαααΆα ααΎααααΈαααααΎαααααΆαα
α’αααα’αΆα
ααΎαααΌααααααα
ααααα: www.habr.com