Ungapakisha kanjani uhlelo lwe-VueJS + NodeJS + MongoDB ku-Docker

Ungapakisha kanjani uhlelo lwe-VueJS + NodeJS + MongoDB ku-Docker
Njengoba ungaqonda esihlokweni esandulele, ngisebenze kumaphrojekthi ahlukene. Izinsuku zokuqala eqenjini elisha ngokuvamile zihamba ngendlela efanayo: osebenza ngemuva uhlala phansi nami futhi enze izenzo zomlingo ukuze afake futhi akhiphe uhlelo lokusebenza. I-Docker ibalulekile kubathuthukisi abangaphambili ngoba... I-backend ivame ukubhalwa ezinhlobonhlobo zezitaki ze-PHP/Java/Python/C#, futhi okungaphambili akudingeki ukuthi kuphazamise i-backend njalo ukuze kufakwe futhi kusetshenziswe yonke into. Kusendaweni eyodwa kuphela lapho ngabona khona inhlanganisela ye-Docker-Jenkins nokusetshenziswa okusobala, amalogi, nokuhlola okuzenzakalelayo.

Kubhalwe izindatshana eziningi ezinemininingwane mayelana ne-Docker. Lesi sihloko sizokhuluma ngokukhipha Isicelo Sekhasi Elilodwa kusetshenziswa i-VueJS/Vue Router, ingxenye yeseva isesimweni se-RESTful API nge-NodeJS, kanti i-MongoDB isetshenziswa njengesizindalwazi. I-Docker Compose isetshenziselwa ukuchaza nokusebenzisa izinhlelo zokusebenza zeziqukathi eziningi.

Kungani i-Docker idingeka

I-Docker ikuvumela ukuthi wenze ngokuzenzakalelayo inqubo yokuthumela isicelo. Umthuthukisi akasadingi ukufaka izinhlelo ngokwakhe noma abhekane nokungahambisani kwenguqulo emshinini wakhe. Odinga ukukwenza ukufaka i-Docker bese uthayipha imiyalo engu-1-2 kukhonsoli. Indlela elula yokwenza lokhu ku-Linux.

Ukuqalisa

Faka Docker futhi Ukuqamba i-Docker

Isakhiwo sefolda

Sakha amafolda ama-2 ezinhlelo zokusebenza zeklayenti neseva. Ifayela elinesandiso se-.yml liwukulungiselelwa I-Docker Ukubhala, lapho iziqukathi zohlelo lokusebenza zichazwa futhi zihlotshaniswa khona.
I-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

Sakha izinsizakalo ezi-3 ku-Docker: ze-NodeJS, i-MongoDB kanye nezimile ku-Vue. Kwengezwe ukuze kuxhunywe iklayenti kuseva kuncike kuseva. Ukuxhumanisa i-MongoDB neseva ye-API, sebenzisa izixhumanisi mongo. Iseva, iklayenti, i-mongo - amagama ezinsizakalo.

Iklayenti le-VueJS

Kufolda /iklayenti Uhlelo lokusebenza lusekelwe ku-VueJS. Uhlelo lokusebenza lwakhiwe kusetshenziswa Bheka Cli. Lapho wakha isithombe, uhlelo lokusebenza lweklayenti lakhelwe kusethi yamafayela amile kufolda /dist. I-Dockerfile ichaza isethi yemiyalo yokwakha isithombe:

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

Sicela uqaphele ukuthi i-package.json ikopishiwe futhi ifakwe ngokuhlukile kwamanye amafayela ephrojekthi. Lokhu kwenzelwa ukusebenza, ukuze okuqukethwe kwefolda /node_modules kugcinwe kunqolobane lapho kwakhiwa futhi. Umugqa womyalo ngamunye ugcinwe ngokwehlukana.

Ekugcineni, lapho isiqukathi siqala, umyalo uyakhishwa npm run dev. Lo myalo uchazwe ku-package.json:


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

Ukuze uqalise amafayela kufolda /dist, efakwe emhlabeni jikelele http-server, futhi ekuncikeni kwe-dev iphakheji spa-http-serverukuze i-Vue Router isebenze kahle. Ifulegi le--push-state liqondisa kabusha ku-index.html. Ifulegi -c elinenani lesekhondi elingu-1 lengezwe kulo Iseva ye-http ayizange igcine inqolobane yemibhalo. Lesi isibonelo sokuhlola; kuphrojekthi yangempela kungcono ukusebenzisa i-nginx.

Esitolo se-Vuex sakha inkambu apiHost: 'http://localhost:3000', lapho imbobo ye-NodeJS Api ibhaliswe khona. Ingxenye yeklayenti isilungile. Manje zonke izicelo ezisuka kuklayenti ukuya ngemuva ziya kule url.

Iseva ye-NodeJS API

Kufolda /server dala iseva kanye ne-Dockerfile:


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

Π’ iseva kukhonjisiwe i-url kusizindalwazi const url = 'mongodb://mongo:27017/';. Ukuvumela izicelo zesizinda esihlukene kusukela kuklayenti:


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

isiphetho

Manje ake siye kumkhombandlela wephrojekthi futhi sisebenze docker-compose build ukwakha izithombe kanye docker-compose up ukuqhuba iziqukathi. Ithimba lizophakamisa iziqukathi ezi-3: iseva, iklayenti, umongo. Ngeseva ye-NodeJS, ungamisa ukulayishwa kabusha okushisayo ngokukuxhumanisa nefolda yomsebenzisi. Futhi iklayenti esathuthukiswayo kufanele yethulwe endaweni ngokulayishwa kabusha okushisayo, esebenza ngokuhlukana Iseva ΠΈ Mongo. Ukuze uqale isevisi ehlukile, vele ucacise igama layo docker-compose up client. Ungakhohlwa ukukwenza ngezinye izikhathi prune futhi isusa iziqukathi, amanethiwekhi, nezithombe ukuze kukhululwe izinsiza.

Ungabona ikhodi egcwele lapha. Iphrojekthi isathuthukiswa.

Source: www.habr.com

Engeza amazwana