แ แแแแ แช แฌแแแ แกแขแแขแแแแแ แแแฎแแแแ, แกแฎแแแแแกแฎแแ แแ แแแฅแขแแ แแแฃแจแแแแแ. แแฎแแ แแฃแแแจแ แแแ แแแแ แแฆแแแแ, แ แแแแ แช แฌแแกแ, แแแแแ แแแแ แแแแแก: แแแแฎแแแ แ แแแก แฉแแแแแ แแ แแกแ แฃแแแแก แแแแแฃแ แแแฅแแแแแแแแก แแแแแแแชแแแก แแแกแขแแแแชแแแกแ แแ แแแแกแแแแแกแแแแแ. Docker แจแแฃแชแแแแแแ แฌแแแ แแแแแแแแแ แแแแกแแแแก, แ แแแแแ... Backend แฎแจแแ แแ แแฌแแ แแแ PHP/Java/Python/C# แกแขแแแแแแก แคแแ แแ แแแแแแแแแจแ แแ แฌแแแ แแฎแแ แแก แแ แแ แแก แกแแญแแ แ แงแแแแ แฏแแ แแ แแแฅแแแแแก แงแฃแ แแแฆแแแแก แแแแแขแแแ แงแแแแแคแ แแก แแแกแขแแแแชแแแกแ แแ แแแแกแแแแแกแแแแแ. แแฎแแแแ แแ แ แแแแแแแก แแแแแแแฎแ Docker-Jenkins แแแแแแแแชแแ แแแแญแแแ แแแแ แแแแแแแแแแ, แแฃแ แแแแแแแแ แแ แแแขแแแแขแฃแ แ แขแแกแขแแแแ.
แแแแแ แแก แจแแกแแฎแแ แแแแ แ แแแขแแแฃแ แ แกแขแแขแแ แแแแฌแแ แ. แแ แกแขแแขแแแจแ แแแกแแฃแแ แแแ VueJS/Vue แ แแฃแขแแ แแก แแแแแงแแแแแแ แแ แแ แแแแ แแแก แแแแแแแชแแแก แแแแแแแกแแแแแ, แกแแ แแแ แแก แแแฌแแแ แแ แแก RESTful API-แแก แกแแฎแแ NodeJS-แแ, แฎแแแ MongoDB แแแแแแงแแแแแ แ แแแแ แช แแแแแชแแแแ แแแแ. Docker Compose แแแแแแงแแแแแ แแ แแแแแ แแแแขแแแแแ แแก แแแแแแแชแแแก แแแแกแแแฆแแ แแกแ แแ แแแกแแจแแแแแ.
แ แแขแแ แแ แแก แกแแญแแ แ แแแแแ แ
Docker แกแแจแฃแแแแแแก แแแซแแแแ แแแขแแแแขแแแแ แแ แแแแแแแชแแแก แแแแแแแแแแก แแ แแชแแกแ. แแแแแแแแแ แก แแฆแแ แกแญแแ แแแแ แแ แแแ แแแแแแก แแแแแฃแแแแแแแแ แแแกแขแแแแชแแ แแ แแแ แกแแแแแก แจแแฃแแแแกแแแแแแ แแแแแก แแแแ แแขแแ. แงแแแแแคแแ แ แ แแช แแฅแแแ แแญแแ แแแแแ แแ แแก แแแแแแกแขแแแแ แแ Docker แแ แฉแแฌแแ แแ 1-2 แแ แซแแแแแ แแแแกแแแจแ. แแแแก แแแแแแแแแก แงแแแแแแ แแแกแแฎแแ แฎแแแแแ แแแแ Linux-แแ.
แแแชแแแแแแ
แฃแชแแแแแ
แกแแฅแแฆแแแแแก แกแขแ แฃแฅแขแฃแ แ
แฉแแแ แแฅแแแแ 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 แกแแ แแแ แแก 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-แแแแแแแแแแฃแแแแแแจแ แแแแแขแ spa-http-server
แ แแแ Vue Router-แแ แกแฌแแ แแ แแแฃแจแแแก. --push-state แแ แแจแ แแแแแแแกแแแแ แแแแแ index.html-แแ. แแแแแแขแ -c แแ แแจแ 1 แฌแแแแก แแแแจแแแแแแแแ http-แกแแ แแแ แ แแ แฅแแจแแ แแแฃแแ แกแแ แแแขแแแ. แแก แแ แแก แขแแกแขแแก แแแแแแแแ; แ แแแแฃแ แแ แแแฅแขแแ แฃแแฏแแแแกแแ แแแแแแงแแแแ nginx.
Vuex แแแฆแแแแแจแ แแฅแแแแ แแแแก apiHost: 'http://localhost:3000'
, แกแแแแช แ แแแแกแขแ แแ แแแฃแแแ NodeJS Api แแแ แขแ. แแแแแแขแแก แแแฌแแแ แแแแ แแ แแก. แแฎแแ แงแแแแ แแแแฎแแแแ แแแแแแขแแแแ แฃแแแ แแแแแแแก แแ url-แแ.
NodeJS แกแแ แแแ แแก API
แกแแฅแแฆแแแแแจแ /server
แจแแฅแแแ แกแแ แแแ แ. js แแ Dockerfile:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
ะ แกแแ แแแ แ. 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
แแแแขแแแแแ แแแแก แแแกแแจแแแแแ. แแฃแแแ แแฌแแแก 3 แแแแขแแแแแ แก: แกแแ แแแ แ, แแแแแแขแ, แแแแแ. NodeJS แกแแ แแแ แแกแแแแก, แจแแแแซแแแแ แแแแแแแคแแแฃแ แแ แแ แชแฎแแแ แแแแแขแแแ แแแ แแแแฎแแแ แแแแแก แกแแฅแแฆแแแแแกแแแ แแแแแแจแแ แแแแ. แแ แแแแฃแจแแแแแแก แแ แแชแแกแจแ แแงแแคแ แแแแแแขแ แฃแแแ แแงแแก แแแจแแแแฃแแ แแแแแแฃแ แแ แชแฎแแแ แแแแแขแแแ แแแแ, แชแแแแ แแแจแแแแฃแแ แกแแ แแแ แแ ะธ แแแแแ. แชแแแแ แกแแ แแแกแแก แแแกแแฌแงแแแแ, แฃแแ แแแแ แแแฃแแแแแ แแแกแ แกแแฎแแแ docker-compose up client
. แแ แแแแแแแฌแงแแแ แแแแก แแแแแแแแ แฎแแแแแฎแแ prune
แแ แฌแแจแแแแ แแแแขแแแแแ แแแ, แฅแกแแแแแ แแ แกแฃแ แแแแแ แ แแกแฃแ แกแแแแก แแแกแแแแแแกแฃแคแแแแแแ.
แแฅแแแ แจแแแแซแแแแ แแแฎแแ แกแ แฃแแ แแแแ
แฌแงแแ แ: www.habr.com