เชเซเชฎ เชคเชฎเซ เช
เชเชพเชเชจเชพ เชฒเซเชเชฎเชพเชเชฅเซ เชธเชฎเชเซ เชถเชเซ เชเซ, เชฎเซเช เชตเชฟเชตเชฟเชง เชชเซเชฐเซเชเซเชเซเชเซเชธ เชชเชฐ เชเชพเชฎ เชเชฐเซเชฏเซเช เชเซ. เชจเชตเซ เชเซเชฎเชฎเชพเช เชชเซเชฐเชฅเชฎ เชฆเชฟเชตเชธเซ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซเชคเซ เช เช เชฐเซเชคเซ เชเชพเชฏ เชเซ: เชฌเซเชเชเชจเซเชกเชฐ เชฎเชพเชฐเซ เชธเชพเชฅเซ เชฌเซเชธเซ เชเซ เช
เชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เช
เชจเซ เชเชฎเชพเชตเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชพเชฆเซเช เชเซเชฐเชฟเชฏเชพเช เชเชฐเซ เชเซ. เชซเซเชฐเชจเซเช-เชเชจเซเชก เชกเซเชตเชฒเชชเชฐเซเชธ เชฎเชพเชเซ เชกเซเชเชฐ เช
เชจเชฟเชตเชพเชฐเซเชฏ เชเซ เชเชพเชฐเชฃ เชเซ... เชฌเซเชเชเชจเซเชก เชฎเซเชเชพเชญเชพเชเซ PHP/Java/Python/C# เชธเซเชเซเชเซเชธเชจเซ เชตเชฟเชถเชพเชณ เชถเซเชฐเซเชฃเซเชฎเชพเช เชฒเชเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช
เชจเซ เชซเซเชฐเชจเซเชเซ เชฆเชฐเซเช เชตเชเชคเซ เชฌเชงเซเช เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพ เช
เชจเซ เชเชฎเชพเชตเชตเชพ เชฎเชพเชเซ เชฌเซเชเชเชจเซเชกเชจเซ เชตเชฟเชเชฒเชฟเชค เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ. เชฎเชพเชคเซเชฐ เชเช เช เชเชเซเชฏเชพเช เชฎเซเช เชชเชพเชฐเชฆเชฐเซเชถเช เชเชฎเชพเชตเช, เชฒเซเชเซเชธ เช
เชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชชเชฐเซเชเซเชทเชฃเซ เชธเชพเชฅเซ เชกเซเชเชฐ-เชเซเชจเชเชฟเชจเซเชธเชจเซเช เชธเชเชฏเซเชเชจ เชเซเชฏเซเช.
เชกเซเชเชฐ เชตเชฟเชถเซ เชเชฃเชพ เชตเชฟเชเชคเชตเชพเชฐ เชฒเซเชเซ เชฒเชเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ. เช เชฒเซเช VueJS/Vue เชฐเชพเชเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเชฟเชเชเชฒ เชชเซเช เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฎเชพเชตเชตเชพ เชตเชฟเชถเซ เชตเชพเชค เชเชฐเชถเซ, เชธเชฐเซเชตเชฐเชจเซ เชญเชพเช NodeJS เชธเชพเชฅเซ RESTful API เชจเชพ เชธเซเชตเชฐเซเชชเชฎเชพเช เชเซ, เช
เชจเซ MongoDB เชจเซ เชกเซเชเชพเชฌเซเช เชคเชฐเซเชเซ เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ. เชกเซเชเชฐ เชเชเชชเซเชเชจเซ เชเชชเชฏเซเช เชฌเชนเซเชตเชฟเชง เชเชจเซเชเซเชจเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจเซเชจเซ เชตเซเชฏเชพเชเซเชฏเชพเชฏเชฟเชค เชเชฐเชตเชพ เช
เชจเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชฅเชพเชฏ เชเซ.
เชคเชฎเชพเชฐเซ เชกเซเชเชฐเชจเซ เชเซเชฎ เชเชฐเซเชฐ เชเซ?
เชกเซเชเชฐ เชคเชฎเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฎเชพเชตเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชกเซเชตเชฒเชชเชฐเชจเซ เชนเชตเซ เชคเซเชจเชพ เชชเซเชคเชพเชจเชพ เชชเชฐ เชชเซเชฐเซเชเซเชฐเชพเชฎเซเชธ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เช เชฅเชตเชพ เชคเซเชจเชพ เชฎเชถเซเชจ เชชเชฐ เชธเชเชธเซเชเชฐเชฃเชจเซ เช เชธเชเชเชคเชคเชพ เชธเชพเชฅเซ เชตเซเชฏเชตเชนเชพเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ. เชคเชฎเชพเชฐเซ เชซเชเซเชค เชกเซเชเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เช เชจเซ เชเชจเซเชธเซเชฒเชฎเชพเช 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
เช เชฎเซ เชกเซเชเชฐเชฎเชพเช 3 เชธเซเชตเชพเช เชฌเชจเชพเชตเซเช เชเซเช: NodeJS, MongoDB เช เชจเซ Vue เชฎเชพเช เชธเซเชฅเชฟเชฐ เชธเซเชตเชพเช เชฎเชพเชเซ. เชเซเชฒเชพเชฏเชจเซเชเชจเซ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชเชจเซเชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชเชฎเซเชฐเซเชฏเซเช เชธเชฐเซเชตเชฐ เชชเชฐ เชเชงเชพเชฐ เชฐเชพเชเซ เชเซ. MongoDB เชจเซ เชธเชฐเซเชตเชฐ API เชธเชพเชฅเซ เชฒเชฟเชเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเชชเชฏเซเช เชเชฐเซ เชฒเชฟเชเชเซเชธ เชฎเซเชเชเซ. เชธเชฐเซเชตเชฐ, เชเซเชฒเชพเชฏเชเช, เชฎเซเชเชเซ - เชธเซเชตเชพเชเชจเชพเช เชจเชพเชฎ.
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
. เช เชเชฆเซเชถ เชชเซเชเซเช.json เชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชเซ:
"scripts": {
"test:dev": "http-server dist -p 8081 -c 1 --push-state"
}
เชซเซเชฒเซเชกเชฐเชฎเชพเชเชฅเซ เชซเชพเชเชฒเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ /เชเชฟ, เชตเซเชถเซเชตเชฟเช เชธเซเชคเชฐเซ เชธเซเชฅเชพเชชเชฟเชค http-server
, เช
เชจเซ เชกเซเชต-เชกเชฟเชชเซเชจเซเชกเชจเซเชธเซเชฎเชพเช เชชเซเชเซเช spa-http-server
เชเซเชฅเซ Vue เชฐเชพเชเชเชฐ เชฏเซเชเซเชฏ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ. --push-state เชซเซเชฒเซเช index.html เชชเชฐ เชฐเซเชกเชพเชฏเชฐเซเชเซเช เชเชฐเซ เชเซ. 1 เชธเซเชเชจเซเชกเชจเชพ เชฎเซเชฒเซเชฏ เชธเชพเชฅเซ -c เชงเซเชตเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซ เชนเชคเซ http-เชธเชฐเซเชตเชฐ เชธเซเชเซเชฐเชฟเชชเซเชเซ เชเซเชถ เชเชฐเซ เชจเชฅเซ. เช เชเช เชชเชฐเซเชเซเชทเชฃ เชเชฆเชพเชนเชฐเชฃ เชเซ; เชตเชพเชธเซเชคเชตเชฟเช เชชเซเชฐเซเชเซเชเซเช เชชเชฐ nginx เชจเซ เชเชชเชฏเซเช เชเชฐเชตเซ เชตเชงเซ เชธเชพเชฐเซเช เชเซ.
Vuex เชธเซเชเซเชฐเชฎเชพเช เช
เชฎเซ เชเช เชเซเชทเซเชคเซเชฐ เชฌเชจเชพเชตเซเช เชเซเช apiHost: 'http://localhost:3000'
, เชเซเชฏเชพเช NodeJS Api เชชเซเชฐเซเช เชฐเชเซเชธเซเชเชฐ เชฅเชฏเซเชฒ เชเซ. เชเซเชฐเชพเชนเช เชญเชพเช เชคเซเชฏเชพเชฐ เชเซ. เชนเชตเซ เชเซเชฒเชพเชฏเชจเซเชเชจเซ เชชเชพเชเชณเชจเซ เชฌเชงเซ เชตเชฟเชจเชเชคเซเช เช url เชชเชฐ เชเชพเชฏ เชเซ.
เชจเซเชกเชเซเชเชธ เชธเชฐเซเชตเชฐ API
เชซเซเชฒเซเชกเชฐเชฎเชพเช /server
เชฌเชจเชพเชตเซ เชธเชฐเซเชตเชฐ.เชเซเชเชธ เช
เชจเซ เชกเซเชเชฐเชซเชพเชเชฒ:
FROM node:10
WORKDIR /server
COPY ./package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "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 เชเชจเซเชเซเชจเชฐ เชเชชเชพเชกเชถเซ: เชธเชฐเซเชตเชฐ, เชเซเชฒเชพเชฏเชเช, เชฎเซเชเชเซ. เชจเซเชกเชเซเชเชธ เชธเชฐเซเชตเชฐ เชฎเชพเชเซ, เชคเชฎเซ เชคเซเชจเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชซเซเชฒเซเชกเชฐ เชธเชพเชฅเซ เชฒเชฟเชเช เชเชฐเซเชจเซ เชนเซเช-เชฐเซเชฒเซเชกเชจเซ เชเซเช เชตเซ เชถเชเซ เชเซ. เช
เชจเซ เชกเซเชตเชฒเชชเชฎเซเชจเซเช เชนเซเช เชณเชจเชพ เชเซเชฒเชพเชฏเชเชเชจเซ เช
เชฒเชเชฅเซ เชเชพเชฒเชคเชพ เชนเซเช เชฐเซเชฒเซเชก เชธเชพเชฅเซ เชธเซเชฅเชพเชจเชฟเช เชฐเซเชคเซ เชฒเซเชเช เชเชฐเชตเซเช เชเซเชเช เชธเชฐเซเชตเชฐ ะธ เชฎเซเชเซ. เชเช เช
เชฒเช เชธเซเชตเชพ เชถเชฐเซ เชเชฐเชตเชพ เชฎเชพเชเซ, เชซเชเซเชค เชคเซเชจเซเช เชจเชพเชฎ เชธเซเชชเชทเซเช เชเชฐเซ docker-compose up client
. เชเซเชฏเชพเชฐเซเช เชคเซ เชเชฐเชตเชพเชจเซเช เชญเซเชฒเชถเซ เชจเชนเซเช prune
เช
เชจเซ เชธเชเชธเชพเชงเชจเซ เชเชพเชฒเซ เชเชฐเชตเชพ เชฎเชพเชเซ เชเชจเซเชเซเชจเชฐ, เชจเซเชเชตเชฐเซเช เช
เชจเซ เชเชฎเซเชเซเชธ เชเชพเชขเซ เชจเชพเชเชตเซเช.
เชคเชฎเซ เชธเชเชชเซเชฐเซเชฃ เชเซเชก เชเซเช เชถเชเซ เชเซ
เชธเซเชฐเซเชธ: www.habr.com