Pehea e hoʻopili ai i ka noi VueJS + NodeJS + MongoDB ma Docker

Pehea e hoʻopili ai i ka noi VueJS + NodeJS + MongoDB ma Docker
E like me kāu e hoʻomaopopo ai mai ka ʻatikala mua, ua hana wau i nā papahana like ʻole. ʻO nā lā mua i loko o kahi hui hou e hele maʻamau i ke ala like: noho ka backender me aʻu a hana i nā hana hoʻokalakupua e hoʻokomo a kau i ka noi. Pono ʻo Docker no nā mea hoʻomohala mua no ka mea ... Hoʻopaʻa pinepine ʻia ka backend ma kahi ākea o PHP/Java/Python/C# stacks, a ʻaʻole pono ka mua e hoʻohuli i ka backend i kēlā me kēia manawa e hoʻokomo a hoʻokau i nā mea āpau. Ma kahi hoʻokahi wale nō wau i ʻike ai i kahi hui Docker-Jenkins me kahi hoʻolaha ʻike, nā lāʻau, a me nā hoʻāʻo automated.

Nui nā ʻatikala kikoʻī i kākau ʻia e pili ana iā Docker. E kamaʻilio kēia ʻatikala e pili ana i ka hoʻohana ʻana i kahi palapala ʻaoʻao hoʻokahi me ka hoʻohana ʻana iā VueJS/Vue Router, aia ka ʻāpana kikowaena ma ke ʻano o kahi RESTful API me NodeJS, a hoʻohana ʻia ʻo MongoDB ma ke ʻano he waihona. Hoʻohana ʻia ʻo Docker Compose e wehewehe a holo i nā noi pahu he nui.

No ke aha e pono ai ʻo Docker

Hāʻawi ʻo Docker iā ʻoe e hoʻomaʻamaʻa i ke kaʻina hana o ka lawe ʻana i kahi noi. ʻAʻole pono ka mea hoʻomohala e hoʻokomo i nā polokalamu iā ia iho a i ʻole e hoʻoponopono i ka pili ʻole o ka mana ma kāna mīkini. ʻO nā mea a pau āu e hana ai, ʻo ia ke kau iā Docker a hoʻokomo i nā kauoha 1-2 i loko o ka console. ʻO ke ala maʻalahi loa e hana i kēia ma Linux.

Ke hoʻomaka

E hoʻouka Docker a Hoʻokumu ʻo Docker

Kapili waihona

Hana mākou i 2 mau waihona no ka mea kūʻai aku a me nā noi kikowaena. ʻO kahi faila me ka hoʻonui .yml he config Docker papa inoa, kahi i wehewehe ʻia ai nā pahu noi a pili.
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

Hana mākou i nā lawelawe 3 ma Docker: no NodeJS, MongoDB a no nā mea static ma Vue. Hoʻohui ʻia e hoʻohui i ka mea kūʻai aku i ke kikowaena pili i ke kikowaena. No ka hoʻopili ʻana iā MongoDB me ka API server, e hoʻohana loulou mongo. Server, mea kūʻai, mongo - inoa o nā lawelawe.

VueJS mea kūʻai

Ma nā palapala /mea kūʻai Hoʻokumu ʻia ka palapala noi ma VueJS. Ua hana ʻia ka polokalamu me ka hoʻohana ʻana Vue Cli. Ke kūkulu ʻana i kiʻi, kūkulu ʻia ka noi mea kūʻai aku i kahi hoʻonohonoho o nā faila static i loko o ka waihona /dist. Hōʻike ka Dockerfile i kahi hoʻonohonoho o nā kauoha no ke kūkulu ʻana i kahi kiʻi:

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"]

E ʻoluʻolu e hoʻomaopopo ʻia ua kope ʻia ka package.json a hoʻonohonoho ʻokoʻa ʻia mai ke koena o nā faila papahana. Hana ʻia kēia no ka hana, i hūnā ʻia nā mea o ka waihona / node_modules i ke kūkulu hou ʻana. Hoʻokaʻawale ʻia kēlā me kēia laina kauoha.

ʻO ka hope, ke hoʻomaka ka pahu, hoʻokō ʻia ke kauoha npm run dev. Ua wehewehe ʻia kēia kauoha ma package.json:


"scripts": {
	 "test:dev": "http-server dist -p 8081 -c 1 --push-state"
}

No ka holo ʻana i nā faila mai kahi waihona /dist, hoʻokomo ʻia ma ka honua holoʻokoʻa http-server, a ma dev-dependencies ka pūʻolo spa-http-serveri hana pono ai ka Vue Router. Hoʻihoʻi hou ka hae --push-state i index.html. Ua hoʻohui ʻia ka hae -c me ka waiwai o 1 kekona http-server ʻaʻole i hūnā i nā palapala. He hōʻike hōʻike kēia; ma kahi papahana maoli ʻoi aku ka maikaʻi o ka hoʻohana ʻana i ka nginx.

Ma ka hale kūʻai Vuex hana mākou i kahi kahua apiHost: 'http://localhost:3000', kahi i hoʻopaʻa inoa ʻia ai ka awa NodeJS Api. Ua mākaukau ka ʻāpana o ka mea kūʻai aku. I kēia manawa, hele nā ​​noi āpau mai ka mea kūʻai aku a i hope i kēia url.

API nodeJS kikowaena

Ma nā palapala /server hana kikowaena.js a me Dockerfile:


FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

В kikowaena.js i kuhikuhi ʻia henua pilikia no ka waihona const url = 'mongodb://mongo:27017/';. E ʻae ana i nā noi kāʻei kapu mai ka mea kūʻai mai:


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));
  });

hopena

E hele kāua i ka papa kuhikuhi papahana a holo docker-compose build no ke kukulu ana i na kii a docker-compose up e holo ipu. E hāpai ka hui i 3 pahu: kikowaena, mea kūʻai, mongo. No kahi kikowaena NodeJS, hiki iā ʻoe ke hoʻonohonoho i ka hoʻouka hou ʻana ma o ka hoʻopili ʻana iā ia i ka waihona mea hoʻohana. A ʻo ka mea kūʻai aku ma lalo o ka hoʻomohala ʻia e hoʻokuʻu ʻia ma ka ʻāina me ka hoʻouka hou ʻana, e holo kaʻawale kikowaena и ʻo Mongo. No ka hoʻomaka ʻana i kahi lawelawe ʻokoʻa, e kuhikuhi wale i kona inoa docker-compose up client. Mai poina e hana i kekahi manawa prune a me ka holoi ʻana i nā ipu, nā pūnaewele, a me nā kiʻi e hoʻokuʻu i nā kumuwaiwai.

Hiki iā ʻoe ke ʻike i ke code piha maanei. Ke kūkulu ʻia nei ka papahana.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka