Тавре ки шумо аз мақолаи қаблӣ фаҳмида метавонед, ман дар лоиҳаҳои гуногун кор кардам. Рӯзҳои аввал дар дастаи нав одатан ҳамин тавр мегузарад: пуштибон бо ман нишаста, барои насб ва ҷойгиркунии барнома амалҳои ҷодугарӣ мекунад. Docker барои таҳиягарони пешрафта ногузир аст, зеро ... Аксҳо аксар вақт дар доираи васеи стекҳои PHP/Java/Python/C# навишта мешаванд ва пеш набояд ҳар дафъа барои насб ва ҷойгиркунии ҳама чиз ақибро парешон кунад. Танҳо дар як ҷо ман комбинатсияи Docker-Jenkins-ро бо ҷойгиркунии шаффоф, гузоришҳо ва санҷишҳои автоматикунонидашуда дидам.
Дар бораи Docker мақолаҳои муфассал навишта шудаанд. Ин мақола дар бораи ҷойгиркунии замимаи ягона саҳифа бо истифода аз VueJS/Vue Router сӯҳбат хоҳад кард, қисми сервер дар шакли API RESTful бо NodeJS аст ва MongoDB ҳамчун пойгоҳи додаҳо истифода мешавад. Docker Compose барои муайян ва иҷро кардани барномаҳои сершумори контейнер истифода мешавад.
Чаро Docker лозим аст
Docker ба шумо имкон медиҳад, ки раванди ҷойгиркунии барномаро автоматӣ кунед. Ба таҳиякунанда дигар лозим нест, ки барномаҳоро мустақилона насб кунад ё бо номувофиқатии версия дар мошини худ мубориза барад. Ба шумо танҳо лозим аст, ки Docker-ро насб кунед ва ба консол 1-2 фармон нависед. Роҳи аз ҳама қулайи ин кор дар Linux аст.
Сар кардани кор
Насб кунед
Сохтори папка
Мо барои барномаҳои муштарӣ ва сервер 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 асос ёфтааст. Барнома бо истифода аз он сохта шудааст
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