á 90ááš áááŁá°á áá á¨ááááŞáŤ áľá¨-áážáźá áťááŠá˘ áŤá áĽááąá áá° áĽáŤ á
á°á á°á¨á°á ááľááἠá áŁá ááá áá áᢠá á ááłááľ á¨á°á፠ááľá°ááá áá Apache á áááá áá á¨áŁ áá
á á¨áá°á ááá á ááťá á á¤áá˛á á áŠá áá°áá
á áááá áááŁáľ áá˝ááᢠftp://ftp.example.com
. á¨á፠á¨á áá°á áľá áĽá á¨ááá áá á áľáᣠáĽá áááášá áá° á áááአááľáá á ááĽá
ᢠá¨á°ááŤáŠ áááŤáľ áá áŠ, ááá ááá á¨á áá ááá
ááá áá á.
á¨ááŤá áá ááᎠáŁááľ áááľ á áľááľ áááłáľ ááľáĽ ááá ááá á áŁá á°ááá§á. áľá¨-áážá˝ áá áἠááľáĽáľáĽ ááááᤠáá° áááľ á¨áááŁáłá¸á á ááľ áááŁá á á ááŁá¸áᢠá ááľ áá á á áááá á¨ááľ áááá˝ á áľá°ááᣠá¨áááą áĽá á ááááŽá˝ ááááᣠáĽá á¨áľáŞáľ ááĽáĽá áľáááśá˝á áá áá á¨á°ááá° ááá˘
ááá ááŽááá´ áአáá
á áá á¨áᢠáĽá á ááľ áĽááá áĽáť á ááľáŤáľ áŁá˘áŤáá á áááľ ááľáĽ á¨áá°ááŤáľ á˝ááł áĽáá°ááŤáľáááá á áááá: áŽáľ áá° á
áááŤá ááá master
á GitHub áá. á á°á¨ááŞáᣠá¨áĽáá áľáá˝ á¨áľá áá°áá áŞáŤ á á áŤá ááá¨áááĽáŁ ááá á¨áŠá áááľáľ áááľá°áá ááľá°áłá°áᣠááá Docker Swarm á´ááááá áá ááᣠááá ááľáŁ á¤áááśá˝á áĽá ááá˝ áááá á áááľ á ááááŽá˝á ááŤá áĽáá°ááááá á ááááᢠááľáĽáľáĽ áááŽá˝. áĽáŤá á á°áťá áá á ááá áááľá¨á ááĄá áááłáŤáľ ᨠCI/CD áá áá°ááá
áá á¨áĽáá˘
áľáá˝ ááŽáááľ áŤááľ (á áá
ááłá áá ᨠNode.js ááŽáááľ) áĽá á¨áá
á ááŽáááľ áľáááľ áĽáá´áľ á áŤáľ-á°á áĽáá°áá°áŠ ááá
ááááá, á áá áŤáááŤá ááľáĽ á¨á°á¨áḠááá á áľááá á áááľ áá á¨áá°áŤá áá áĽáá°ááááľ, á¨ááŤá áĽá á áá
á˝áá áá ááááľ áááááľ áá˝áá áĽáá áŤáľáŁá.
á áľá áááłáá˝
á¨áá
á˝áá á ááŁá˘ á¨áľáĽáá ááľááŠá áá°á¨áłá áááᤠáĽá á¨áŁá˝ áľááŞááśá˝á ááá áá á ááᢠá á°á¨ááŞá, áĽáą áááŤáá˝ áŤáľááááá
ááááá˝
áá á˝áá áŤáááá á áľá áááł "á¨áááŞáŤ" á°áĽá áá ፠áá˝áá á ááá. áá áľáá°áááŠáľ ááá á¨áááŤá áľ áĽá áŽáľá áááá°á˝ áĽá ááá°ááŤáľ á¨ááľáááá áá°áľ á¨áááá˝á áľáŁ á á ááľ á ááśááľáľ ááľáááľ á¨á°á¨ááá ááá˘
á¨áĽá á¨áľáŤ áá°áľ áŤá áá áá ááá˘
á áľá°áá á ááááá á¨áá¨ááť á
áááŤá áá áá°áá á áŽáľ master
, á¨áá¨á°ááľ áľáááśá˝ áá¨áááá:
- á Travis CI áá á¨ááŽáááą áááŁáł ááááŤá.
- ááá áŠáᾠᣠáá á°áľ áĽá á¨áŤá áĽáľá¨ áŤá áá¨áŤáá˝ áá¨ááááá˘
ááá°áá áŽáľ áĽáť master
, á¨áá¨á°áá áá¨áááá.
- á¨áá á¨á°á áá°á áá, á á°á¨ááŞá ...
- á áá áŁáá áŽáľáŁ á áá áśá˝ áĽá á áŤáŁá˘ áá á áááľá¨áľ á¨áśá¨á ááľá ááááŁáľá˘
- ááľáá áá° Docker Hub á áá°ááŤáľ ááá˘
- á¨á ááŤá˝ á áááá áá áááááľ.
- á¨Docker Hub áá° á áááአááľá á ááľáá ááá˘
- á¨á ááá ááŤáŁ ááá áĽá á á á˛áą ááľá áá á áááľá¨áľ á á˛áľ áááá.
áľá áśá¨áᣠááľáá˝ áĽá ááŤáŁáá˝ ááá á¨ááŤáááľ ááá á¨ááᣠá áá¨ááᢠáľá áĽáą áááá áĽáááŤá˝áááá˘
CI/CD áááľá áá?
CI/CD áá áťá¨ áá âááŁá áá á°áľ/ááŁá áá°ááŤáľâ áááľ ááá˘
â ááŁáááľ áŤáá áá á°áľ
ááŁáááľ áŤáá áá
á°áľ ááá˘áá˝ á¨ááŽáááąá áá ááá áŽáľ áá¨ááť (áĽááá áá á
áááŤá) áá áá á¨áááĄá áľ áá°áľ ááᢠmaster
). á á°ááłáłá áá á¨áŽáą áĽáŤáľ á áŤáľ-á°á á ááá¨á áá¨áááŁá.
âááŁáááľ áá°ááŤáľ
ááŁáááľ áŤáá áá°ááŤáľ á°á°áááᣠá áŤáľ á°á áŽáľ áá° áááľ áá°ááŤáľ ááᢠá¨CI/á˛á˛ áá áťá¨ áá ááá°á ááá á ááłááľ áá âááŁá ááľá¨áľâ á°áĽá ááááťáᢠáá á áá á¨áą "ááŁá áá°ááŤáľ" áá á°ááłáłá áá, ááá áá "ááŁá ááľá¨áľ" á¨ááŽáááąá á¨áá°ááŤáľ áá°áľ á¨áááአá ááľ áááŚá˝á á áĽá áá¨ááἠá áľááá áááá áŤááááłá.
á˘áŤáľááĽáá áá áááአáá
áá
á áá á¨á°áááŠá áľ á á ááŁáá
á áĽá áááł á áááŹá˝á á Node.js á áŤáŁá˘ á¨áá°áŤ á¤ááľáá¨áľ á áááá ááᣠáŁáá ááľ áá˝ React áá°áá áŞáŤá á¨ááŤáááá áĽá á°á
áááą á¨á°á á á á¨á áááá áá á¤áá áá áá°áááᢠáá
á ááá´áá¸á á ááľáĄ á¨ááááá áľááľ áá¨á°áá
áá á°áá¨ááŠá˘
Docker
áśá¨á ááŽáá´áááŹá˝á á´áááá ááľáá áááŁáá á áááŹá˝áá˝ á ááá áĽáá˛á°áŤáᣠáĽáá˛á°áአáĽá á á°ááłáłá á áŤáŁá˘ áĽáá˛á°áŠ á¨ááŤáľá˝á ááłáŞáŤ ááᣠááá áĽááłá á¨áśá¨á ááľá¨á áĽáŤáą á á°ááŤáŠ á áŤáŁá˘áá˝ á¨áá°áŤ á˘áááᢠá ááááŞáŤáŁ á áśá¨á á¨áľáĽáá ááľáá ááłáŞáŤáá˝ (CLI) áá áĽáá ááááľ áá á¨áĽáá˘
Docker Hub á áááľ á°ááłáłá ááá ááá˘
áľááá ᣠá áśá¨á áááááᣠáááľ áááŽá˝á ááľá¨á áŤáľáááááłááĄ-
- áŤá
Docker á´áľááśá . - áááááĄ
Docker ááá¨á .
á¨áá á áá á¨áśá¨á áľáŞáąá áááá°á˝ á¨áá¨á°ááá áľááá á áááľ Docker CLI áĽá¨á°áŤ áááá áá¨ááἠáá˝áááĄ
docker -v
á ááá áᣠá˛á á¨á á¨á°á áá áľááá áĽá á¨ááá áááá á ááľááŁáľ áá° Docker Hub áááĄáĄ-
docker login
áśá¨áá ááá áá á¨ááľáá˝á áĽá á¨ááŤáŁáá˝á á˝áá°-ááłáŚá˝ áá¨áłáľ á ááĽááľá˘
â ááľáá˝
ááľá ááŤáŁáá ááááŁá á áááŞáŤáá˝á á¨áŤá áĽáá° ááľá áŤá ááá áá. áá á¨ááááἠá¨áá°áá áŞáŤá á¨ááá áľáááľ áĽá ááźáśá˝ á á˝á áłá áá˝ áĽááł ááᢠááá˘áá˝ á ááá ááľáá˝á áááŤáľ áá˝ááá˘
# ĐŃвОд ŃводониК ОйО вŃĐľŃ
ОйŃаСаŃ
docker images
áá áľáĽáá á áá¨á°áá áŤáľá á áá á¨áĽ áŤááŁáá˘
REPOSITORY TAG IMAGE ID CREATED SIZE
---
ááĽáá á ááłááľ á¨áľááá ááłááá˝á á á°ááłáłá á áá¸áľ áĽáááá¨áłáá - á ááááŞáŤ á áľá°áŤá¨áľ áŤáá áľáĽáá á á ᣠáĽá á¨á፠áá ááŤáᣠáĽáá°áá˝á á¨ááŤáłá ááłáá˘
â áŽáá´áááŽá˝
áŽáá´ááá á áááŹá˝áá áááľáŹáľ á¨ááŤáľááááľá áááŽá˝ áá á¨áŤá áá°áá á á¨áá˝á áĽá á ááᢠá¨áá á ááŤá¨áĽ áá áŤáá áá°áá áŞáŤ áá á¨á° áááą ááá ááá áá áááá á°ááłáłá áá á¨áá°áŤá: á áááá°á á áŤáŁá˘ áĽá á á°ááłáłá á áŤáŁá˘. ááĽáĄ á°ááłáłá ááľá áŤáá¸á á ááŁááá˝ á á°ááŤáŠ á á¨áŁá˘áá˝ ááááŤá¸á ááá˘
# ĐĐľŃĐľŃиŃНонио вŃĐľŃ
кОнŃоКноŃОв
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
---
â áááŤáá˝
áá፠á¨á ááľ á¨á°áá°á ááľá áľáŞáľ ááłáŤ ááá˘
â ááśá¨á áľáááá˝ ááŁá ááŁááť
á ááłááľ á áĽááľ áĽá á áá á¨áá Docker áľáááá˝ á á ááá áĽááł áá¸ááá˘
áĄáľá
ááá°-á˝áá
áá¤áľ
ááľá
á¨Dockerfile ááľá ááááŁáľ
ááľá
ááľá áá፠ááľá áľ
ááľá
ááľáá˝á ááááá
áŽáá´ááá
á ááľá áá á áááľá¨áľ ááŤáŁá ááŤááľ
ááľá
ááľá áá° áááᥠá ááľáá áá
ááľá
á¨áááᥠááľáĽ ááľáá á ááŤá áá
áŽáá´ááá
ááŤáŁáá˝á ááááá
ááľá/ááŤáŁ
áĽá á áá áŤááá ááŤáŁáá˝á áĽá ááľáá˝á ááľáááľ
áśá¨áááá
á¨ááá¨áť áá°áá áŞáŤá á á áá ááľáĽ áĽáá´áľ ááľáŹáľ áĽááłááĽá á ááááᢠááá á¨áá React áá°áá áŞáŤá áááááŁáľ á¨á°áá°á á¨ááĽáá áá
á á ááᢠá ááá áᣠNode.js áá á¨á°áá°á¨á° á áááá á áá°áĄ áá á¨áááá áľáĽáá á áá 5000
. áá
á áááľááá˘
npm i # ŃŃŃанОвка СавиŃиПОŃŃоК
npm run build # ŃйОŃка React-ĐżŃиНОМониŃ
npm run start # СапŃŃĐş Node-ŃĐľŃвоŃĐ°
ááá ááłááľ ááłá á¨ááá áááá¨áť áĽáá°ááá áἠááŁá áááŁá. áá áĽáá , ááá¨áŤáá˝, ááááá ááá á¨ááľááá áľáá ፠áá°áŤá.
ááŤáŁáá ááá áá ááśá¨á áááŞáŤáá˝á ááľá áľ áŤáľáááááłá. áá
á¨áá¨áááá á á°á áŤá ááá áá Dockerfile
, á ááŽáááą áľá áá፠ááľáĽ áááá. áá
ááá ááááŞáŤ áá á áŁá ááá¨áłáľ á¨áááťá áááľááá˘
ááá áá á ááľáĄ á¨áŤáá áአáľáááá˝á áĽáť á¨ááááá á¨áľáŤ á áŤáŁá˘á á¨áááááľ áá á°ááłáłá áá. á¨áĽááá áľáááá˝ ááŤá¨á áĽááśáš áĽáááĄ-
ᨠ- áá áľáĽáá ááá ááááŤáᢠááŤáŁá á¨á°áááŁá áľá á¨áá á¨áľ ááľá ááááťá.á á - áááá˝á á¨á áŤáŁá˘áŤá ááá áá° ááŤáŁ áááá áĽ.WORKDIR - á¨áľáŤ áááŤáá ááá¨á°ááľ áľáááá˝ á áááááľ ááá˘ááá - áľáááá˝á áŤááą.áááἠ- áá°áĽ á ááĽáŽá˝.ááá˘áŤ ááĽáĽ - á¨ááá¸áá áľááá ááááľ.
Dockerfile
áĽáá°áá
áŤá ááá áááľá áá˝áááĄ-
# ĐĐ°ĐłŃŃСиŃŃ ĐąĐ°ĐˇĐžĐ˛ŃĐš ОйŃаС
FROM node:12-alpine
# ХкОпиŃОваŃŃ ŃĐ°ĐšĐťŃ Đ¸Đˇ ŃокŃŃоК диŃокŃĐžŃии в диŃокŃĐžŃĐ¸Ń app/
COPY . app/
# ĐŃпОНŃСОваŃŃ app/ в ŃОНи ŃайОŃоК диŃокŃĐžŃии
WORKDIR app/
# ĐŁŃŃанОвиŃŃ ĐˇĐ°Đ˛Đ¸ŃиПОŃŃи (кОПанда npm ci пОŃ
ОМа npm i, нО иŃпОНŃСŃĐľŃŃŃ Đ´ĐťŃ Đ°Đ˛ŃОПаŃиСиŃОваннŃŃ
ŃйОŃОк)
RUN npm ci --only-production
# ХОйŃĐ°ŃŃ ĐşĐťĐ¸ĐľĐ˝ŃŃкОо React-ĐżŃиНОМонио Đ´ĐťŃ ĐżŃОдакŃна
RUN npm run build
# ĐŃĐžŃĐťŃŃиваŃŃ ŃкаСаннŃĐš пОŃŃ
EXPOSE 5000
# ĐĐ°ĐżŃŃŃиŃŃ Node-ŃĐľŃвоŃ
ENTRYPOINT npm run start
á áá¨áĄáľ á¨áá á¨áľ ááľá áá á áááľá¨áľ, á°á¨á᪠áĽáááá˝á ááŤá áŤáľáááááłá. áĽáááłá áá á ááłááľ á¨áá á¨áľ ááľáá˝ (áĽáá° ááľ á áááá ááááľ) á á°áťá áá á á¨áłáá áĽáá˛áá áááľá¨á á áááľ á¨á°áá አáá¸áᢠá áá¤áąá, áĽááľá á¨áá áĽáá¸á á ááłááľ ááŽááŤáá˝ ááááŤá¸á áá˝áá.
â áááá ááááŁáľáŁ áá፠ááľá áľ áĽá ááľáŹáľ
á¨á áŤáŁá˘ áááŁá á፠áĽá ááŤáŁá ááľááá áĽá áŤáá á áá ááᢠDockerfile
, á°ááŁáŽáš á áŁá ááá áá¸á. ááľáá áá° Docker Hub á¨ááááľá á ááľáŁ á á áŤáŁá˘á ááá¨á á ááĽááľá˘
âáľáĽá°áŁ
á ááááŞáŤ áá°áĽá°áĽ áŤáľáááááłá latest
).
# ХйОŃка ОйŃаСа
docker build -t <image>:<tag> .
áá á áľáĽáá á¨á¨á¨áą á áá, Docker ááľáá á˛ááᣠáá¨áľ áá˝áá.
Sending build context to Docker daemon 2.88MB
Step 1/9 : FROM node:12-alpine
---> ...вŃпОНнонио ŃŃапОв ŃйОŃки...
Successfully built 123456789123
Successfully tagged <image>:<tag>
áááŁáłá áááľ á°áááá˝á áááľáľ áá˝áá - ááá áá áŤá
á áĽáááá˝ áĽááłáááľ ááá°áá. áááŁáłá á¨á°á ááá á áá áľáááá áááľ áá˝áá docker images
áĽá á¨á á˛áąá ááľááá ááá፠áááá¨áą.
REPOSITORY TAG IMAGE ID CREATED SIZE
<image> latest 123456789123 About a minute ago x.xxGB
â á áľááá
ááľá á°ááĽáŻá. áá
áááľ á áĽáą áá á áááľá¨áľ ááŤáŁ ááŤááľ áá˝áá. ááááŤáąá á áŽáá´ááá ááľáĽ á¨áá°áŤáá áá°áá áŞáŤ ááááľ ááťá áĽááááá localhost:5000
, áĽá, áĽááľ á á፠á áŠá 5000:5000
á áááĽáá áľááá á°ááá 5000
. á áá á áŠá á¨áĽá ááŤá áá°áĽ áá.
# ĐĐ°ĐżŃŃĐş Ń Đ¸ŃпОНŃСОваниоП НОкаНŃнОгО пОŃŃĐ° 5000 и пОŃŃĐ° кОнŃоКноŃĐ° 5000
docker run -p 5000:5000 <image>:<tag>
á áá ááŤáŁá á˛áá á áĽá á˛á°áŤ, áľáááá áá áá áá˝áá docker ps
áľááá
ááŤáŁ áá¨áá ááááá¨áľ (ááá áľáááá áá áá áá˝áá docker ps -a
, áľá ááá áŽáá´áááŽá˝ áá¨áá á¨ááŤáłáŠ, á¨áááąáľá áĽáť áłááá).
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
987654321234 <image> "/bin/sh -c 'npm runâŚ" 6 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp stoic_darwin
á áá áá° á áľáŤáťá á¨ááą localhost:5000
â á áááľ á áŤáŁá˘ ááľáĽ á¨áá°áŤá á¨áá°áá áŞáŤá áá˝ áá á°ááłáłá á¨áá á¨áááľ áá°áá áŞáŤ áá˝ áá¨áľ áá˝ááá˘
âáá፠ááľá áľ áĽá áá°á
á á ááŤá˝ á áááአáá á¨á°áá áŠáľ ááľáá˝ á ááąá ááá áá áá á ááľá á¨Docker Hub ááá¨áľ ááťá á ááĽáᢠáá áááľ á ááááŞáŤ á Docker Hub áá áááŽáááą áá áŤáá፠ááá á áŤáľáááááłá áááľ áá. á¨áá á áá, ááľáá á¨ááááá áľ áŚáł ááá¨áá. áľá á áĽá Docker Hub á¨á°á áá áľá áĽáá˛ááá ááľá áĽáá°áá áá°á¨á á áá áľá˘ áá á áá¨ááťá áľá áá¨á°á á áá áľ. ááááá áá፠á áľá áá¨á¨áť áá áááἠáá˝áá. áá á áĽá áľ á áá áá ááľáá˝á á¨áá°á¨á ááłá á¨áá á áłá˝ á áá˘
á áá ááľáá á á á˛áľ áľá ááááŁáľ áĽá áľáááá ááľáŹáľ áá˝áá docker push
áá° Docker Hub áá¨ááť áááááľá˘
docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>
# ĐĐ° ĐżŃĐ°ĐşŃико ŃŃĐž ĐźĐžĐśĐľŃ Đ˛ŃгНŃĐ´ĐľŃŃ, напŃиПоŃ, ŃĐ°Đş:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0
ááá ááá áĽáŠ á¨áá ááľá á Docker Hub áá áááá áĽá á ááá áá° á áááአáá°áá ááá áá° ááá˝ ááá˘áá˝ áá°ááá áá˝ááá˘
ááŁá áĽááááá˝
á á áá áá áááá¨áťá á áśá¨á áŽáá´ááá ááá á á áá ááľáĽ áĽá¨á°áŤ áááá á á¨ááá ááᢠááŤáŁáá áá° Docker Hub á°á ááááᢠáá áá áááľ áá°á áĽáá áá° ááŁá˝á á áŁá áĽáŠ áĽáľááľ á áľáááá áááľ ááᢠá áá áááľ á°á¨á᪠áĽáŤááá˝á áááłáľ áŤáľááááá.
- áŽáľá áááá°á˝ áĽá ááá°ááŤáľ ᨠCI ááŁáŞáŤá á áááááľ ááá˘
- ááŽáłáá˝á á ááááŠá á áááá áŽáłá˝áá áĽáá˛áŤáááľ áĽá áĽáá˛á°áŤ ááľá¨áá˘
á áĽá áááł, áĽáá áááá
áĽáá áá á¨á áááááśá˝ áĽáá¨áľ áá áá áĽáá°áá˝á áἠááŁá áááŁá. áááłáᣠᨠTravis CI ááá CircleCI ááá Github Actionsá áá áá áá˝ááᢠáĽá á á˛ááłááŚá´á áááł - AWS ááá Linode.
ᨠTravis CI áá áááľáŤáľ áá°áá, áĽá á áá á áááááľ ááľáĽ ááľááá á¨á°ááᨠááá á áá. áľááá , á áá ááľáŤ áĽáá´áľ áááááľ áĽááłááĽá á á áአáĽáááŤáá.
Travis CI
áľáŤáŞáľ á˛á á áŽáľá áááá°á˝ áĽá ááá°ááŤáľ ááłáŞáŤ ááᢠáĽáŤááłááą ááŽáááľ áአáľááá áľáŤáŞáľ Რá áá á áááá áá° ááľáĽáľáĽ á˝ááŽá˝ áááľ á ááááá ᣠáĽá áá áĽá áĽá á á áŤáľáááᢠááá áá Travis CI ááá áá á¨áá°á áĽááľáá ááááá áá°á¨áłá áááŽá˝á áĽá¸ááááᢠTravis CIᣠCircleCIᣠJenkins ááá áá ááá á¨áá¨áĄáŁ á°ááłáłá á¨áááá áá´áá˝ á ááá áŚáł áĽá á áá ááááá˘
á Travis CI ááááá áá° áááą
Travis CI á ááᨠááĽá á áááአá°áááŻáᣠá ááááŞáŤ ááá ááľáĽ á¨á°ááášáľá áľáĽááá˝ á áááá á°ááłá á¨áá¨á áá¨ááť á áááŤáá˝á áá°ááŤáľá á¨ááŽá˘
âá¨áĽáŤ á¨ááááľ áá°áľ
Travis CI áá
á ááá á°á ááˇá .travis.yml
áĽá á ááŽáááą áľá áá፠ááľáĽ á¨á°á¨áá¸, á¨ááľá°áśá˝á á˝áá°-ááłáĽ áá°ááá
apt addons
cache components
before_install
install
before_script
script
before_cache
after_success иНи after_failure
before_deploy
deploy
after_deploy
after_script
â áá¨áŤ
á ááááŞáŤá ááá ááľáĽ á¨á áŤáŁá˘áá Travis CI á áááá ááá á ááᢠááľááá ááááľ 12á áĽáá° áááá áááŹááá áĽá áľáááą Docker ááá áá á¨ááŤáľááááľá áĽááá˝ áĽáá˛áá áááŹá áá áá˘
á¨á°áá¨áá¨á áá .travis.yml
, á áá ááአáŤáá°ááḠá áľá°áá ááá á¨ááłáĽ áĽáŤááá˝ áá° ááá á¨áá¨ááťá á
áááŤáá˝ á˛ááᥠááá¸ááᢠáá
á áá áŁá
᪠áá ááááŤáąá áá° áá¨ááťá á¨áááĄáľá áááá áŽáľ ááá¨á áĽáá˝ááá áááľ áá. áá
ááĽáŠ áá° á
áááŤá áááťá ááá áááá áŤáłáá
ááłáᢠmaster
, áĽá á¨ááŽáááąá áááŁáł áá°áľ áá°áĽáŤá áĽáá°áá. á áá
á ááá áá áá
á¨áľ ááľáĽ áááá ááá á á áá ááľáĽ áĽááááᣠá¨ááĽáá á´á á ááááá á¨á áľá°ááᣠá ááľ (áá
á¨áľáŤ áá°á´ áŁá
᪠áá) áĽá áá¨áŤáá˝á á á¨áááááá˘
á¨áĽááľá áá¨ááť á¨áá¨áŤ á˝ááá á¨ááŤááááą áŁáá˝á áĽáá˛áŤáłá á¨ááááŁ
áľááá
á¨ááá áááľ áá¸áá .travis.yml
:
# ĐŁŃŃанОвиŃŃ ŃСŃĐş
language: node_js
# ĐŁŃŃанОвиŃŃ Đ˛ĐľŃŃĐ¸Ń Node.js
node_js:
- '12'
services:
# ĐŃпОНŃСОваŃŃ ĐşĐžĐźĐ°Đ˝Đ´Đ˝ŃŃ ŃŃŃĐžĐşŃ Docker
- docker
install:
# ĐŁŃŃанОвиŃŃ ĐˇĐ°Đ˛Đ¸ŃиПОŃŃи Đ´ĐťŃ ŃĐľŃŃОв
- npm ci
before_script:
# ĐĐ°ĐżŃŃŃиŃŃ ŃĐľŃĐ˛ĐľŃ Đ¸ ĐşĐťĐ¸ĐľĐ˝Ń Đ´ĐťŃ ŃĐľŃŃОв
- npm run dev &
script:
# ĐĐ°ĐżŃŃŃиŃŃ ŃĐľŃŃŃ
- npm run test
áááá á¨áá¨ááťá á áááŤáá˝ áĽá áááá°áľ áĽáŤááá˝ á¨áá°á¨á áľáááśá˝ á¨ááŤá áá áľ áĽáá ááá˘
â áá°ááŤáľ
ááá á ááśáá˛á áá¨áŤáá˝ á á°áłáŤ áááł á°á áá
ááá á¨áá áááľ á áááłáľ ᣠáĽáá° á ááŤá ᣠáŽáąá áá° á¨áááľ á áááአáá°ááŤáľ áĽáá˝áááᢠáá
áá ááľá¨á á¨áááááá á¨á
áááŤá áá°áá áŽáľ áĽáť ááᢠmaster
, á áá°ááŤáľ á
áá
áśá˝ ááľáĽ ááľáááą á°áá˘áá áááŞáŤ áĽáá°áŁáá. á ááŽáááľá ááľáĽ ááĽá á¨ááááá¨á°áá áŽáľ ááá áá á¨ááá¨áá á ááľáŁ ááá°ááŤáľ á°áĽá á¨áá ፠áľáááá áľááŞááľ áááááľ áĽáá°ááᣠááľá áá
á
á áĽáááááá˘
deploy:
# ХОйŃĐ°ŃŃ Docker-кОнŃĐľĐšĐ˝ĐľŃ Đ¸ ĐžŃĐżŃавиŃŃ ĐľĐłĐž на Docker Hub
provider: script
script: bash deploy.sh
on:
branch: master
á¨áá°ááŤáą áľááŞááľ áááľ á˝ááŽá˝á áááłááĄ
- ᨠCI ááŁáŞáŤá á áá áá ááľáá áááᥠᣠáá፠ááľáĄ áĽá áá° Docker Hub ááአ(á áĽá áá᳠ᣠTravis CI)á˘
- ááľáá á á áááአáá ááŤá, á¨áľáŽáá ááŤáŁ ááá áĽá á á˛áľ áááá (á áĽá áááł, á áááአá DigitalOcean ááľá¨á áá áá°áŤá).
á ááááŞáŤ ááľáá áááááŁáľáŁáá፠áááľá áľ áĽá áá° Docker Hub áááááľ á ááśáá˛á áá°áľ áááááľ áŤáľáááááłáᢠáአáááŤáá˝á á ááľáá˝ áá áááá°áĽ áĽá ááá˘áŤáá˝á á áŤáľ á°á á¨áááááľ áľááľ áŤáľáááá á áľá°áá áá áá á áĽá áŤá°á¨ááá áá á áŁá á°ááłáłá ááᢠáĽáá° á¨áá፠áľááľáŁ ááá˘áŤáŁ á¨á¤áľá¤áľá¤á˝ ááá á˘ááŽá˛ááᣠá¨á¤áľá¤áľá¤á˝ áááááľ áááľá¨áľ áŁá á ááłááľ á¨áá°ááŤáą áľááŞááľ ááááŽá˝ áá á˝áá áá á¨áĽáᢠáá áĽáá° áĽáľá áá á¨áááľ áá°áᏠáĽáá° ááá˝ áĽá áááŽá˝ á¨áŁá˝ áá á áŁá áĽáŠ ááᢠáá á áľááŞááľ áĽááľá˝á á¨áľáśááá˘
áľááá
ᣠá¨áľááŞááą á¨ááááŞáŤ ááá ááľáá áá° Docker Hub áĽá¨á°áá ááᢠáá
á ááľá¨á á áŁá ááá ááᢠá¨á°á áááŠá áľ á¨áá፠áá´ á¨ááľ áá˝ áĽá á¨ááľ áłá áŤá á ááľ áá ááŁááá áŤáŤáľáłáᢠáá
áááŤá áአáááá áŤá¨áááŁá áĽá á¨á°áá°á¨á°á áľá áľáĽá°áŁ áááá¨áľ ááá áŤá°áááá. DOCKER_USERNAME
и DOCKER_PASSWORD
Travis CI á áááá˝á á áá áá áááአá¨áá˝á á¨á°á áá á áŤáŁá˘ á°ááááŽá˝ áá¸áᢠTravis CI á á°áłáłá° áĽá
ááľáĽ áĽááłáááľá
ááľáĽáŤáááľ áŤáá áá¨áá á áŤáľ-á°á áŤá¨ááááá˘
á¨áľááŞááą á¨ááááŞáŤ ááá áĽáá deploy.sh
.
#!/bin/sh
set -e # ĐŃŃанОвиŃŃ ŃĐşŃĐ¸ĐżŃ ĐżŃи наНиŃии ĐžŃийОк
IMAGE="<username>/<repository>" # ĐĐąŃаС Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-Ń
ŃŃ Đ¸ Ńоги
# ХйОŃка и ŃогиŃОванио ОйŃаСа
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest
# ĐŃ
Од в Docker Hub и вŃĐłŃŃСка ОйŃаСа
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}
á¨áľááŞááą ááá°á ááá áá áĽáá°ááá áá á áá á¨ááá°áá á á¨áľáá á áľá°ááá
áĽá¨á°á ááá áľ áĽáá°áá áĽá á¨áĽáą áá áŤáá áááááľ áĽáá´áľ áĽáá°á°á°áŤá ááᢠá áĽá áááłáŁ áĽá á˛ááłá áá
áŤááľá áľááá ááᣠá¨á áááአáá ááááááľ áľáĽááášá áĽá ááááᢠaws
, áĽáá áááĽáá.
á ááááŠá áááá á á°áá á¨áŁáľ á ááá á¨áᢠáľááá
, á áá á¨áłá ááľá áá á áááľá¨áľ áá áĽáŁáĽ á ááá
áťáá. áĽá á¨áá¨áĽáŠáľ áľáááľ á¨áśá¨áá á ááľ áá á áĽá
ááŤá áĽá á¨á ááľ áá á¨áśá¨á ááľááłáľ áĽáá°ááŤáľááá áἠááŁá áááŁá. áśá¨áá áááŤá áĄáĄááą 18.04 á°á áááŠáᣠáľááá
á áá°á á°ááłáłá áááľá¨á áĄáĄááąá áĽá¨á°á ááá á¨áá áá¨á°á áľá˝ááá
á˘
áĽáá áľá á áááááą á¨á°áá°á áľáááá˝á á ááááá, ááááŤáąá áá áá áł á á°ááŤáŠ ááłáŽá˝ áá á áŁá áááŤá áá˝áá. á SSH á áŠá ááŽáááą áá°áá°ááŤá áľ á áááá á¨á°ááá á áá á¨áá¨ááá á á ááá á¨áľáááľ ááá ááĽá áĽá°áŁáááĄ-
- á áá á¨áá°áŤáá áŽáá´ááá ááááľ áĽá ááá á ááĽá.
- á¨á፠á¨á áľá°ááᣠá á˛áľ ááŤáŁ ááľááłáľ áŤáľáááááłá.
- á¨á ááááŠá á¨á áŤáŁá˘ áá°áĽ áááá á áŤáľáááááłá
80
- áá áĽáá° á áľáŤáť áá° áŁá˘áŤá áĽáá˛áᥠááá áľáááłáexample.com
, áĽáá° á áľáŤáť á¨áá áá ááá áá°áĄá áłáááášexample.com:5000
. - á áá¨á¨áťá áááá á¨áአááŤáŁáá˝á áĽá ááľáá˝á áá°á¨á áŤáľáááááłá.
á¨áľááŞááą ááŁáááľ áá ááá˘
# ĐĐ°ĐšŃи ID ŃайОŃĐ°ŃŃогО кОнŃоКноŃĐ°
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)
# ĐŃŃанОвиŃŃ ŃŃĐ°ŃŃĐš кОнŃоКноŃ, СапŃŃŃиŃŃ Đ˝ĐžĐ˛ŃĐš, ĐžŃиŃŃиŃŃ ŃиŃŃоПŃ
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f
áľáŠá¨áľ áá°áŁá¸á á¨ááᥠá ááłááľ áááŽá˝
á SSH á áŠá ᨠTravis CI á¨á áááአáá á˛ááá áľáááą á¨á°á áááá ááá˝ áľááá áĽá ááŤáá áĽááłáááĽá á¨ááŤá°áá ááľá ááá፠áŤáŤáá˘
The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?
á¨ááĽá¨ááá ááá á á ááş áĽá á á áľá°ááá áááł áá°áŤá áľ á áá˝á á
á˝ áááľááἠá base64 ááľáĽ áááłá á áĽáá°ááťá á°áááŠá˘ á ááŤá á°á¨á, á¨á á°áŁáŁá áááá áááłáľ áĽá á ááá áá ááá áá˝áá known_hosts
á¨áá áŤááá áľá
á°áľ áááľáááľ.
echo <public key> | base64 # вŃĐ˛ĐžĐ´Đ¸Ń <ĐżŃйНиŃĐ˝ŃĐš кНŃŃ, СакОдиŃОваннŃĐš в base64>
á á°ááŁá áá áľáĽáá áá á áááľá áá˝áááĄ-
echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64
áĽá á¨ááŤááá¨á áá¸áá - á¤á64 áŽáľ á¨á°á°á¨á ááĽá¨ááááĄ
MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==
á¨áá á¨á°á áá°á áľááá áá¸áá
install:
- echo < ĐżŃйНиŃĐ˝ŃĐš кНŃŃ, СакОдиŃОваннŃĐš в base64> | base64 -d >> $HOME/.ssh/known_hosts
áááááľ á áááĽáŠá áľ áá á¨áá ááá áá á°ááłáłá áá´ áá áá ááťáá ááááŤáąá á ááááŠá áááááľ á¨áá ááá ááŤáľáááá áľááá˝áᢠá¨ááá áá á˛á°áŠ á Travis CI á áŤáŁá˘ á°áááá ááľáĽ á°á áááą á á°á á á áááł áá¨áá¸áąá áĽá á á¨áľááá áŚáł áĽáá°áááłá áá¨ááἠáĽáť áŤáľáááááłáá˘
ááá áἠááŁá á¨áááŁá ááá áááá á¨áá°ááŤáľ áľááŞááľ áĽáá° á ááľ ááľáá áááłá - á doctl
. áá
á¨á°áá°á á°á¨á᪠áĽá¨áľ áá áá
áá˝ááá˘
doctl compute ssh <droplet> --ssh-command "вŃĐľ ĐşĐžĐźĐ°Đ˝Đ´Ń ĐąŃĐ´ŃŃ ĐˇĐ´ĐľŃŃ && СдоŃŃ"
TLS/SSL áĽá á¨áááľ áááŁá á
á¨áá á¨á°á áá°áá áá áŤá°á¨áአá áá, áŤáá áá á¨áá¨á¨áťá á˝áá á áááአSSL á¨ááá. áááľáá°áľ ᨠNode.js á áááá áľááá áá
áá
áá áá á¨á¤áľá¤áľá¤á áá
á¨áľ á áĽá ááľá¨á á áááááŠáᣠáľááá
á¨ááľ ááá áá áአáĽá ááááŽášá á Რá¤á á¤áľ ááľáĽ áááá¤áŤááᢠáááłá á á˛ááłá áá
áŤááľ ááłá áá á ááľ ááá áá á áŤáľ-á°á á¨ááŤáľáľ á¨áŤáľ ááá á°áá°ááŹáľ ááá á áááᣠáá áĽá ááŁá á á°áŤá ááᢠáá
á áŤááľ á áľááá á¨áá á¨ááľ ááá ááᣠá áááą á ááŤáł á ááááŽá˝ áá SSLá áááá á áŁá ááá á¨ááŤá°ááá á°á¨á᪠áĽá
á á ááᢠáá
á ááááŽáš áŤáłá¸á áľáá¤áľá¤áľá¤á âáĽáá˛áŤáľáĄâ áŤáľá˝áá¸áá ᣠáá á á°ááłáłá áá áá°áĽ áĽáá°á°ááá°á áá áá 80
. áľááá
á¤áľá¤áľá¤áá á ááľ ááá áááá á¤áľá¤áľá¤áá á¨áááá á ááŤá áá´áá˝ á¨á áá ááá áĽá ááš ááá˘
á áá áᢠáááááśá˝á á¨ááá á áááá áá°áŚá˝ á á áááአáá ááááľ áá˝áá - á¨áá°áĄ á áľá°áá 80
, á¨áááľ ááá áĽá á¨áá°áĽ áá ááááááľ áŤááááá 22
áá¤áľá¤áľá¤á˝. á áá¤áąá á¨áĽááá
áááą áá áŁá áá°áŚá˝ áá á ááááŠá á ááĽáł áááááľ á¨á°á°á¨áá áá¨áŤ á ááłáŤáá˘
áá¤áśá˝
á áá
á˝áá ááľáĽ á¨á°ááááŠáľá áá áŤá°á¨áአá ááᣠá¨áśá¨á ááľá¨áá áá áŤáľ-á°á á¨á˛á á/á˛á˛ á°áá°ááśá˝ á˝áá°-ááłáŚá˝ á¨áĽááá˛á
á áŤáľááŠááᢠááŁáááľ áŤáá áá
á°áľ á°áá°ááľ áááááľ á˝áŤáá, á áá
áá áŽáą áá° áááľ á¨áááŁáą á ááľ ááá¨áŤá áĽá áŽáą á áŤáľ-á°á á á áááአáá ááŤáá. áá
áá á ááá ááĽá á á áááŤáááľ á á˛áľ ááᣠáĽá á¨áĽáá á ááśááľáľ á¨áľáŤ áá°áľ áááťáťá áĽá á¨á áá áááŁá áááľá¨á ááááśá˝ áĽááłá áĽááá á ááᢠáľááá
á áá
ááłá áá ááłáĽ áŤááľ áĽáŁááá áŤáłáááá˘
PS á áĽá ááľáĽ
ááľ á ááŁá˘áá˝! á ááŽáááśá˝á ááľáĽ CI/CD á´áááááá˝á áá ááá?
ááá: hab.com