Mokhoa oa ho paka sesebelisoa sa VueJS + NodeJS + MongoDB ho Docker

Mokhoa oa ho paka sesebelisoa sa VueJS + NodeJS + MongoDB ho Docker
Joalokaha u ka utloisisa ho tloha sehloohong se fetileng, ke ile ka sebetsa mererong e fapaneng. Matsatsi a pele sehlopheng se secha hangata a tsamaea ka tsela e ts'oanang: motho ea ka morao o lula fatše le nna mme a etsa liketso tsa boselamose ho kenya le ho tsamaisa kopo. Docker ke ea bohlokoa bakeng sa bahlahisi ba pele hobane ... The backend e atisa ho ngoloa ka mefuta e mengata ea PHP / Java / Python / C #, 'me ka pele ha ho hlokahale hore e sitise backend nako le nako ho kenya le ho tsamaisa ntho e' ngoe le e 'ngoe. Ke sebakeng se le seng feela moo ke boneng motsoako oa Docker-Jenkins le phepelo e pepeneneng, li-log le liteko tse ikemetseng.

Lingoliloeng tse ngata tse qaqileng li ngotsoe ka Docker. Sehlooho sena se tla bua ka ho tsamaisa Kopo ea Leqephe le le leng ho sebelisa VueJS / Vue Router, karolo ea seva e ka sebopeho sa RESTful API le NodeJS, 'me MongoDB e sebelisoa e le database. Docker Compose e sebelisetsoa ho hlalosa le ho tsamaisa lits'ebetso tse ngata tsa lisebelisoa.

Hobaneng ha Docker e hlokahala

Docker e u lumella ho iketsetsa ts'ebetso ea ho kenya kopo. Moqapi ha a sa hloka ho kenya mananeo a le mong kapa a sebetsana le ho se lumellane ha mofuta mochining oa hae. Seo u hlokang ho se etsa feela ke ho kenya Docker le ho thaepa litaelo tsa 1-2 ka har'a console. Mokhoa o bonolo ka ho fetisisa oa ho etsa sena ke ho Linux.

Rea qala

Kenya Docker 'me Docker e qapa

Sebopeho sa foldara

Re theha lifoldara tse 2 bakeng sa lits'ebetso tsa bareki le li-server. Faele e nang le .yml extension ke config Docker Compose, moo lijana tsa kopo li hlalosoang le ho amahanngoa.
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

Re theha lits'ebeletso tse 3 ho Docker: bakeng sa NodeJS, MongoDB le bakeng sa tse tsitsitseng ho Vue. E kentsoe ho hokela moreki ho seva e itšetlehile ka seva. Ho hokahanya MongoDB le seva sa API, sebelisa lihokelo mongo. Seva, moreki, mongo - mabitso a lits'ebeletso.

Moreki oa VueJS

Ka foldareng /client Sesebelisoa se thehiloe ho VueJS. Sesebelisoa se entsoe ho sebelisoa Bona Cli. Ha o haha ​​​​setšoantšo, sesebelisoa sa moreki se hahiloe ka har'a sete ea lifaele tse tsitsitseng foldareng /dist. Dockerfile e hlalosa lethathamo la litaelo tsa ho aha setšoantšo:

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

Ka kopo hlokomela hore package.json e kopitsoe mme e kentsoe ka thoko ho lifaele tse ling tsa projeke. Sena se etsoa bakeng sa ts'ebetso, e le hore litaba tsa foldara ea /node_modules li bolokoe ha li hahuoa hape. Mola o mong le o mong oa taelo o bolokiloe ka thoko.

Qetellong, ha setshelo se qala, taelo e etsoa npm run dev. Taelo ena e hlalositsoe ho package.json:


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

Ho tsamaisa lifaele ho tsoa foldareng /dist, e kentsoeng lefatšeng ka bophara http-server, le ho itšetlehileng ka dev sephutheloana spa-http-servere le hore Vue Router e sebetse hantle. Letšoao la --push-state le lebisa ho index.html. Folakha ea -c e nang le boleng ba motsotsoana o le 1 e kentsoe ho http-server ha e na cache scripts. Ona ke mohlala oa teko; morerong oa 'nete ho molemo ho sebelisa nginx.

Ka lebenkeleng la Vuex re theha lebala apiHost: 'http://localhost:3000', moo boema-kepe ba NodeJS Api bo ngolisitsoeng teng. Karolo ea bareki e se e loketse. Joale likopo tsohle tse tsoang ho moreki ho ea ka morao li ea ho url ena.

NodeJS seva API

Ka foldareng /server bopa seva.js le Dockerfile:


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

В seva.js bontšitsoe url bakeng sa database const url = 'mongodb://mongo:27017/';. E lumella likopo tse fapaneng ho tsoa ho moreki:


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

fihlela qeto e

Joale ha re ee bukeng ea morero ebe re matha docker-compose build bakeng sa ho aha litšoantšo le docker-compose up ho tsamaisa ditshelo. Sehlopha se tla phahamisa lijana tse 3: seva, moreki, mongo. Bakeng sa seva sa NodeJS, o ka hlophisa hot-reload ka ho e hokahanya le foldara ea mosebelisi. 'Me moreki ea ntseng a ntlafatsoa o lokela ho qalisoa sebakeng sa heno ka ho kenya bocha, ho sebetsa ka thoko seva и Mongo. Ho qala tšebeletso e arohaneng, bolela feela lebitso la eona docker-compose up client. U se ke ua lebala ho e etsa ka linako tse ling prune le ho hlakola lijana, marang-rang le litšoantšo ho lokolla lisebelisoa.

U ka bona khoutu e felletseng mona. Morero o ntse o tsoela pele.

Source: www.habr.com

Eketsa ka tlhaloso