Momwe mungayikitsire pulogalamu ya VueJS + NodeJS + MongoDB ku Docker

Momwe mungayikitsire pulogalamu ya VueJS + NodeJS + MongoDB ku Docker
Monga mukumvetsetsa kuchokera m'nkhani yapitayi, ndinagwira ntchito zosiyanasiyana. Masiku oyambirira mu gulu latsopano nthawi zambiri amapita chimodzimodzi: wobwerera kumbuyo amakhala ndi ine ndikuchita zamatsenga kuti ayike ndikuyika pulogalamuyi. Docker ndiyofunikira kwambiri kwa opanga kutsogolo chifukwa ... Zomwe zimabwereranso nthawi zambiri zimalembedwa m'magulu osiyanasiyana a PHP / Java / Python / C #, ndipo kutsogolo sikuyenera kusokoneza kumbuyo nthawi zonse kukhazikitsa ndi kutumiza chirichonse. Pamalo amodzi okha ndidawona kuphatikiza kwa Docker-Jenkins ndikuyika kowonekera, zipika, ndi mayeso odzichitira okha.

Zambiri zatsatanetsatane zalembedwa za Docker. Nkhaniyi ifotokoza za kutumiza Tsamba Limodzi Logwiritsa ntchito VueJS/Vue Router, gawo la seva liri mu mawonekedwe a RESTful API ndi NodeJS, ndipo MongoDB imagwiritsidwa ntchito ngati database. Docker Compose imagwiritsidwa ntchito kutanthauzira ndikuyendetsa mapulogalamu angapo.

Chifukwa chiyani Docker ikufunika

Docker imakulolani kuti musinthe njira yotumizira pulogalamu. Wopangayo safunikiranso kukhazikitsa mapulogalamu payekha kapena kuthana ndi kusagwirizana kwa mtundu pamakina ake. Zomwe muyenera kuchita ndikuyika Docker ndikulemba malamulo 1-2 mu console. Njira yabwino kwambiri yochitira izi ndi Linux.

Kuyambapo

Sakani Docker ndi Docker kupanga

Mapangidwe a foda

Timapanga mafoda awiri a kasitomala ndi ma seva. Fayilo yokhala ndi .yml extension ndi config Docker Kulemba, kumene zotengera zogwiritsira ntchito zimatanthauzidwa ndikugwirizanitsidwa.
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

Timapanga ntchito zitatu ku Docker: za NodeJS, MongoDB ndi zokhazikika ku Vue. Yawonjezedwa kulumikiza kasitomala ku seva zimatengera seva. Kulumikiza MongoDB ndi seva API, gwiritsani ntchito links mongo. Seva, kasitomala, mongo - mayina a ntchito.

VueJS kasitomala

Mu foda /kasitomala Pulogalamuyi idakhazikitsidwa ndi VueJS. Pulogalamuyi idapangidwa pogwiritsa ntchito Wowona Cli. Mukapanga chithunzi, pulogalamu yamakasitomala imapangidwa kukhala mafayilo osasunthika mufoda /dist. Dockerfile imalongosola malamulo angapo opangira chithunzi:

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

Chonde dziwani kuti package.json imakopedwa ndikuyikidwa mosiyana ndi mafayilo ena onse a polojekiti. Izi zimachitika kuti zitheke, kuti zomwe zili mufoda ya / node_modules zisungidwe pomanganso. Mzere uliwonse wamalamulo umasungidwa padera.

Pomaliza, chidebecho chikayamba, lamulo limaperekedwa npm run dev. Lamulo ili likufotokozedwa mu package.json:


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

Kuyendetsa mafayilo kuchokera ku chikwatu /dist, yoikidwa padziko lonse lapansi http-server, ndi zodalira pa dev phukusi spa-http-serverkuti Vue Router igwire ntchito bwino. Mbendera ya --push-state imalozera ku index.html. Mbendera -c yokhala ndi mtengo wa 1 sekondi idawonjezedwa http-seva sanasunge zolemba. Ichi ndi chitsanzo choyesera; pa ntchito yeniyeni ndi bwino kugwiritsa ntchito nginx.

Mu sitolo ya Vuex timapanga munda apiHost: 'http://localhost:3000', pomwe doko la NodeJS Api limalembetsedwa. Gawo la kasitomala ndi lokonzeka. Tsopano zopempha zonse kuchokera kwa kasitomala kupita kumbuyo zimapita ku ulalo uwu.

NodeJS seva API

Mu foda /server pangani seva.js ndi Dockerfile:


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

Π’ seva.js anasonyeza url kwa database const url = 'mongodb://mongo:27017/';. Kuloleza zopempha zosiyanasiyana kuchokera kwa kasitomala:


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

Pomaliza

Tsopano tiyeni tipite ku chikwatu cha polojekiti ndikuyendetsa docker-compose build za kupanga zithunzi ndi docker-compose up kuyendetsa zotengera. Gululo likweza makontena atatu: seva, kasitomala, mongo. Kwa seva ya NodeJS, mutha kukonza kutsitsanso kotentha poyilumikiza ndi chikwatu cha ogwiritsa ntchito. Ndipo kasitomala omwe akutukuka akuyenera kukhazikitsidwa kwanuko ndikuwonjezeranso kutentha, kuthamanga padera seva ΠΈ Mongo. Kuti muyambe ntchito yosiyana, ingotchulani dzina lake docker-compose up client. Osayiwala kuchita nthawi zina prune ndikuchotsa zotengera, ma netiweki, ndi zithunzi kuti muchotse zinthu.

Mutha kuwona code yonse apa. Ntchitoyi ikuchitikabe.

Source: www.habr.com

Kuwonjezera ndemanga