Чӣ тавр бастабандии барномаи VueJS + NodeJS + MongoDB дар Docker

Чӣ тавр бастабандии барномаи VueJS + NodeJS + MongoDB дар Docker
Тавре ки шумо аз мақолаи қаблӣ фаҳмида метавонед, ман дар лоиҳаҳои гуногун кор кардам. Рӯзҳои аввал дар дастаи нав одатан ҳамин тавр мегузарад: пуштибон бо ман нишаста, барои насб ва ҷойгиркунии барнома амалҳои ҷодугарӣ мекунад. Docker барои таҳиягарони пешрафта ногузир аст, зеро ... Аксҳо аксар вақт дар доираи васеи стекҳои PHP/Java/Python/C# навишта мешаванд ва пеш набояд ҳар дафъа барои насб ва ҷойгиркунии ҳама чиз ақибро парешон кунад. Танҳо дар як ҷо ман комбинатсияи Docker-Jenkins-ро бо ҷойгиркунии шаффоф, гузоришҳо ва санҷишҳои автоматикунонидашуда дидам.

Дар бораи Docker мақолаҳои муфассал навишта шудаанд. Ин мақола дар бораи ҷойгиркунии замимаи ягона саҳифа бо истифода аз VueJS/Vue Router сӯҳбат хоҳад кард, қисми сервер дар шакли API RESTful бо NodeJS аст ва MongoDB ҳамчун пойгоҳи додаҳо истифода мешавад. Docker Compose барои муайян ва иҷро кардани барномаҳои сершумори контейнер истифода мешавад.

Чаро Docker лозим аст

Docker ба шумо имкон медиҳад, ки раванди ҷойгиркунии барномаро автоматӣ кунед. Ба таҳиякунанда дигар лозим нест, ки барномаҳоро мустақилона насб кунад ё бо номувофиқатии версия дар мошини худ мубориза барад. Ба шумо танҳо лозим аст, ки Docker-ро насб кунед ва ба консол 1-2 фармон нависед. Роҳи аз ҳама қулайи ин кор дар Linux аст.

Сар кардани кор

Насб кунед Доктор ва Docker эҷод мекунад

Сохтори папка

Мо барои барномаҳои муштарӣ ва сервер 2 ҷузвдон эҷод мекунем. Файл бо тамдиди .yml конфигуратсия аст Ҷӯркунӣ, ки дар он контейнерҳои барнома муайян ва алоқаманданд.
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

Мо дар Docker 3 хидмат эҷод мекунем: барои NodeJS, MongoDB ва барои хидматҳои статикӣ дар Vue. Барои пайваст кардани муштарӣ ба сервер илова карда шудааст ба сервер вобаста аст. Барои пайваст кардани MongoDB бо сервер API, истифода баред пайвандҳо mongo. Сервер, муштарӣ, mongo - номҳои хидматҳо.

Мизоҷи VueJS

Дар папка /муштарӣ Барнома ба VueJS асос ёфтааст. Барнома бо истифода аз он сохта шудааст Vue Cli. Ҳангоми сохтани тасвир, барномаи муштарӣ ба маҷмӯи файлҳои статикӣ дар ҷузвдон сохта мешавад /нох. Dockerfile маҷмӯи фармонҳоро барои сохтани тасвир тавсиф мекунад:

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

Лутфан таваҷҷӯҳ намоед, ки package.json аз дигар файлҳои лоиҳа алоҳида нусхабардорӣ ва насб карда мешавад. Ин барои иҷрои кор анҷом дода мешавад, то мундариҷаи папкаи /node_modules ҳангоми сохтани дубора кэш карда шавад. Ҳар як сатри фармон алоҳида кэш карда мешавад.

Ниҳоят, вақте ки контейнер оғоз меёбад, фармон иҷро мешавад npm run dev. Ин фармон дар package.json тавсиф шудааст:


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

Барои иҷро кардани файлҳо аз ҷузвдон /нох, дар саросари ҷаҳон насб карда шудааст http-server, ва дар вобастагии девҳо баста spa-http-serverто ки Vue Router дуруст кор кунад. Парчами --push-state ба index.html равона мекунад. Парчами -c бо арзиши 1 сония илова карда шуд http-сервер скриптҳоро кэш накардааст. Ин як мисоли санҷишӣ аст; дар лоиҳаи воқеӣ беҳтар аст nginx истифода шавад.

Дар мағозаи Vuex мо майдон эҷод мекунем apiHost: 'http://localhost:3000', ки дар он бандари NodeJS Api ба қайд гирифта шудааст. Қисми муштарӣ омода аст. Акнун ҳама дархостҳо аз муштарӣ ба қафо ба ин URL меравад.

API сервери NodeJS

Дар папка /server эҷод server.js ва файли Docker:


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

В server.js нишон дода шудааст URL барои базаи маълумот const url = 'mongodb://mongo:27017/';. Иҷозат додани дархостҳои байнидомении муштарӣ:


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

хулоса

Акнун биёед ба директорияи лоиҳа равем ва иҷро кунем docker-compose build барои сохтани тасвирҳо ва docker-compose up ба кор андохтани контейнерхо. Даста 3 контейнерро мебардорад: сервер, муштарӣ, mongo. Барои сервери NodeJS, шумо метавонед дубора боркунии гармро тавассути пайваст кардани он ба ҷузвдони корбар танзим кунед. Ва муштарии таҳияшаванда бояд ба таври маҳаллӣ бо боркунии гарм, алоҳида кор кунад сервер и mongo. Барои оғози хидмати алоҳида, танҳо номи онро муайян кунед docker-compose up client. Баъзан ин корро фаромӯш накунед prune ва нест кардани контейнерҳо, шабакаҳо ва тасвирҳо барои озод кардани захираҳо.

Шумо метавонед рамзи пурраро бинед дар ин ҷо. Лоиҳа ҳанӯз дар марҳилаи таҳия қарор дорад.

Манбаъ: will.com

Илова Эзоҳ