Me pehea te kohikohi tono VueJS + NodeJS + MongoDB i Docker

Me pehea te kohikohi tono VueJS + NodeJS + MongoDB i Docker
Ka taea e koe te mohio mai i te tuhinga o mua, i mahi ahau i runga i nga kaupapa rereke. Ko nga ra tuatahi i roto i te roopu hou he rite tonu te haere: ka noho te kaihuri ki raro ki ahau, ka mahi i nga mahi makutu hei whakauru me te tuku i te tono. He mea nui a Docker mo nga kaihanga o mua na te mea ... He maha nga wa ka tuhia te tuara i roto i te maha o nga puranga PHP / Java / Python / C #, a kaore te mua o mua ki te whakararuraru i te tuara i nga wa katoa ki te whakauru me te tuku i nga mea katoa. I te waahi kotahi anake ka kite ahau i te huinga Docker-Jenkins me te whakatakotoranga maamaa, nga raarangi, me nga whakamatautau aunoa.

He maha nga tuhinga taipitopito kua tuhia mo Docker. Ko tenei tuhinga ka korero mo te tuku i tetahi Tono Wharangi Kotahi ma te whakamahi i te VueJS/Vue Router, ko te waahanga tūmau kei te ahua o te RESTful API me NodeJS, ka whakamahia a MongoDB hei papaarangi. Ka whakamahia a Docker Compose ki te tautuhi me te whakahaere i nga tono ipu maha.

He aha te take e hiahiatia ana a Docker

Ka taea e Docker te whakaaunoa i te mahi tuku tono. Ko te kaiwhakawhanake kaore e hiahia ki te whakauru i nga papatono ki a ia ake, ki te whakahaere ranei i te koretake o te putanga ki tana miihini. Ko nga mea katoa e hiahia ana koe ki te whakauru i a Docker ka patohia nga whakahau 1-2 ki te papatohu. Ko te huarahi tino watea ki te mahi i tenei kei runga i te Linux.

Tīmata

Whakauruhia Docker a Tito Docker

Hanganga kōpaki

Ka waihangahia e matou nga kōpaki e 2 mo nga tono a te kiritaki me te tūmau. He whirihora te konae me te toronga .yml Whakaritea e Docker, kei reira nga ipu tono kua tautuhia me te hono.
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

Ka hangaia e matou nga ratonga e 3 ki Docker: mo NodeJS, MongoDB me nga mea tuuturu i Vue. Kua taapirihia hei hono i te kiritaki ki te tūmau kei runga i te tūmau. Hei hono MongoDB ki te API tūmau, whakamahia hononga mongo. Tūmau, kiritaki, mongo - ingoa o ngā ratonga.

Kiritaki VueJS

Kei te kōpaki /kiritaki Ko te tono kei runga i te VueJS. I hangaia te tono ma te whakamahi Vue Cli. I te wa e hanga ana he ahua, ka hangaia te tono a te kiritaki ki roto i te huinga o nga konae pateko i roto i te kōpaki /dist. Ko te Dockerfile e whakaatu ana i tetahi huinga whakahau mo te hanga whakaahua:

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

Kia mahara ko package.json te kape me te whakauru motuhake mai i te toenga o nga konae kaupapa. Ka mahia tenei mo te mahi, kia noho keteroki nga ihirangi o te kōpaki /node_modules ina hanga ano. He keteroki motuhake ia rarangi whakahau.

Ka mutu, ka timata te ipu, ka mahia te whakahau npm run dev. Kei te whakaahuahia tenei tono i te package.json:


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

Hei whakahaere i nga konae mai i te kōpaki /dist, kua whakauruhia ki te ao katoa http-server, a i roto i nga dev-whakawhirinaki te kete spa-http-serverkia tika te mahi a Vue Router. Ka anga te haki --push-state ki index.html. Ko te haki -c me te uara 1 hēkona i tāpirihia ki http-tūmau kaore i keteroki nga tuhinga. He tauira whakamatautau tenei; i runga i te kaupapa pono he pai ake te whakamahi nginx.

I roto i te toa Vuex ka hangaia e matou he mara apiHost: 'http://localhost:3000', kei te rehitatia te tauranga NodeJS Api. Kua reri te wahanga o te kiritaki. Inaianei ko nga tono katoa mai i te kiritaki ki muri ka haere ki tenei url.

API tūmau NodeJS

Kei te kōpaki /server hanga tūmau.js me Dockerfile:


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

В tūmau.js kua tohua url mō te pātengi raraunga const url = 'mongodb://mongo:27017/';. Whakaaetia nga tono whakawhiti-rohe mai i te kiritaki:


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

mutunga

Inaianei me haere ki te raarangi kaupapa ka oma docker-compose build mo te hanga whakaahua me docker-compose up ki te whakahaere ipu. Ka hikina e te kapa e toru nga ipu: tūmau, kiritaki, mongo. Mo te tūmau NodeJS, ka taea e koe te whirihora i te wera-hou ma te hono ki te kōpaki kaiwhakamahi. A ko te kiritaki kei te whakawhanake me whakarewahia ki te rohe me te uta wera, ka rere wehe tūmau и mongo. Hei timata i tetahi ratonga motuhake, tohua noa tona ingoa docker-compose up client. Kaua e wareware ki te mahi i etahi wa prune me te whakakore i nga ipu, nga whatunga, me nga whakaahua kia waatea ai nga rauemi.

Ka taea e koe te kite i te waehere katoa konei. Kei te whanake tonu te kaupapa.

Source: will.com

Tāpiri i te kōrero