Raws li koj tuaj yeem pom los ntawm tsab xov xwm dhau los, kuv tau ua haujlwm ntawm ntau yam project. Cov hnub thawj zaug ntawm pab pawg tshiab feem ntau mus tib txoj kev: tus tsim tawm back-end koom nrog kuv thiab ua lub khawv koob ntawm kev teeb tsa thiab xa daim ntawv thov. Docker yog qhov tseem ceeb rau cov neeg tsim khoom pem hauv ntej, vim tias back-end feem ntau sau rau hauv ntau yam ntawm PHP / Java / Python / C # stacks, thiab front-end tsis tas yuav cuam tshuam tus tsim tawm back-end txhua zaus lawv teeb tsa thiab xa txhua yam. Tsuas yog ib zaug kuv tau pom Docker-Jenkins combo nrog pob tshab xa tawm, logging, thiab kev sib xyaw ua ke tsis siv neeg.
Muaj ntau tsab xov xwm ntxaws ntxaws tau sau txog Docker. Tsab xov xwm no yuav tham txog kev xa ib daim ntawv thov ib nplooj ntawv siv VueJS/Vue Router. Sab server yog RESTful API nrog NodeJS, thiab MongoDB siv ua lub hauv paus ntaub ntawv. Docker Compose siv los txhais thiab khiav ntau daim ntawv thov thawv.
Vim li cas koj thiaj xav tau Docker?
Docker ua kom cov txheej txheem xa daim ntawv thov ua haujlwm tau yooj yim. Cov neeg tsim khoom tsis tas yuav tsum tau nruab cov kev pab cuam lossis daws teeb meem nrog cov version tsis sib xws ntawm lawv cov tshuab. Tsuas yog nruab Docker thiab sau ob peb lo lus txib rau hauv lub console. Qhov no yooj yim ua tiav ntawm Linux.
Mus pib
Nruab thiab
Cov qauv ntawm cov nplaub tshev
Tsim ob lub nplaub tshev rau cov ntawv thov client thiab server. Cov ntaub ntawv .yml yog cov ntaub ntawv teeb tsa. Docker Compose, qhov twg cov thawv ntawv thov tau txhais thiab txuas.
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
Peb tab tom tsim peb qhov kev pabcuam hauv Docker: ib qho rau NodeJS, ib qho rau MongoDB, thiab ib qho rau static Vue. Txhawm rau txuas tus neeg siv khoom rau lub server, peb tau ntxiv nyob ntawm lub serverTxhawm rau txuas MongoDB nrog lub server API, siv cov kev sib txuas mongo. Server, client, mongo yog cov npe ntawm cov kev pabcuam.
VueJS tus neeg siv khoom
Hauv ntawv tais ceev tseg /tus neeg siv khoom Daim ntawv thov no yog raws li VueJS. Daim ntawv thov no tau tsim los ntawm kev siv Thaum tsim ib daim duab, daim ntawv thov tus neeg siv khoom raug tsim rau hauv ib pawg ntawm cov ntaub ntawv static hauv ib daim nplaub tshev /distDockerfile piav qhia txog ib pawg lus txib rau kev tsim cov duab:
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"]
Thov nco ntsoov tias package.json raug theej thiab teeb tsa sib cais ntawm lwm cov ntaub ntawv project. Qhov no yog ua rau kev ua haujlwm zoo, yog li cov ntsiab lus ntawm daim nplaub tshev /node_modules raug cached thaum lub sijhawm rov tsim kho dua. Txhua kab lus txib raug cached sib cais.
Thaum kawg, thaum lub thawv pib, cov lus txib raug ua tiav npm run devCov lus txib no tau piav qhia hauv package.json:
"scripts": {
"test:dev": "http-server dist -p 8081 -c 1 --push-state"
}
Yuav ua li cas khiav cov ntaub ntawv los ntawm ib daim nplaub tshev /dist, tau teeb tsa thoob ntiaj teb http-server, thiab hauv dev-dependencies lub pob khoom spa-http-server, kom Vue Router ua haujlwm kom raug. Tus chij --push-state rov qab mus rau index.html. Tus chij -c nrog tus nqi ntawm 1 thib ob tau ntxiv kom http-server Tsis tau cache cov scripts. Qhov no yog ib qho piv txwv sim; rau ib qhov project tiag tiag, nws zoo dua los siv nginx.
Peb tsim ib daim teb hauv lub khw Vuex apiHost: 'http://localhost:3000', qhov twg qhov chaw nres nkoj NodeJS API tau teev tseg. Sab neeg siv khoom tau npaj txhij lawm. Tam sim no txhua qhov kev thov los ntawm tus neeg siv khoom mus rau qhov kawg tom qab mus rau qhov URL no.
NodeJS server API
Hauv ntawv tais ceev tseg /server peb tsim server.js thiab Dockerfile:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
В server.js qhia url rau lub database const url = 'mongodb://mongo:27017/';Tso cai rau cov kev thov hla-domain los ntawm tus neeg siv khoom:
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));
});
xaus
Tam sim no cia peb mus rau qhov project directory thiab khiav docker-compose build rau kev tsim cov duab thiab docker-compose up kom tso cov thawv. Cov lus txib yuav tso 3 lub thawv: server, client, mongoRau ib lub NodeJS server, koj tuaj yeem teeb tsa hot-reload los ntawm kev txuas nws mus rau lub nplaub tshev neeg siv. Thiab rau ib tus neeg siv kev tsim kho, koj tuaj yeem khiav hot-reload hauv zos los ntawm kev khiav nws cais. neeg rau zaub mov и mongoYuav pib ib qho kev pabcuam sib cais, tsuas yog teev nws lub npe. docker-compose up clientTsis txhob hnov qab ua qee zaum. prune thiab tshem tawm cov thawv, cov tes hauj lwm, thiab cov duab kom tso cov peev txheej tawm.
Cov lej tag nrho tuaj yeem saib tau Qhov project tseem nyob rau theem kev tsim kho.
Tau qhov twg los: www.hab.com
