Njengoba ungaqonda esihlokweni esandulele, ngisebenze kumaphrojekthi ahlukene. Izinsuku zokuqala eqenjini elisha ngokuvamile zihamba ngendlela efanayo: osebenza ngemuva uhlala phansi nami futhi enze izenzo zomlingo ukuze afake futhi akhiphe uhlelo lokusebenza. I-Docker ibalulekile kubathuthukisi abangaphambili ngoba... I-backend ivame ukubhalwa ezinhlobonhlobo zezitaki ze-PHP/Java/Python/C#, futhi okungaphambili akudingeki ukuthi kuphazamise i-backend njalo ukuze kufakwe futhi kusetshenziswe yonke into. Kusendaweni eyodwa kuphela lapho ngabona khona inhlanganisela ye-Docker-Jenkins nokusetshenziswa okusobala, amalogi, nokuhlola okuzenzakalelayo.
Kubhalwe izindatshana eziningi ezinemininingwane mayelana ne-Docker. Lesi sihloko sizokhuluma ngokukhipha Isicelo Sekhasi Elilodwa kusetshenziswa i-VueJS/Vue Router, ingxenye yeseva isesimweni se-RESTful API nge-NodeJS, kanti i-MongoDB isetshenziswa njengesizindalwazi. I-Docker Compose isetshenziselwa ukuchaza nokusebenzisa izinhlelo zokusebenza zeziqukathi eziningi.
Kungani i-Docker idingeka
I-Docker ikuvumela ukuthi wenze ngokuzenzakalelayo inqubo yokuthumela isicelo. Umthuthukisi akasadingi ukufaka izinhlelo ngokwakhe noma abhekane nokungahambisani kwenguqulo emshinini wakhe. Odinga ukukwenza ukufaka i-Docker bese uthayipha imiyalo engu-1-2 kukhonsoli. Indlela elula yokwenza lokhu ku-Linux.
Ukuqalisa
Faka
Isakhiwo sefolda
Sakha amafolda ama-2 ezinhlelo zokusebenza zeklayenti neseva. Ifayela elinesandiso se-.yml liwukulungiselelwa I-Docker Ukubhala, lapho iziqukathi zohlelo lokusebenza zichazwa futhi zihlotshaniswa khona.
I-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
Sakha izinsizakalo ezi-3 ku-Docker: ze-NodeJS, i-MongoDB kanye nezimile ku-Vue. Kwengezwe ukuze kuxhunywe iklayenti kuseva kuncike kuseva. Ukuxhumanisa i-MongoDB neseva ye-API, sebenzisa izixhumanisi mongo. Iseva, iklayenti, i-mongo - amagama ezinsizakalo.
Iklayenti le-VueJS
Kufolda /iklayenti Uhlelo lokusebenza lusekelwe ku-VueJS. Uhlelo lokusebenza lwakhiwe kusetshenziswa
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"]
Sicela uqaphele ukuthi i-package.json ikopishiwe futhi ifakwe ngokuhlukile kwamanye amafayela ephrojekthi. Lokhu kwenzelwa ukusebenza, ukuze okuqukethwe kwefolda /node_modules kugcinwe kunqolobane lapho kwakhiwa futhi. Umugqa womyalo ngamunye ugcinwe ngokwehlukana.
Ekugcineni, lapho isiqukathi siqala, umyalo uyakhishwa npm run dev
. Lo myalo uchazwe ku-package.json:
"scripts": {
"test:dev": "http-server dist -p 8081 -c 1 --push-state"
}
Ukuze uqalise amafayela kufolda /dist, efakwe emhlabeni jikelele http-server
, futhi ekuncikeni kwe-dev iphakheji spa-http-server
ukuze i-Vue Router isebenze kahle. Ifulegi le--push-state liqondisa kabusha ku-index.html. Ifulegi -c elinenani lesekhondi elingu-1 lengezwe kulo Iseva ye-http ayizange igcine inqolobane yemibhalo. Lesi isibonelo sokuhlola; kuphrojekthi yangempela kungcono ukusebenzisa i-nginx.
Esitolo se-Vuex sakha inkambu apiHost: 'http://localhost:3000'
, lapho imbobo ye-NodeJS Api ibhaliswe khona. Ingxenye yeklayenti isilungile. Manje zonke izicelo ezisuka kuklayenti ukuya ngemuva ziya kule url.
Iseva ye-NodeJS API
Kufolda /server
dala iseva kanye ne-Dockerfile:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Π iseva kukhonjisiwe i-url kusizindalwazi const url = 'mongodb://mongo:27017/';
. Ukuvumela izicelo zesizinda esihlukene kusukela kuklayenti:
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));
});
isiphetho
Manje ake siye kumkhombandlela wephrojekthi futhi sisebenze docker-compose build
ukwakha izithombe kanye docker-compose up
ukuqhuba iziqukathi. Ithimba lizophakamisa iziqukathi ezi-3: iseva, iklayenti, umongo. Ngeseva ye-NodeJS, ungamisa ukulayishwa kabusha okushisayo ngokukuxhumanisa nefolda yomsebenzisi. Futhi iklayenti esathuthukiswayo kufanele yethulwe endaweni ngokulayishwa kabusha okushisayo, esebenza ngokuhlukana Iseva ΠΈ Mongo. Ukuze uqale isevisi ehlukile, vele ucacise igama layo docker-compose up client
. Ungakhohlwa ukukwenza ngezinye izikhathi prune
futhi isusa iziqukathi, amanethiwekhi, nezithombe ukuze kukhululwe izinsiza.
Ungabona ikhodi egcwele
Source: www.habr.com