Maitiro ekurongedza VueJS + NodeJS + MongoDB application muDocker

Maitiro ekurongedza VueJS + NodeJS + MongoDB application muDocker
Sezvaunogona kunzwisisa kubva munyaya yapfuura, ndakashanda pamapurojekiti akasiyana. Mazuva ekutanga muchikwata chitsva kazhinji anoenda nenzira imwechete: uyo anodzosera kumashure anogara pasi neni uye anoita mashiripiti zviito zvekuisa uye kutumira application. Docker yakakosha kune vanogadzira kumberi nekuti ... Iyo backend inowanzo kunyorwa mune yakakura yeFP / Java / Python / C # stacks, uye kumberi hakufanirwe kukanganisa iyo backend nguva dzese yekuisa uye kuendesa zvese. Munzvimbo imwechete chete ndakaona musanganiswa weDocker-Jenkins nekuisa pachena, matanda, uye otomatiki bvunzo.

Zvinyorwa zvakawanda zvakatsanangurwa zvakanyorwa nezve Docker. Ichi chinyorwa chichataura nezve kuendesa Single Peji Chikumbiro uchishandisa VueJS/Vue Router, sevha chikamu chiri muchimiro cheRESTful API neNodeJS, uye MongoDB inoshandiswa sedhatabhesi. Docker Compose inoshandiswa kutsanangura uye kumhanya akawanda emidziyo yekushandisa.

Nei Docker ichidikanwa

Docker inokutendera kuti uite otomatiki maitiro ekutumira application. Mugadziri haachadi kuisa zvirongwa ari ega kana kubata nekusaenderana neshanduro pamushini wake. Zvese zvaunoda kuti uite kuisa Docker uye nyora 1-2 mirairo mukoni. Nzira iri nyore yekuita izvi iri paLinux.

Kutanga

Install Docker uye Docker kunyora

Folder chimiro

Isu tinogadzira maforodha maviri emutengi uye server application. Faili rine .yml extension is a config Docker Kudzora, uko midziyo yekushandisa inotsanangurwa uye yakabatana.
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

Isu tinogadzira masevhisi matatu muDocker: yeNodeJS, MongoDB uye yeakamira ari muVue. Yakawedzerwa kubatanidza mutengi kune server zvinoenderana ne server. Kubatanidza MongoDB neserver API, shandisa links mongo. Sevha, mutengi, mongo - mazita emasevhisi.

VueJS mutengi

Mune folda /client Iko kushandiswa kwakavakirwa paVueJS. Iyo application yakagadzirwa uchishandisa Vue Cli. Paunenge uchivaka chifananidzo, application yemutengi inovakwa mukati meseti yemafaira ari mufolda /dist. Iyo Dockerfile inotsanangura seti yemirairo yekuvaka chifananidzo:

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

Ndokumbira utarise kuti package.json inokopwa uye yakaiswa zvakasiyana kubva kune mamwe mafaera eprojekiti. Izvi zvinoitirwa kuita, kuitira kuti zviri mukati me /node_modules folda zvichengetedzwe pakuvaka zvakare. Mutsara wega wega wekuraira wakachengetwa wakasiyana.

Pakupedzisira, kana mudziyo ukatanga, murairo unoitwa npm run dev. Uyu murairo unotsanangurwa mu package.json:


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

Kumhanyisa mafaera kubva kune folda /dist, yakaiswa pasi rose http-server, uye mune dev-inotsamira pasuru spa-http-serverkuitira kuti Vue Router ishande nemazvo. Iyo --push-state mureza inotungamira kune index.html. Iyo -c mureza ine kukosha kwesekondi 1 yakawedzerwa http-server haina cache zvinyorwa. Uyu muenzaniso wekuyedza; pane purojekiti chaiyo zviri nani kushandisa nginx.

Muchitoro cheVuex tinogadzira munda apiHost: 'http://localhost:3000', uko NodeJS Api port yakanyoreswa. Chikamu chemutengi chakagadzirira. Zvino zvikumbiro zvese kubva kumutengi kuenda kumashure enda kune iyi url.

Purogiramu inonzi NodeJS server

Mune folda /server gadzira server.js uye Dockerfile:


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

Π’ server.js yakaratidza URL kune database const url = 'mongodb://mongo:27017/';. Kubvumidza zvakayambuka-domain zvikumbiro kubva kumutengi:


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

mhedziso

Iye zvino ngatiende kune dhairekitori reprojekiti uye timhanye docker-compose build yekugadzira mifananidzo uye docker-compose up kumhanya midziyo. Chikwata chichasimudza midziyo mitatu: server, mutengi, mongo. Kune sevha yeNodeJS, unogona kugadzirisa kupisa-kurodha zvakare nekuibatanidza kune folda yemushandisi. Uye mutengi ari pasi pekuvandudzwa anofanirwa kutangwa munharaunda nekupisa zvakare, ichimhanya zvakasiyana Server ΠΈ mongo. Kuti utange sevhisi yakaparadzana, ingotaura zita rayo docker-compose up client. Usakanganwa kuzviita dzimwe nguva prune uye kudzima midziyo, network, uye mifananidzo kusunungura zviwanikwa.

Iwe unogona kuona iyo yakazara kodhi pano. Chirongwa ichi chichiri kugadzirwa.

Source: www.habr.com

Voeg