Inventos "Docker + Gitlab CI ááźááˇáş áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáážááˇáş á ááşá¸áááşááźááşá¸ááŻááşáááşá¸á ááş" ááž Alexander Sigachev á áážááşáááşá¸ááᯠáááşáááş ááťá˝ááşáŻááşáĄááźáśááźáŻáĄááşááŤáááşá
Docker + Gitlab CI áááŻáĄááźáąááśá áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáážááˇáş á ááşá¸áááşáážáŻááŻááşáááşá¸á ááşááᯠá áááşáĄááąáŹááşáĄáááşááąáŹáşááąáá°ááťáŹá¸áááş áĄááźáąááśááąá¸áá˝ááşá¸ááťáŹá¸ ááąá¸ááąáˇáážáááŤáááşá áááşáážáŹá áááá˛á áááşáááŻá ááşá¸ááŻáśá¸ááá˛á áááşáááŻá ááşá¸áááşááá˛á
Docker áážááˇáş Gitlab CI ááᯠáĄááŻáśá¸ááźáŻá áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáážááˇáş á ááşá¸áááşááźááşá¸ááŻááşáááşá¸á ááşáĄááźáąáŹááşá¸ á áá áşáááť áá˝áąá¸áá˝áąá¸ááŹá¸ááąáŹááźáąáŹááˇáş á¤áĄá áŽáááşááśá áŹáááş ááąáŹááşá¸áá˝ááşááŤáááşá áĄá áŽáááşááśá áŹáááŻááşáááŻááşá 2017 áááŤá á¤áĄá áŽáááşááśá áŹááž áĄááźáąááśááťáŹá¸á áááşá¸á áá áşááťáŹá¸á áĄááźáśáĽáŹááşááťáŹá¸áážááˇáş áĄááŻáśá¸ááźáŻáážáŻáĄáá˝áąáˇáĄááźáŻáśááťáŹá¸ááᯠá áŻááąáŹááşá¸áááŻááşáááşáᯠááťá˝ááşáŻááşáááşááŤáááşá
áááşáá° áááŻá
ááŻááşáᲠááźáąáŹááşáĄáąáŹááşáážáŹ ááťáąá¸áá°á¸ááźáŻááźáŽá¸
ááťá˝ááşááąáŹáˇáşááŹáááş Alexander Sigachev ááŤá ááťá˝ááşááąáŹáş Inventos áĄáá˝ááş áĄááŻááşááŻááşááŤáááşá Docker áááŻáĄááŻáśá¸ááźáŻááźááşá¸áĄáá˝áąáˇáĄááźáŻáśáážááˇáş ááŻáášáááŽáážá áááąáŹááťááşááťáŹá¸áá˝ááş áááşá¸ááᯠááźááşá¸ááźááşá¸ááťááşá¸ áĄááąáŹááşáĄáááşááąáŹáşááŻáśáááŻáˇááᯠááźáąáŹááźááŤáááşá
áĄá áŽáááşááśá áŹááĄááźáąáŹááşá¸áĄááŹ- Docker áážááˇáş Gitlab CI ááᯠáĄááŻáśá¸ááźáŻá áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻááŻááşáááşá¸á ááşá
ááŤá Docker áĄááźáąáŹááşá¸ ááťá˝ááşááąáŹáˇáşáá˛áˇ ááŻáááááźáąáŹááş áá˝áąá¸áá˝áąá¸áážáŻááŤá ááááĄá
áŽáááşááśááťáááşáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş ááąáŹáˇááşáá˛áĄááşááťááşááŽááŹá
ááşááťáŹá¸áá˝ááş áá˝áśáˇááźááŻá¸áááŻá¸áááşááąá¸áá˝ááş Docker áááŻáᏠáĄááŻáśá¸ááźáŻáá˛áˇáááşá Docker ááŻáśá¸áá˛áˇ áááşáááşá¸áŚá¸ááąá á-á ááąáŹááşááąáŹááşáážááááşá áááźááşá¸ááźááşá¸áá˛áˇ áĄáá˝áąáˇáĄááźáŻáśáá˝áąáááŹááźáŽá¸ ááťá˝ááşááąáŹáşáááŻáˇ áááşá¸áááşá¸áááŻááąá¸áá˝áŹá¸áááşá ááťá˝ááşááąáŹáşáááŻáˇáá˛áˇáááˇáşááş
ááŽáĄá áŽáááşááśá áŹáážáŹ ááŹáá˝áąááŤááá˛á ááťá˝ááşáŻááşáááŻáˇ á áŻááąáŹááşá¸ááŹá¸ááąáŹ ááááşááŻááˇáşááťáŹá¸á áááşáááŻáˇááąáŹ ááźáżááŹááťáŹá¸ ááźáąáážááşá¸áá˛áˇáááşááťáŹá¸áĄááźáąáŹááşá¸ ááťá˝ááşáŻááşáááŻáˇá áĄáá˝áąáˇáĄááźáŻáśááᯠááťážááąááŤáááşá ááąááŹáááŻááşá¸á ááážáááąáááˇáş áĄá˛ááŤá ááťá˝ááşááąáŹáşáááŻáˇááᯠáááşááťážáąáŹááşáá˝ááˇáşááąá¸áááşá
ááťá˝ááşáŻááşáááŻáˇáááąáŹááşááŻááş- ááťá˝ááşáŻááşáááŻáˇáááşáážááşá¸ááŽáááťážááᯠáááşáááŻááşááŹá¸áááŻááşááŤá
áááşáááŻááźáżááŹáá˝áąááᯠááŤáááŻáˇááźáąáážááşá¸ááąáá˛á
ááŻáášáááŽáá áşááŻáá˝ááş áĄáá˝á˛áˇááťáŹá¸á á˝áŹáážááááˇáşáĄá፠ááááŻááááşááŹáááş ááťážááąááŹá¸ááąáŹ áĄáááşá¸áĄááźá áşáá áşááŻááźá áşáááşá ááááŻááááşááŹáá áşáŚá¸ááᯠáááąáŹááťááşáá áşááŻááž áá˝á˛ááŻááşááźáŽá¸ áĄááźáŹá¸áááąáŹááťááşáá áşááŻáááŻáˇ áĄááťáááşáĄáááşááźáŹ ááąá¸áĄááşáááˇáşáĄá፠áĄáááˇáşááťáŹá¸áážááááşá
ááááŻááááşááŹáá áşáŚá¸áááş ááťááşááźááşá á˝áŹááŹá¸áááşáááŻááşá áąáááşáĄáá˝ááş áááąáŹááťááşááĄáááşá¸áĄááźá áşááŻááşááᯠááąáŤááşá¸ááŻááşááŻááşááźáŽá¸ áááşáááşá¸ááťááşááᯠáááşáááŻááşáááťáž ááźááşááźááşáá˝ááˇáşáááş áááŻáĄááşááźáŽá¸ áááşá¸áááş á¤áááąáŹááťááşáááźáżááŹááťáŹá¸ááᯠááźáąáážááşá¸ááŹáá˝ááş áááŻáááŻáááŻá¸áááşááąáŹááşá¸áá˝ááşááŹá áąáááşááźá áşáááşá
áĄááťáŹá¸áĄáŹá¸ááźááˇáşá áááş áĄá ááž á áááşááŤá áááąáŹááťááşáá˝ááş á áŹáá˝ááşá áŹáááşá¸ áĄáááşá¸áááşááŹáážááááşá áážáąá¸ááąááşááąáŹááşá¸ááťáŹá¸áᏠáááşá¸ááᯠáááşáážááşááŻáśáážááˇáşáááşáááşáááˇáş áĄááťááşáĄáááşáážááááşá áááşáááşá¸ááťáŹá¸áááş áááşá¸áááŻáˇá ááŻááşáááşá¸áá˝ááşááᯠáá áşáááş áááŻáˇáááŻááş áážá áşáááşáĄáá˝ááşá¸ áááşá¸áááŻáˇááŹáᏠáááşáážááşááąá¸áááşá áááşá¸áááŻáĄáážáááşááźážááˇáşáááş Docker áááŻáĄááŻáśá¸ááźáŻáá˛áˇáááşá
ááąáŹááşáĄááźáąáŹááşá¸áĄáááşá¸áážáŹ Development áážá áááşáááşááťáŹá¸á á áśáááşáážááşááźááşá¸ááźá áşááŤáááşá ááťá˝ááşáŻááşááĄáá˝áąáˇáĄááźáŻáśáĄáá ááąáŹáˇááşáá˛ááąá¸ááŹá¸áá°ááťáŹá¸áááş áĄááźá˛áááşá¸ áĄá ááťááŻá¸ááŻááşááąáŹááşáááşá ááášá áááá ášá áááŻááşá¸áá˝ááşá áĽááᏠvasya.dev á áááşááźááŻááşáááŻááááşá¸áá áşááŻááᯠáááˇáşáá˝ááşá¸ááŹá¸áááşá ááŤáˇááąá¸áážáŹáááŻááşááąáá˛áˇ ááŤáˇáĄáááşááŽá¸ááťááşá¸ Petya á petya.dev ááŤá áááşá¸áááŻáˇáááş á¤áááŻááááşá¸áĄáááşááᯠáĄááŻáśá¸ááźáŻá áááşáááŻááş áááŻáˇáááŻááş á áá áşáĄá áááşáĄáááŻááşá¸áĄááťááŻáˇááᯠááŽáá˝ááşáááşá
á áá áşááźáŽá¸áá˝áŹá¸ááŹááźáŽá¸ á¤áááŻááááşá¸áĄáááşááťáŹá¸ááᯠá áŽá ááşáá˝á˛áˇá ááşá¸áážáŻáá˝ááş á áááşáááˇáşáá˝ááşá¸ááąáŹáĄááŤá áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááşáááşá¸ááťááşááťáŹá¸áá˝ááş áááááášááá áşáᯠááźá áşááąáŤáşááŹááźáŽá¸ áááŻááşáááşá¸ááźáąáŹááşá¸ááᯠááźááşáááşááąá¸ááŹá¸ááŤáááşá
ááąááŹááąáˇá
áşáááşáááşááťáŹá¸áá˝ááşáááşá¸ áĄááŹá¸áá°ááá
ášá
áááşááťááŻá¸ááźá
áşáááşáááşá áĄááťááŻáˇááąáŹáá°ááťáŹá¸áááş ááŻáśááźáŻáśááąá¸áĄáá˝ááş áĄáážáąáŹááşáĄáážááşáááąá¸áᲠáĄááťááşá¸áážáŽá¸ááąáŹ root á
ááŹá¸áážááşááźááˇáş ááŻááşááąáŹááşááźáááşá áááşáááşáááˇáşáĄáááˇáşáá˝ááşá MySQL áááş áá
áşá
áŻáśáá
áşáŚá¸áĄáŹá¸ á
ááŹá¸áážááşáá
áşááŻááąáŹááşá¸ááźáŽá¸ á
ááŹá¸áážááşáááş 123 ááźá
áşáá˝áŹá¸áááşá ááąáŹáˇááşáá˛ááąá¸ááŹá¸áá°á áááááááşáĄááąáŤáş áá°áááşá ááąááŹááąáˇá
áşááźááşáááşáážáŻáážáŹ áĄáááşáááźááşááźáąáŹááşá¸áá˛ááąáááşáááşá áá
áşá
áŻáśáá
áşááąáŹááşá ááźáŻááźááşááŹá¸áááşá áá
áşá
áŻáśáá
áşááąáŹááşá ááźáŻááźááşáážáŻááŻáśá
áśááᯠáááźááşáá°á¸á á
ááşá¸áááşáážáŻááŻáśá
áśáĄááťááŻáˇááᯠáááˇáşáá˝ááşá¸ááąáŹáĄááŤáá˝ááş áážááˇáşáá˝ááşááťáŹá¸áážááááşá .gitignore
developer áá
áşááŻá
áŽáááş database ááᯠinstall ááŻááşááááşááźá
áşááŤáááşá áááşá¸á á
áááşáááˇáş ááŻááşáááşá¸á
ááşááᯠáááŻáááŻáááşáá˛á
áąáááşá áĄááźáŹá¸áĄááŹááťáŹá¸áá˛áá˝ááşá áááşáááş database áĄááźáąáŹááşá¸ áážááşááŹá¸ááŹá¸áááş áááŻáĄááşáááşá ááąááŹááąáˇá
áşááᯠáĄá
ááźáŻááááşá á
ááŹá¸áážááşáá
áşáᯠáážááşááŻáśáááşááááşá áĄááŻáśá¸ááźáŻáá° áážááşááŻáśáááşááááşá áááŻááşá¸ááŻááşááᯠáááşááŽá¸ááááşá á
áááşááźááˇáşá
ááąáŹááşááźáżááŹáá áşááŻáááąáŹáˇ á áŹááźááˇáşáááŻááşáá˝áąáá˛áˇ ááŹá¸áážááşá¸áĄááťááŻá¸ááťááŻá¸ááŤáá˛á ááąáŹáˇááşáá˛áĄááşááťááşááŽááŹáá áşáŚá¸áááş ááá°ááŽááąáŹáááąáŹááťááşááťáŹá¸áá˝ááş ááŻááşááąáŹááşááąáˇáážááááşá áá˝ááşáá˛áˇááąáŹááŤá¸áážá áşá (2017 áážá áááşáá˛áˇáááş - áááşá¸ááźááşáá°ááážááşááťááş) á áĄá áá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş MySQL 5.5 ááźááˇáş á áááşáá˛áˇáááşá áĽááᏠ5.7 áážááˇáşáĄáááş (2017 ááŻáážá áş - áááşá¸ááźááşáá°ááážááşá áŻ)
MySQL áážááˇáşáĄááŻááşááŻááşáá°áááŻááşá¸áááş á¤á áŹááźááˇáşáááŻááşááťáŹá¸áááş áážáŽáááŻáážáŻááťáŹá¸áážááááşáááŻáááááşá ááąááŹááąáˇá áş 2 ááŻááᯠáĄáá°áá° run áááŻáˇá ááąáŹáşááąáŹáşááźáżááŹáááşááŤáááşá áĄáááşá¸ááŻáśá¸ááąáŹáˇá ááąáŹááşáááşááąáŹááşá¸áá˝áąááᯠááąááŹááąáˇá áşáĄáá áşáá˛áˇ ááťáááşáááşáááŻáˇá ááźáżááŹáážááááşá áááşá¸á ááźáżááŹááťáŹá¸á á˝áŹááᯠááźá áşááąáŤáşá áąáááşá
ááąáŹááşááźáżááŹáážáŹ developer áááş local machine áá áşááŻáá˝ááşáĄááŻááşááŻááşááąáŹáĄááŤá local resources, local files, local RAM áááŻáĄááŻáśá¸ááźáŻáááşá ááźáżááŹááťáŹá¸áĄáá˝ááş áĄááźáąáá áşááŻááᯠááŽáá˝ááşááąááťáááşáá˝ááş áĄááźááşáĄáážááşáááşáá˝ááşáážáŻáĄáŹá¸ááŻáśá¸ááᯠá ááşáá áşááŻáśá¸áááşá¸áá˝ááş ááŻááşááąáŹááşáááˇáşáĄááťááşá áá°ááąáŹááşáĄáá˝ááşá¸ ááąáŹááşáá˝ááşááŤáááşá áĽáááŹáá áşááŻá Production 3 áá˝ááş backend ááŹááŹááťáŹá¸áážááááşááźá áşá developer áááş áááŻááşááťáŹá¸ááᯠroot directory áá˝ááşááááşá¸áááşá¸ááźáŽá¸ nginx ááž ááąáŹááşá¸áááŻááťááşáĄáŹá¸ ááŻáśáˇááźááşáááşáĄáá˝ááş áááŻááşááťáŹá¸ááᯠáá°ááąáŹááşáá˝áŹá¸áááşááźá áşáááşá áááŻáááŻáˇááąáŹááŻááşáááş ááŻááşááŻááşááąá¸áááŻáˇááąáŹááşáážáááąáŹáĄááŤá áááŻááşáááş ááŹáᏠ3 ááŻáĄáááşáá áşááŻáá˝ááş áážáááąááźáąáŹááşá¸ áá˝ááşááąáŤáşááŹáááşá
Microservices á áŚá¸áááşááťááşáááş áááşáážááá˝ááş áááŻá¸áááşááąááŤáááşá ááťá˝ááşáŻááşáááŻáˇá ááźáŽá¸ááŹá¸ááąáŹ áĄáááŽááąá¸áážááşá¸ááťáŹá¸ááᯠáá áşááŻáážááˇáşáá áşáᯠáĄááźááşáĄáážááş áááşáá˝ááşáááŻááşááąáŹ áĄá áááşáĄáááŻááşá¸áááşááťáŹá¸áĄááźá áş áááŻááşá¸ááźáŹá¸ááąáŹáĄááŤá áááşá¸áááş áááˇáşáĄáŹá¸ ááŽá¸ááźáŹá¸ááŻááşáááşá¸ááąáŹááşááŹáá áşááŻáĄáá˝ááş áááşá¸áááŹááťáŹá¸ááᯠáá˝áąá¸ááťááşáááŻááşá áąááŤáááşá áááşá¸áááş áááˇáşáĄáŹá¸ developer ááťáŹá¸áĄááźáŹá¸ áĄááŻááşáážááˇáş ááŹáááşá§ááááŹááᯠáááŻááşá¸ááźáŹá¸áááŻááşá áąááŤáááşá
JS áá˝ááşááąáŹáşááąáŹááşááąááąáŹ frontend developer áááş backend ááąáŤáşáá˝ááşááźááŹáááşááąáŹááşáážáŻááážááááąáŹááşááźá áşáááşá backend developer áááş ááťá˝ááşáŻááşáááŻáˇááĄááźáąáĄááąáá˝ááş Ruby on Rails áážááˇáş Frondend ááᯠáĄáážáąáŹááˇáşáĄáážááşáááąá¸ááąá API ááᯠáĄááŻáśá¸ááźáŻá áĄááźááşáĄáážááşááŻáśáˇááźááşáážáŻááᯠááŻááşááąáŹááşáááşá
ááąáŹáááşá áşáĄááąááźááˇáş Docker áááŻáĄááŻáśá¸ááźáŻá Staging áá˝ááş áĄáááşá¸áĄááźá áşááťáŹá¸ááᯠááźááşáááşáĄááŻáśá¸ááźáŻáááŻááşáá˛áˇáááşá áááąáŹááťááşáá áşááŻá áŽáááş áááşá¸ááĄááąá¸á áááşáĄááťááşááťáŹá¸ááźáąáŹááˇáş áĄááťááŻáˇááąáŹáááşáááşááťáŹá¸ áááŻáĄááşáááşá ááŻááşáááŻááşá¸áááŻááşááŹáĄáŹá¸ááźááˇáşá áááşá¸áááş virtual server áá áşááŻááŻááᯠáá˝á˛ááąááźáŽá¸ ááŽá¸ááźáŹá¸á Ꭰá áŽá ááşáááş áááŻáĄááşáááşá áááŻáˇáááŻááş áĄááťááŻáˇááąáŹ ááźáąáŹááşá¸áá˛áááŻááşááąáŹ áááşáááşá¸ááťááşááᯠáááŻááşá¸ááźáŹá¸áááşáážááˇáş á áŹááźááˇáşáááŻááşááťáŹá¸á ááŹá¸áážááşá¸ááąáŤáşáá°áááşá áĄááťááşá¸ááťááşá¸ áá˝ážááşá¸áááŻá¸áááŻááşáááˇáş áááąáŹááťááşááťáŹá¸ áááŻáĄááşááŤáááşá
ááááááŹááťáŹá¸á ááŹáááŻááŻáśá¸áážáŹáá˛?
- Docker áááŻááşáááŻááşá Dockerfile áááş áĄáááŽááąá¸áážááşá¸áá áşááŻáááşá¸á áážáŽáááŻáážáŻááᯠááąáŹáşááźáááşá
- Docker-compose áááş ááťá˝ááşáŻááşáááŻáˇá Docker áĄáááŽááąá¸áážááşá¸ááťáŹá¸á á˝áŹááᯠá áŻá ááşá¸ááŹá¸ááąáŹ áĄáá˝á˛áá áşááŻááźá áşáááşá
- ááťá˝ááşáŻááşáááŻáˇáááş áĄáááşá¸áĄááźá áşááŻááşááᯠááááşá¸áááşá¸áááş GitLab ááᯠáĄááŻáśá¸ááźáŻáááşá
- á áá áşááąáŤááşá¸á ááşá¸áááşáĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş GitLab-CI áááŻáĄááŻáśá¸ááźáŻáááşá
áĄá áŽáááşááśá áŹáá˝ááş áĄáááŻááşá¸áážá áşáááŻááşá¸ááŤáááşáááşá
ááááĄáááŻááşá¸áááş developer ááťáŹá¸áá ááşááťáŹá¸áá˝ááş Docker áááŻáááşáááŻáˇááŻááşááąáŹááşááááşáááŻááźáąáŹááźááááˇáşáááşá
ááŻááááĄáááŻááşá¸áá˝ááş GitLab áážááˇáş áááşáááŻáˇáĄááźááşáĄáážááşáááşááśááááşá á á áşááąá¸áážáŻááťáŹá¸ááŻááşááąáŹááşááŻáśáážááˇáş Staging áááŻáˇ áááşáááŻáˇááŻááşááąáŹááşááááşááᯠáá˝áąá¸áá˝áąá¸ááŤáááşá
Docker áááş áááŻáĄááşááąáŹáĄá
áááşáĄáááŻááşá¸ááťáŹá¸áááŻááąáŹáşááźáááş (ááźáąááźáŹááťááşá¸áááşáááşá¸áááŻáĄááŻáśá¸ááźáŻá) áá˝ááˇáşááźáŻááąáŹáááşá¸áááŹáá
áşááŻááźá
áşáááşá ááŤá áĽááᏠDockerfile áá
áşááŻááŤá á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş Ruby:2.3.0 ááááŹá¸áááş Docker ááŻáśááž áĄáá˝áąáááşááśááąááźáŽááźá
áşááźáąáŹááşá¸ ááźáąááŹááŤáááşá áááşá¸áá˝ááş Ruby ááŹá¸áážááşá¸ 2.3 áááˇáşáá˝ááşá¸ááŹá¸áááşá ááťá˝ááşáŻááşáááŻáˇáááş áááŻáĄááşááąáŹ á
ááşá¸ááąá¸áá˝á˛á
áŹááźááˇáşáááŻááşááťáŹá¸áážááˇáş NodeJS ááᯠáááşáááşáááşá ááťá˝ááşáŻááşáááŻáˇáááş áááşá¸áá˝ážááşáá
áşáᯠáááşááŽá¸ááąááźáąáŹááşá¸ ááąáŹáşááźááŤáááşá /app
. ááťá˝ááşáŻááşáááŻáˇáááş áĄááşááşáááşá¸áá˝ážááşááᯠáĄááŻááşáááşá¸áá˝ážááşáĄááźá
áş áááşáážááşááąá¸áááşá á¤áááşá¸áá˝ážááşáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş áááŻáĄááşááąáŹ áĄáááşá¸ááŻáśá¸ Gemfile áážááˇáş Gemfile.lock ááᯠááŹá¸áážááááşá áááŻáˇááąáŹááş á¤áážáŽáááŻááŻáśáĄáŹá¸ áááˇáşáá˝ááşá¸áááˇáş áááąáŹááťááşááťáŹá¸ááᯠáááşááąáŹááşááŤáááşá áá˝ááşááááşááŹáááş ááźááşá port 3000 áá˝ááş ááŹá¸áááşáááşáĄáááşáááˇáşááźá
áşáááşáᯠááťá˝ááşáŻááşáááŻáˇáá˝ážááşááźááŤáááşá ááąáŹááşááŻáśá¸áĄááááˇáşáážáŹ ááťá˝ááşáŻááşáááŻáˇááĄáááŽááąá¸áážááşá¸ááᯠáááŻááşáááŻááşáá˝ááˇáşáááˇáşáĄááááˇáşááźá
áşáááşá áĄáááşá ááťá˝ááşáŻááşáááŻáˇáááş áááąáŹááťááşááŻááşááąáŹááşááźááşá¸áĄááááˇáşááᯠááŻááşááąáŹááşááŤáá áĄáááŽááąá¸áážááşá¸áááş áááşáážááşááŹá¸ááąáŹ áĄááááˇáşááᯠáááşáááşááŻááşááąáŹááşáááş ááźááŻá¸á
áŹá¸áááşááźá
áşáááşá
áááşá¸áááş docker-compose áááŻááşáá áşááŻá áĄáááşá¸áááşááťážáᏠáĽáááŹáá áşááŻááźá áşáááşá á¤ááá ášá áá˝ááşá áá˝ááşááááşááŹáážá áşááŻááźáŹá¸áá˝ááş ááťáááşáááşáážáŻáážáááźáąáŹááşá¸ ááźáááŤáááşá áááşá¸áááş ááąááŹááąáˇá áşáááşááąáŹááşáážáŻáážááˇáş áááşáááşááąáŹááşáážáŻáááŻáˇ áááŻááşáááŻááşááźá áşáááşá ááťá˝ááşáŻááşáááŻáˇá áááşáĄááşáááŽááąá¸áážááşá¸áĄááťáŹá¸á áŻáá˝ááş ááąááŹááááşá¸áááşá¸áááşáĄáá˝ááş ááąáŹááşáá˝ááşáá˝ááş ááąááŹááąáˇá áşáá áşááťááŻá¸ááťááŻá¸ áááŻáĄááşááŤáááşá ááťá˝ááşáŻááşáááŻáˇáááş MySQL áááŻáĄááŻáśá¸ááźáŻááąáŹááźáąáŹááˇáşá áĽáááŹáááş MySQL ááźááˇáşááźá áşáááş - áááŻáˇááąáŹáş áĄááźáŹá¸ááąááŹááąáˇá áşáĄááťááŻáˇ (PostgreSQLá Redis) áááŻáĄááŻáśá¸ááźáŻááźááşá¸ááž ááťá˝ááşáŻááşáááŻáˇáĄáŹá¸ áááşáááˇáşáĄááŹáááž ááŹá¸ááŽá¸ááŹá¸áááşá
Docker hub áážáááŹá¸áááşáĄáááşá¸áĄááźá áşáážááźáąáŹááşá¸áá˛áážáŻááážááᲠMySQL 5.7.14 ááŻáśáááŻáá°áááşá ááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşáŻááşáááŻáˇááááşáĄáááŽááąá¸áážááşá¸áĄáá˝ááş ááŹáááşáážáááąáŹ ááŻáśááᯠáááşáážááááşá¸áá˝ážááşááž á áŻááąáŹááşá¸ááŤáááşá ááááĄááźáááş áá˝ážááşáááşááťáááşáá˝ááş ááťá˝ááşáŻááşáááŻáˇáĄáá˝ááş ááŻáśáá áşááŻáśááᯠá áŻááąáŹááşá¸áááşá áááŻáˇááąáŹááş ááťá˝ááşáŻááşáááŻáˇ á¤ááąááŹáá˝ááş ááŻááşááąáŹááşááąááąáŹ command ááᯠrun áááşá ááťá˝ááşáŻááşáááŻáˇááźááşáá˝áŹá¸ááŤáá Puma áážáá áşáááˇáş launch command áááŻáááşáážááşááŹá¸ááźáąáŹááşá¸áá˝áąáˇáááŤáááşá Puma áááş Ruby ááźááˇáşááąá¸ááŹá¸ááŹá¸ááąáŹáááşááąáŹááşáážáŻáá áşááŻááźá áşáááşá ááŻáááááá ášá áá˝ááşááťá˝ááşáŻááşáááŻáˇáááşááąá¸áááşá á¤áĄááááˇáşáááş ááťá˝ááşáŻááşáááŻáˇááááŻáĄááşááťááş áááŻáˇáááŻááş ááŻááşááąáŹááşááťááşááťáŹá¸áĄááąáŤáş áá°áááşá ááááşááááŻááźá áşáááŻááşáááşá
ááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşáŻááşáááŻáˇá developer host machine áá˝ááş port ááᯠ3000 ááž 3000 container port áááŻáˇááąá¸áááŻáˇáááşáááŻáĄááşááźáąáŹááşá¸ááąáŹáşááźááŤáááşá Docker áá˝ááş áááŻááşáááŻááşáááˇáşáá˝ááşá¸ááŹá¸áááˇáş iptables áážááˇáş áááşá¸ááááŻááşáááŻááşááášáááŹá¸áááŻáˇááᯠáĄááŻáśá¸ááźáŻá áááşá¸ááᯠáĄáááŻáĄááťáąáŹááşááŻááşááąáŹááşáááşá
ááąáŹáˇááşáá˛ááąá¸ááŹá¸áá°áááş ááááşáá˛áˇáááŻáˇáááşá ááážááááŻááşááąáŹ IP ááááşá áŹá áĽáááŹá 127.0.0.1 á ááşá ááąááá˝ááşá¸ áááŻáˇáááŻááş ááźááşá IP ááááşá áŹááᯠááá°áááŻááşáááşá
ááąáŹááşááŻáśá¸á áŹááźáąáŹááşá¸á áááşáá˝ááşááááşááŹáááş db áá˝ááşááááşááŹááąáŤáşáá˝ááş áá°áááşáááşáᯠáááŻáááşá áááşáá˝ááşááááşááŹááᯠá áááşáááş ááťá˝ááşáŻááşáááŻáˇááąáŤáşáááŻááąáŹáĄááŤá docker-compose áááş ááťá˝ááşáŻááşáááŻáˇáĄáá˝ááş ááąááŹááąáˇá áşááᯠáŚá¸á á˝áŹ á áááşááŤáááşá ááąááŹááąáˇá áşá áááşááťáááşáá˝ááşááźá áşááąááźáŽ (ááááşááąáŹáˇ áá˝ááşááááşááŹááᯠáá˝ážááˇáşáááşááźáŽá¸ááąáŹááşá áááşá¸áááş ááąááŹááąáˇá áşá áĄáááşáááˇáşááźá áşáážáŻááᯠáĄáŹááááśáááŻááşááŤ) áááşá¸áááş ááťá˝ááşáŻááşáááŻáˇá áĄááşááşááŽááąá¸áážááşá¸á ááťá˝ááşáŻááşáááŻáˇá ááąáŹááşááśáááŻááşááᯠá áááşááŤáááşá
áááşá¸áááş ááąááŹááąáˇá áşááááşáááˇáşáĄá፠áĄáážáŹá¸áĄáá˝ááşá¸ááťáŹá¸ááᯠáážáąáŹááşáážáŹá¸áááŻááşá áąááźáŽá¸ ááąááŹááąáˇá áşáá˝ááşááááşááŹááᯠáááşáááˇáşáááŻááşáááˇáşáĄá፠áĄáááşá¸áĄááźá áşááťáŹá¸ááᯠááááşá¸áááşá¸áááŻááşá áąáᏠáĄááźáŹá¸áááąáŹááťááşááťáŹá¸áĄáá˝ááş áĄáááşá¸áĄááźá áşááťáŹá¸ááᯠáááşáážáŹá¸ááąá¸áááŻááşáááşá
áááąáŹááťááşáá áşááŻáá˝ááş database dockerization áááŻáĄááŻáśá¸ááźáŻááźááşá¸áááş ááťá˝ááşáŻááşáááŻáˇáĄáŹá¸ áĄáááşáĄááŹááąá¸ááááşá¸á developer áĄáŹá¸ááŻáśá¸áĄáá˝ááş MySQL ááŹá¸áážááşá¸ááᯠááťá˝ááşáŻááşáááŻáˇ áážááşáááşá¸áááşááŤáááşá áááşá¸áááş ááŹá¸áážááşá¸ááťáŹá¸ áá˝á˛ááźáŹá¸áááˇáşáĄááŤá áĄááŹá¸áĄáááŻá áá˝á˛áˇá ááşá¸áážáŻáážááˇáş ááŻáśááąáááşáááşááťáŹá¸ ááźáąáŹááşá¸áá˛áááˇáşáĄá፠ááźá áşááąáŤáşááŹáááŻááşáááˇáş áĄáážáŹá¸áĄáá˝ááşá¸áĄááťááŻáˇááᯠáážáąáŹááşáážáŹá¸áááŻááşá áąáááşááźá áşáááşá áááşá¸áááş áááˇáşáĄáŹá¸ ááąááŹááąáˇá áşá ááąáŹáˇááşáĄááşá á ááŹá¸áážááşáĄáá˝ááş ááŻáśáĄáááşáážááşáĄáááşááᯠáááşáážááşáá˝ááˇáşááźáŻáááşá ááťá˝ááşáŻááşáááŻáˇáááş ááááşááážááá˛áˇáááˇáş config áááŻááşááťáŹá¸áá˝ááş áĄáááşááťáŹá¸áážááˇáş áá˝á˛áá˝á˛áážáŻááťáŹá¸ááᯠáááá ášááŹááşááŻáśááž ááąá¸ááŹáááŻáˇ ááźáąáŹááşá¸áá˝ážáąáˇááąááŤáááşá
ááťá˝ááşáŻááşáááŻáˇáááş áá°áááŻáśá áśáážááˇáş áá˝á˛ááźáŹá¸áááˇáş áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááşáááşá¸ááťááşáĄáá˝ááş áááŻáááŻáááˇáşááťáąáŹáşááąáŹááŻáśá áśááᯠáĄááŻáśá¸ááźáŻáááş áĄáá˝ááˇáşáĄááąá¸áážááááşá MySQL áááş áĄáŹá¸áááşá¸ááąáŹ á ááşááťáŹá¸áĄáá˝ááş ááŻáśááąááźááˇáş configure ááźáŻááŻááşááŹá¸ááźáŽá¸ ááąáŹááşá áşááźááşáááž áááşá¸áá á˝ááşá¸ááąáŹááşáááşáážáŹ áĄáá˝ááşááááˇáşááŤáááşá
Docker áááş áááˇáşáĄáŹá¸ áááŻááťááşááąáŹááŹá¸áážááşá¸á Python, Ruby, NodeJS, PHP ááŹááŹááźááşááᯠáĄááŻáśá¸ááźáŻáá˝ááˇáşááąá¸áááşá ááťá˝ááşáŻááşáááŻáˇáááş ááŹá¸áážááşá¸áááşááąááťáŹáá áşááťááŻá¸ááťááŻá¸ááᯠáĄááŻáśá¸ááźáŻáááş áááŻáĄááşáážáŻááᯠáááşáážáŹá¸áá áşáááŻááşáááşá ááááşáá áááąáŹááťááşáĄááąáŤáş áá°áááşá ááŹá¸áážááşá¸ááᯠááźáąáŹááşá¸áá˛áá˝ááˇáşááźáŻáááˇáş Ruby áĄáá˝ááş rpm áááşááąáˇááťáşááᯠááááşá áĄááŻáśá¸ááźáŻáá˛áˇáááşá Docker áá˝ááşááááşááŹááźáąáŹááˇáşá áááşá¸áááş ááŻááşááᯠááťáąáŹáá˝áąáˇá á˝áŹ áá˝ážáąáˇááźáąáŹááşá¸áááŻááşááźáŽá¸ áážáŽáááŻáážáŻáážááˇáşáĄáá° áááşá¸ááᯠááŹá¸áážááşá¸ááźáąáŹááşá¸áááŻááşá áąááŤáááşá á ááŹá¸ááźááşáážááˇáş ááŻááşáážá áşááŻá ááŻáśá¸á ááŹá¸áážááşá¸ááᯠááŹá¸áááşáááş ááźáżááŹááážáááŤá ááŹá¸áážááşá¸ááᯠáĄááşááááşááŻááşáááşá áááşáááş áá˝ááşááááşááŹááąáŹááşá¸ááᯠááťážáąáŹáˇááťááźáŽá¸ áá˝ááşááááşááŹáĄáá áşááᯠááźážááˇáşáááşáááş áááŻáĄááşáááşá áá áşááŻááŻáážáŹá¸áá˝áŹá¸áááş áá˝ááşááááşááŹáĄáá áşááᯠáážáááˇáşááťááźáŽá¸ áá˝ááşááááşááŹááąáŹááşá¸ááᯠááźážááˇáşáááşáááŻááşááŤáááşá
ááŻááşááŻáśáááşááąáŹááşááźáŽá¸ááąáŹááşá áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáážááˇáş ááŻááşááŻááşáážáŻ áážá áşááŻá ááŻáśá¸áá˝ááş áá˝ááşááááşááŹááťáŹá¸áááş áá°ááŽáááşááźá áşáááşá áĄáá°á¸áááźááˇáş ááźáŽá¸ááŹá¸ááąáŹ áááşáááşáážáŻááťáŹá¸áĄáá˝ááş á¤áááşáážáŹ áážááşááŤáááşá
Frontend áá˝ááşááťá˝ááşáŻááşáááŻáˇáááş JavaScipt áážááˇáş NodeJS áááŻáĄááŻáśá¸ááźáŻáááşá
ááᯠááťá˝ááşáŻááşáááŻáˇáá˝ááş ReacJS áá˝ááş ááťá˝ááşáŻááşáááŻáˇá ááąáŹááşááŻáśá¸áááąáŹááťááşáážááááşá ááąáŹáˇááşáá˛áĄááşááťááşááŽááŹáááş áá˝ááşááááşááŹáĄáá˝ááşá¸áážá áĄááŹáĄáŹá¸ááŻáśá¸ááᯠá áááşáá˛áˇááźáŽá¸ hot-reload ááᯠáĄááŻáśá¸ááźáŻá ááŽáá˝ááşáá˛áˇáááşá
áááŻáˇááąáŹááşá JavaScipt áááşáááşááźááşá¸ááŻááşáááşá¸ááᯠá áááşáá˛áˇááźáŽá¸ áĄáááşá¸áĄááźá áşááťáŹá¸ááᯠááááşá¸áááşá¸áᏠnginx áážááááˇáş ááááşá¸ááááşá¸ááźááˇáş á áŻá ááşá¸ááŹá¸ááąáŹ ááŻááşááᯠááąá¸áááŻáˇáááşá
á¤áá˝ááşááťá˝ááşáŻááşáááŻáˇáááąáŹááşááŻáśá¸ááąáŤáşáááąáŹááťááşáá áşááŻáĄáŹá¸ ááťá˝ááşáŻááşáááşááźááŹá¸ááŤáááşá
áááşáááŻááźáżááŹáá˝áąááᯠáááşááźáąáážááşá¸áá˛áˇáá˛á ááťá˝ááşáŻááşáááŻáˇáááş áááŻáááŻááşá¸ááşá ááşáá ášá ááşá¸ááťáŹá¸áážááˇáş áĄááźááşáĄáážááş áĄááťááŻá¸ááźáŻáááˇáş á áá áşáá áşááŻááᯠáááşááąáŹááşáááş áááŻáĄááşááŤáááşá ááąááŹáááşááśááá°ááźáááşá ááźá áşáááŻááşááťáąááťáŹá¸áá˛áážáá áşááŻáážáŹ á¤á ááşáá ášá ááşá¸áááŻáˇ áá˝ááşá¸áĄáŹá¸ááąá¸áĄááźáąáŹááşá¸ááźáŹá¸ááťááşááťáŹá¸ááᯠááąá¸áááŻáˇáááşááźá áşáááşá
ááŽáĄáá˝ááş ááŤáááŻáˇááŹááŻááşáá˛áˇáá˛á
ááťá˝ááşáŻááşáááŻáˇáááş áĄáááŽááąá¸áážááşá¸áĄáŹá¸ áĄáąáŹááşááŤáĄá áááşáĄáááŻááşá¸ááťáŹá¸áĄááźá áş áááŻááşá¸ááźáŹá¸ááŹá¸áááş- JS áážá á áŽááśáááˇáşáá˝á˛áá°áĄáááŻááşá¸á Ruby on Rails áĄáąáŹááşáážá REST áĄááşááŹááąáˇá áşáážááááˇáş áĄááŻááşááŻááşááąáŹ ááąáŹááşááśáááŻááşá Backend áááş ááąááŹááąáˇá áşáážááˇáş áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáááşá ááŻááşááąá¸ááąáŹááááşááᯠclient áááŻááąá¸áááşá á áŽááśáááˇáşáá˝á˛áá°áĄáááˇáşáááş REST áĄááşááŹááąáˇá áşáážááááˇáş ááąáŹááşáá˝ááşááž ááąááŹááąáˇá áşáážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşáááşá
Push áĄááźáąáŹááşá¸ááźáŹá¸ááťááşááťáŹá¸ááᯠááąá¸áááŻáˇáááşáááşá¸ áááŻáĄááşááŤáááşá áááşá¸ááááŻááşááŽáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áááŻáááŻááşá¸ááááşááąáŹááşá¸ááťáŹá¸áááŻáˇ áĄááááąá¸ááťááşááťáŹá¸ááᯠááąá¸áááŻáˇáááş ááŹáááşáážááááˇáş ááášáááŹá¸áá áşááŻááᯠáĄááąáŹááşáĄáááşááąáŤáşáá˛áˇáááˇáş áááąáŹááťááşáá áşááŻáážááá˛áˇáááşá
ááťá˝ááşáŻááşáááŻáˇáááş áĄáąáŹááşááŤáĄá áŽáĄá áĽáşááᯠááŽáá˝ááşááŹá¸ááŤáááş- áááąáŹááşááŹááž áĄáąáŹáşáááąááŹáááş á áŽááśáááˇáşáá˝á˛áá°áĄáááˇáşáážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşáááşá á áŽááśáááˇáşáá˝á˛áá°ááąáŹááşáááş ááąáŹááşááśáááŻááşáážááˇáş áĄááźááşáĄáážááşááŻáśáˇááźááşáááşá áĄááŻááşáážáŹ Push áĄááźáąáŹááşá¸ááźáŹá¸ááťááşááťáŹá¸ááᯠááąá¸áááŻáˇáááşááźá áşáááşá
Push áĄááźáąáŹááşá¸ááźáŹá¸ááťááşááťáŹá¸áááş NodeJS áá˝ááşáĄááąáŹááşáĄáááşááąáŹáşáááˇáş áĄááźáŹá¸áĄá áááşáĄáááŻááşá¸áážááˇáş áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáááşá
áááşá¸á áŽáááŹá¸ááťáŹá¸ááᯠáááşááąáŹááşááźáŽá¸ áááşá¸áááŻáˇá áááŻááşáááŻááşááášáááŹá¸áĄá áĄááźáąáŹááşá¸ááźáŹá¸ááťááşááťáŹá¸ááᯠááąá¸áááŻáˇáááşá
á¤ááąááŹáá˝ááş ááąááŹááąáˇá áşáážá áşááŻááᯠááąá¸áá˝á˛ááŹá¸áááşá áááşáážááá˝ááşá Docker ááᯠáĄááŻáśá¸ááźáŻá ááťá˝ááşáŻááşáááŻáˇáááş áá áşááŻáážááˇáşáá áşáᯠááťáááşáááşáááááąáŹ ááŽá¸ááźáŹá¸ááąááŹááąáˇá áş 2 ááŻááᯠáĄááŻáśá¸ááźáŻááŤáááşá áááşá¸áááŻáˇáá˝ááş ááŻáś virtual network áá áşááŻáážáááźááşá¸áĄááźááşá ááąáŹáˇááşáá˛ááąá¸ááŹá¸áá°áá ááşáážá ááá°ááŽááąáŹáááşá¸ááźáąáŹááşá¸ááťáŹá¸áá˝ááş ááŻááşáááŻááşá¸áááŻááşááŹááąááŹááťáŹá¸ááᯠááááşá¸áááşá¸ááŹá¸áááşá
áá°ááŽááąáŹáĄááťááşáážáŹ ááááşá¸ááááşá¸ááťáŹá¸ááźá áşáááşá á¤ááąááŹáá˝ááş ááŻááşááᯠááźááşááŻáśá¸áááş áĄááąá¸ááźáŽá¸áááşá
áĄá áąáŹáááŻááşá¸á ááťá˝ááşáŻááşáááŻáˇáááş á áŹááźááˇáşáááŻááşááťáŹá¸ááŻáśá áśááźááˇáş ááŻááşááᯠááźááşáááşáĄááŻáśá¸ááźáŻááźááşá¸áĄááźáąáŹááşá¸ ááźáąáŹáááŻáá˛áˇááťážááş Push áĄááááąá¸ááťááşááťáŹá¸ááᯠááŻáśáˇááźááşáááˇáş á¤áĽáááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇááááşááąáŹááşáážáŻááᯠááźáŽá¸ááźááˇáşá áŻáśááąáŹ ááŹááŹáĄááźá áş ááźááşáááşáĄááŻáśá¸ááźáŻááŤáááşá áááşá¸áááş API áááŻááąáŹááşááśáˇááąá¸áááşá ááťá˝ááşáŻááşáááŻáˇá áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáĄáá áşáááş áááşá¸áážááˇáş áĄááťááŻá¸áááşááąáŹááşáááşá
áááŻáĄááťáááşáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş NodeJS á ááŹá¸áážááşá¸ 4 ááᯠáĄááŻáśá¸ááźáŻááąááŤáááşá ááᯠ(2017 áá˝ááş - áááşá¸ááźááşáá°ááážááşá áŻ) áááş ááťá˝ááşáŻááşáááŻáˇáááąáŹááşááŻáśá¸ááąáŤáşáááŻá¸áááşáážáŻááťáŹá¸áá˝ááş NodeJS ááŹá¸áážááşá¸ 7 áááŻáĄááŻáśá¸ááźáŻáááşá á áŹááźááˇáşáááŻááşááťáŹá¸á ááŹá¸áážááşá¸áĄáá áşááťáŹá¸ááŤáááşáááş áĄá áááşáĄáááŻááşá¸áĄáá áşááťáŹá¸áá˝ááş ááźáżááŹááážáááŤá
áááŻáĄááşááŤáá áááşáááş Push áĄááááąá¸ááťááşáááşááąáŹááşáážáŻá NodeJS ááŹá¸áážááşá¸ááᯠááźááşáááşááźááşáááşááźáŽá¸ ááźážááˇáşáááşáááŻááşáááşá
API á áááŻááşáááşááŽáážáŻááᯠááááşá¸ááááşá¸ááŹá¸áááŻááşááŤá áááşá¸ááᯠááááşá áĄááŻáśá¸ááźáŻáá˛áˇáááˇáş áĄááźáŹá¸áááąáŹááťááşááťáŹá¸áážááˇáş áĄá áŹá¸áááŻá¸áááş ááźá áşáááŻááşááŤáááşá
Docker áááˇáşáááŻáˇ ááŹáá˝áąáááŻáĄááşáá˛á ááťá˝ááşáŻááşáááŻáˇáááş áááŻáĄááşááąáŹ áážáŽáááŻáážáŻááᯠááąáŹáşááźáááˇáş ááťá˝ááşáŻááşáááŻáˇá áááŻáážáąáŹááşáááşá¸áááŻáˇ Dockerfile ááᯠááąáŤááşá¸áááˇáşááŤáááşá á¤áĽáááŹáá˝ááşá áĄá áááşáĄáááŻááşá¸ááťáŹá¸ááᯠááŻáášáááááşá¸ááťááť áááŻááşá¸ááźáŹá¸ááŹá¸áááşá á¤áááşáážáŹ ááąáŹááşááśááąáŹáˇááşáá˛ááąá¸ááŹá¸áá°áĄáá˝ááş áĄáááşá¸ááŻáśá¸ áĄá áŻáśááźá áşáááşá
áááąáŹááťááşáĄáá áşáá áşááŻáááşááŽá¸ááąáŹáĄááŤáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş Dockerfile áá áşááŻáááŻáááşááŽá¸ááźáŽá¸ áááŻááťááşááąáŹááąáá áá áş (Pythoná Rubyá NodeJS) áááŻááąáŹáşááźááŤáááşá docker-compose áá˝ááşá áááşá¸áááş áááŻáĄááşááąáŹ áážáŽáááŻáážáŻ - ááąááŹááąáˇá áşááᯠááąáŹáşááźáááşá ááąááŹááááşá¸áááşá¸áááşáĄáá˝ááş áááŻááąááŹáá˝ááş ááąááŹááááşá¸áááşá¸áááş áááŻáá˛áˇáááŻáˇááąáŹ ááŹá¸áážááşá¸áá áşááŻá ááąááŹááąáˇá áşáá áşáᯠáááŻáĄááşááźáąáŹááşá¸ ááąáŹáşááźááŤáááşá
ááťá˝ááşáŻááşáááŻáˇáááş áááşááźáááşááąáŹáĄááźáąáŹááşá¸áĄááŹááᯠááąáŹááşáá˝ááşááąá¸áááşáĄáá˝ááş nginx ááŤááąáŹ ááŽá¸ááźáŹá¸ááááááŻáśá¸ááᯠáĄááŻáśá¸ááźáŻááŤáááşá ááŤááşááŻáśáá˝áą áááşáááŻáˇáááŤáááşá Backend áááş áááşá¸áááŻáˇáĄáŹá¸ áááşááźáááşááąááŹááᯠááśáˇáááŻá¸ááąá¸áááˇáş nginx ááŤáááˇáş áá˝ááşááááşááŹáá áşááŻáá˝ááş áááşáááşááŹá¸áááˇáş ááźááŻáááşááźááşáááşááŹá¸ááąáŹ áĄááśáĄáááŻá¸áĄááťááşáá áşááŻáá˝ááş áááˇáşáá˝ááşá¸ááŹá¸áááşá
nginx áážááˇáş mysql configuration ááᯠááááşá¸áááşá¸áááşáĄáá˝ááş áááŻáĄááşááąáŹ configuration ááťáŹá¸ááᯠááááşá¸áááşá¸ááŹá¸áááˇáş Docker folder ááᯠááąáŤááşá¸áááˇáşáá˛áˇááŤáááşá ááąáŹáˇááşáá˛áĄááşááťááşááŽááŹáá áşáŚá¸áááş áááşá¸áá ááşáá˝ááş áááŻáážáąáŹááşáážáŻáá áşááŻá git clone áá áşááŻááᯠááźáŻááŻááşááąáŹáĄááŤá áá°áˇáá˝ááş ááąááá˝áśáˇááźááŻá¸ááąá¸áĄáá˝ááş áááąáŹááťááşáá áşáᯠáĄáááşáááˇáşáážáááąááźáŽááźá áşáááşá áááşáááˇáşááááşáááşá¸ áááŻáˇáááŻááş áááşáááˇáşáááşáááşááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááááşáážááˇáşáááşáááşá ááąá¸áá˝ááşá¸ááŻááşá ááŹááážáááŤá
ááąáŹááşáá áşááŻáá˝ááş ááťá˝ááşáŻááşáááŻáˇáá˝ááş áĄá áááşáĄáááŻááşá¸ááťáŹá¸á á˝áŹáážááááş- á áŽááśáááˇáşáá˝á˛áá°á áĄááťááşáĄáááş-APIá áá˝ááşá¸áĄáŹá¸ááąá¸ áĄááááąá¸ááťááşááťáŹá¸á
á¤áĄááŹáĄáŹá¸ááŻáśá¸ááᯠá áááşáááşáĄáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş dockerized-app ááŻááąáŤáşááąáŹ áĄááźáŹá¸ repository áá áşááŻááᯠáááşááŽá¸áá˛áˇáááşá ááťá˝ááşáŻááşáááŻáˇáááş áĄá áááşáĄáááŻááşá¸áá áşááŻá áŽáĄáá˝ááş áááŻáážáąáŹááşáážáŻáĄááťáŹá¸áĄááźáŹá¸ááᯠáááşáážááĄááŻáśá¸ááźáŻááąáááşá áááşá¸áááŻáˇáááş áááŻá¸áááŻá¸áážááşá¸áážááşá¸ ááŻáášáááááşá¸ááźááˇáş áá˝á˛ááźáŹá¸áááş - GitLab áá˝ááş áááşá¸áááş áááŻááŤáá áşááŻáážááˇáşáá°ááąáŹáşáááşá¸ developer áá ááşáá˝ááş áááşá¸áááş ááŽá¸ááźáŹá¸áááąáŹááťááşáá áşááŻáĄáá˝ááş áááŻááşáá˝á˛áá áşááŻáážááˇáşáá°áááşá áĄáąáŹááşááŤáĄáááˇáşáá áşááŻáááş ááąáŤááşá¸á ááşáááˇáş áĄá áááşáĄáááŻááşá¸ááťáŹá¸ááźá áşáááşá
á¤áááşáážáŹ dockerized-app á áĄááźáąáŹááşá¸áĄááŹááťáŹá¸ áĽáááŹáá áşááŻááźá áşáááşá áĄá áááşáĄáááŻááşá¸áĄáŹá¸ááŻáśá¸á áĄááźááşáĄáážááşáááşáá˝ááşáážáŻááťáŹá¸áĄáá˝ááş áááŻáĄááşááąáŹ áá˝á˛áˇá ááşá¸áážáŻááŻáśá áśááťáŹá¸ááᯠááźááˇáşááąá¸áááˇáş Docker áááşá¸áá˝ážááşááᯠá¤ááąááŹáá˝ááş ááŹá¸áážáááŤáááşá áááąáŹááťááşááᯠáááşáááŻá áááşáááá˛áááŻáᏠáĄáááŻááťáŻááşááąáŹáşááźááŹá¸áá˛áˇ README.md áá áşááŻáážáááŤáááşá
á¤áá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş docker-compose áááŻááşáážá áşááŻááᯠáĄááŻáśá¸ááźáŻááŹá¸áááşá áĄáááˇáşáááˇáş áá˝ážááˇáşáááşáááŻááşá áąáááşáĄáá˝ááş ááŻááşááąáŹááşáááşá developer áááş kernel áážááˇáşáĄááŻááşááŻááşááąáŹáĄááŤá áá°áááş Push áĄááźáąáŹááşá¸ááźáŹá¸ááťááşááťáŹá¸áááŻááááŻáĄááşáá˛á áá°áááş docker-compose áááŻááşáááŻáááŻá¸áážááşá¸á á˝áŹáá˝ááˇáşáááŻááşááźáŽá¸á áááŻáˇááźáąáŹááˇáşáĄáááşá¸áĄááźá áşááťáŹá¸áááŻááááşá¸áááşá¸ááŹá¸áááşá
Push áĄááááąá¸ááťááşááťáŹá¸áážááˇáş ááąáŤááşá¸á ááşá¸áááş áááŻáĄááşááŤáá áááŻáˇááąáŹááş docker-compose.yaml áážááˇáş docker-compose-push.yaml ááᯠá áááşáááŻááşááŤáááşá
docker-compose.yaml áážááˇáş docker-compose-push.yaml áááŻááşáá˝á˛áá˝ááş áážáááąááąáŹááźáąáŹááˇáşá virtual network áá áşááŻáááşá¸ááᯠáĄáááŻáĄááťáąáŹááş áááşááŽá¸ááŤáááşá
áĄá áááşáĄáááŻááşá¸ááťáŹá¸áááąáŹáşááźááťááşá á¤áĄááŹáááş áĄá áááşáĄáááŻááşá¸ááťáŹá¸ááᯠá áŻááąáŹááşá¸áááşáĄáá˝ááş ááŹáááşáážáááąáŹ áááŻáááŻáĄáááˇáşááźááˇáşááąáŹáááŻááşáá áşááŻááźá áşáááşá ááŽáážáŹ ááŹáá°á¸ááźáŹá¸áá˛á ááŽááąááŹáážáŹ Balancer áĄá áááşáĄáááŻááşá¸ááᯠááááşáááşááąá¸ááŤáááşá
áááşá¸áááş nginx áážááˇáş Docker socket ááᯠááŹá¸ááąáŹááşáááˇáş áĄáááşáááˇáşááŻááşááŹá¸áááˇáş Docker ááŻáśááźá áşáááşá áá˝ááşááááşááŹááťáŹá¸ááᯠáĄáá˝ááˇáşáĄááááşááŻááşááŹá¸áááˇáşáĄáá˝ááş Dynamicá nginx config ááᯠááźááşáááşááŻááşááąá¸ááŤáááşá ááťá˝ááşáŻááşáááŻáˇáááş áááááĄáááˇáş áááŻááááşá¸áĄáááşááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻá áĄá áááşáĄáááŻááşá¸ááťáŹá¸á áááŻááşáá˝ááşáážáŻááᯠááźááˇáşááąááŤáááşá
áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááşáááşá¸ááťááşáĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş .dev áááŻááááşá¸ - api.informer.dev ááᯠáĄááŻáśá¸ááźáŻáááşá .dev áááŻááááşá¸ááŤáážáááąáŹ áĄáááŽááąá¸áážááşá¸ááťáŹá¸ááᯠááąáŹáˇááşáá˛ááąá¸ááŹá¸áá°á á ááşáá˝ááşá¸á ááşáá˝ááş ááááŻááşááŤáááşá
áááŻáˇááąáŹááş configs ááťáŹá¸ááᯠáááąáŹááťááşáá áşááŻá áŽáááŻáˇ áá˝ážá˛ááźáąáŹááşá¸ááźáŽá¸ áááąáŹááťááşáĄáŹá¸ááŻáśá¸ááᯠáá áşááźááŻááşáááşáááşá¸ á áááşááŻááşááąáŹááşáááşá
áááşá¸ááᯠááááşáá áşááźááˇáş áááŻááşááąáŹáşááŤáá client áááş ááťá˝ááşáŻááşáááŻáˇá browser áááŻáˇáááŻááş balancer áááŻáˇ ááťá˝ááşáŻááşáááŻáˇ ááąáŹááşá¸áááŻáážáŻááźáŻááŻááşáááˇáş tool áá áşááťááŻá¸ááźá áşááźáąáŹááşá¸ ááąáŤáşáá˝ááşááŤáááşá
áááŻááááşá¸áĄáááşááᯠáĄááźáąááśá áááşáááˇáşáá˝ááşááááşááŹááᯠáááşááąáŹááşáááş áááŻáĄááşáááşááᯠááťáááşáá˝ááşááťážáŹááž ááŻáśá¸ááźááşáááşá
áááşá¸áááş á áŽááśáááˇáşáá˝á˛áá°áĄáááˇáşáááŻáˇ JS ááᯠááśáˇáááŻá¸ááąá¸áááˇáş nginx ááźá áşáááŻááşáááşá nginx áááş ááŻáśááťáŹá¸áááŻáááşáááˇáşááŻáśá áśááźááˇáş nginx áážááśáˇáááŻá¸ááąá¸ááąáŹ API áááŻáˇáááŻááş static áááŻááşááťáŹá¸ááᯠááśáˇáááŻá¸ááąá¸ááąáŹ nginx ááźááˇáşááŻááşááąáŹááşáááŻááşáááşá
ááŻáśá¸áááş áá˝ááşááááşááŹááťáŹá¸ááᯠvirtual network áá áşááŻáážááˇáşááťáááşáááşááŹá¸ááźáŽá¸ proxy ááąáŹááşáá˝ááşáá˝ááşáážááşááŹá¸ááźáąáŹááşá¸ááźááááşá
developer áá ááşáá˝ááş IP áááŻááááąáŹ container áááŻáááşáááşááąáŹááşáááŻááşáááşá áááŻáˇááąáŹáşáá°áĄááĄáŹá¸ááźááˇáşáááşá¸áááŻááťá˝ááşáŻááşáááŻáˇáĄááŻáśá¸áááźáŻááŤá áááşáá˝áąáˇáá˝ááş áááŻááşáááŻááşáááá˝áąáˇáááş ááááŻáĄááşááŤá
ááťá˝ááşáŻááşááĄáááŽááąá¸áážááşá¸ááᯠdockerize ááźáŻááŻááşáááş áĄáááşáĽáááŹááᯠááźááˇáşáážáŻáááˇáşááááşá¸á ááťá˝ááşááąáŹáˇáşáĄááźááşáĄáá áĽáááŹááąáŹááşá¸áá áşááŻáááş MySQL áĄáá˝ááşáááŹá¸áááş docker ááŻáśááźá áşáááşá
ááąáŹáşááąáŹáşáážáŻááşáá˝áąá¸ááŤáááşá ááŹá¸áážááşá¸ááťáŹá¸á á˝áŹáážáááŤáááşá áááŻáˇááąáŹáş áááşá¸áááŻááşááąáŹááşáááŻááşá á˝ááşá¸áááş áááˇáşáĄáŹá¸ ááąáŹááşáááşáá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻááŻááşáááşá¸á ááşáá˝ááş ááźá áşááąáŤáşááŹáááŻááşáááˇáş áááŻáĄááşááťááşááťáŹá¸á á˝áŹááᯠááźááˇáşáááşá¸ááąá¸áááŻááşáááşá áááşáĄááťáááşáá°á áááşá¸áááş áááşáá˛áˇáááŻáˇ áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáááşááᯠááŹá¸áááşááŤáá áááşá¸ááᯠáááşáááŻááşáááŻááş áĄááąáŹááşáĄáááşááąáŹáşááŹáá˝ááş ááźáżááŹáá áşá áŻáśáá áşááŹáážááááşáááŻááşáᯠááťá˝ááşáŻááşáááşááŤáááşá
Hub.docker.com áá˝ááş ááŻáśáá áşááŻáśááᯠáááŻááşáááŻááşáááşááąáŹááşáááŻááşáááˇáş ááąááŹáĄááźááşá¸ááᯠáááŻááşáááŻááşááąá¸áááˇáş github.com áážááˇáş áááˇáşááşááťáŹá¸ ááŤáááşáááşá
áááŻáˇáĄááźááş á¤áááŻáážáąáŹááşáááşá¸áá˝ááş áááŚá¸áĄá ááźáŻááźááşá¸áážááˇáş áĄáááŽááąá¸áážááşá¸á áááşááźááşá¸áááąáŹááşáááşááŻááşááąáŹááşááźááşá¸áĄáá˝ááş ááŹáááşáážáááąáŹ script docker-endpoint.sh áážáááŤáááşá
áááŻáˇáĄááźááş á¤áĽáááŹáá˝ááş áááşáááşá¸ááťááş ááááşá¸áážááşááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻá configuration ááŻááşáááş ááźá áşáááŻááşááźáąáážááááşá áá˝ááşááááşááŹáá áşááŻáááşá¸áááŻáĄááŻáśá¸ááźáŻáááˇáşáĄá፠áááŻáˇáááŻááş docker-compose áážáá áşáááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş MySQL áá˝ááş root áĄáá˝ááş docker áĄáá˝ááş áááŹá ááŹá¸áážááşáá áşáᯠáááşáážááşáááş áááŻáĄááşáááşáᯠááźáąáŹáááŻááşáááşá
ááťáááşá¸á ááŹá¸áážááşáá áşááŻáááşááŽá¸áááş áá˝áąá¸ááťááşáá˝ááˇáşáá áşááŻáážááááşá ááťá˝ááşáŻááşáááŻáˇáááş ááŻáśá¸á á˝á˛áá°áá áşáŚá¸ áááŻáĄááşáááşáᯠáááŻáááşá áĄááŻáśá¸ááźáŻáá°áĄáá˝ááş á ááŹá¸áážááşáá áşáᯠáááşáážááşáááş áááŻáĄááşááźáŽá¸ ááąááŹááąáˇá áşáá áşáᯠáááşááŽá¸áááş áááŻáĄááşáááşáᯠááťá˝ááşáŻááşáááŻáˇááźáąáŹááŤáááşá
ááťá˝ááşáŻááşáááŻáˇá áááąáŹááťááşááťáŹá¸áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áĄá ááźáŻááźááşá¸áĄáá˝ááş ááŹáááşáážáááąáŹ Dockerfile ááᯠáĄáááşá¸áááş ááąáŤááşá¸á ááşá¸ááŹá¸ááŤáááşá á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş áĄáááŽááąá¸áážááşá¸áĄááŻáśá¸ááźáŻáááˇáş ááŻáśá¸á á˝á˛áá°áĄáá˝ááˇáşáĄááąá¸ááťáŹá¸ááᯠáááŻá¸áážááşá¸á á˝áŹááťá˛áˇáá˝ááşáááş ááťá˝ááşáŻááşáááŻáˇááááŻáĄááşááťááşááťáŹá¸áážááˇáş ááťáááşáážáááŹá¸ááŤáááşá áááşá¸áááş áĄááŹáááşáá˝ááş áĄáááŽááąá¸áážááşá¸áá˝ááşáááŻá¸ááşááž ááąááŹááąáˇá áşáá áşááŻááᯠáááŻá¸áááŻá¸áážááşá¸áážááşá¸ áááşááŽá¸áááŻááşá áąáá˛áˇáááşá Ruby áĄáááŽááąá¸áážááşá¸ááťáŹá¸áá˝ááş ááąááŹááąáˇá áşááťáŹá¸ááᯠáááşááŽá¸ááźááşá¸á ááźááşáááşááźááşá¸áážááˇáş ááťááşááźááşá¸áĄáá˝ááş áĄááááˇáşááťáŹá¸áážááááşá
á¤áááşáážáŹ github.com áá˝ááş MySQL á ááŽá¸ááźáŹá¸ááŹá¸áážááşá¸áážááˇáş áááşáááŻáˇáá°ááźáąáŹááşá¸ áĽáááŹáá áşááŻááźá áşáááşá Dockerfile áááŻáá˝ááˇáşááźáŽá¸ install ááŻááşááŻáśááŻááşááŻáśáááŻááźááˇáşáááŻááşááŤáááşá
docker-endpoint.sh script áááş entry point áĄáá˝ááş ááŹáááşáážááááşá áááŚá¸áĄá ááťááŻá¸ááťáááşáĄáá˝ááşá¸á áĄááťááŻáˇááąáŹááźááşáááşáážáŻááŻááşááąáŹááşááťááşááťáŹá¸ áááŻáĄááşááźáŽá¸ á¤ááŻááşááąáŹááşáážáŻááťáŹá¸áĄáŹá¸ááŻáśá¸ááᯠáááŚá¸á ááá áşáá˝ááş áááˇáşáá˝ááşá¸ááŹá¸áááşá
ááŻááááĄáááŻááşá¸ááᯠáááşáá˝áŹá¸ááĄáąáŹááşá
áĄáááşá¸áĄááźá áşááŻááşááťáŹá¸ááᯠááááşá¸áááşá¸áááş gitlab áááŻáˇ ááźáąáŹááşá¸áá˛áˇáááşá áááşá¸áááş áĄááźááşáĄáŹááŻáśááśá áá áşááŤáážáááąáŹ áĄááąáŹáşááąá¸ áĄáŹá¸ááąáŹááşá¸áááˇáş á áá áşáá áşááŻááźá áşáááşá
Gitlab áĄá áááşáĄáááŻááşá¸áá áşááŻáááş Gitlab CI ááźá áşáááşá áááşá¸áááş áááˇáşáĄáŹá¸ ááŻááşááąá¸áááŻáˇáážáŻá áá áşáĄáŹá¸ á áŻá ááşá¸áááş áááŻáˇáááŻááş áĄáááŻáĄááťáąáŹááşá ááşá¸áááşááźááşá¸ááᯠááŻááşááąáŹááşáááş ááąáŹááşáááşáá˝á˛áá˝ááş áĄááŻáśá¸ááźáŻáááˇáş áá˝ážááşááźáŹá¸ááťááşááťáŹá¸ááᯠáááşáááŻááşááąáŹáşááźáááş áá˝ááˇáşááźáŻáááşá
Gitlab CI 2 ááᯠáĄá
áŽáááşááśááŤá
ááᯠááťá˝ááşáŻááşáááŻáˇáááş Gitlab CI áááŻáá˝ááˇáşáááş áááŻáĄááşáááşááťáŹá¸ááᯠááźááˇáşáážáŻááŤáááşá Gitlab CI ááᯠá áááşáááşáĄáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş áááąáŹááťááşá áĄááźá áşáá˝ááş .gitlab-ci.yml áááŻááşááᯠááŹá¸áááş áááŻáĄááşááŤáááşá
á¤ááąááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş á ááşá¸áááşáážáŻá ááźááˇáşááťááşáážáŻáá˛áˇáááŻáˇááąáŹ ááźááşáááşááťáŹá¸á áááşáááŻááşááŻááşááąáŹááşáááŻááźáąáŹááşá¸ ááąáŹáşááźááŹá¸ááŤáááşá
ááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşáŻááşáááŻáˇá áĄáááŽááąá¸áážááşá¸á docker-compose áááşááąáŹááşáážáŻááᯠáááŻááşáááŻááşááąáŤáşáááŻááąáŹ script ááťáŹá¸ááᯠááŻááşááąáŹááşááŤáááşá ááŤá backend áá˛áˇ áĽáááŹáá áşááŻááŤá
ááąááŹááąáˇá áşáááŻááźáąáŹááşá¸áá˛áááşáážááˇáş á ááşá¸áááşáážáŻááťáŹá¸ááŻááşááąáŹááşáááş áá˝ážáąáˇááźáąáŹááşá¸ááźááşá¸ááťáŹá¸ááᯠááŻááşááąáŹááşáááş áááŻáĄááşáááşáᯠááťá˝ááşáŻááşáááŻáˇááźáąáŹááŤáááşá
scripts ááťáŹá¸áááŻáážááşáááşá á˝áŹááŻááşááąáŹááşááźáŽá¸ error code áááźááşááŤáá system áááş deployment áááŻááááĄáááˇáşáááŻáˇááąáŹááşáážááá˝áŹá¸áááşááźá áşááŤáááşá
ááźááˇáşááťááşááźááşá¸áĄáááˇáşááᯠáááşáážááĄáááˇáşáá˝ááş áĄááąáŹááşáĄáááşááąáŹáşááąáŹááşáá˝ááşááťááşáážááááşá á ááşáááşááźááşá¸ááážáááąáŹ ááźááşáááşá áááşááźááşá¸ááᯠááťá˝ááşáŻááşáááŻáˇ áá áŽá ááşááŹá¸ááąá
ááťá˝ááşáŻááşáááŻáˇáááş áá˝ááşááááşááŹáĄáŹá¸ááŻáśá¸ááᯠáĄáááşá¸áĄááťááş ááźážáááşá¸áááşááźáŽá¸ á ááşá¸áááşááąá ááş ááááĄáááˇáşáá˝ááş á áŻááąáŹááşá¸ááŹá¸ááąáŹ áá˝ááşááááşááŹáĄáŹá¸ááŻáśá¸ááᯠáááşááśá ááźážááˇáşáááşááŤáááşá
áááşáážá ááźáąáŹááşá¸áá˛áááŻááşááąáŹ áááşáááşá¸ááťááşáĄáá˝ááş developer ááž ááąá¸ááŹá¸ááŹá¸ááąáŹ ááąááŹááąáˇá áş ááźáąáŹááşá¸áá˝ážáąáˇáážáŻááťáŹá¸ááᯠááŻááşááąáŹááşááźááŤá ááŻáˇá
áááşá¸ááᯠááŹá ááŹááŹááá˝á˛áá˝ááşáᏠáĄááŻáśá¸ááťáááˇáşááźáąáŹááşá¸ áááááźáŻááŤá
áĄááźáŹá¸áĄáááŻááşá¸áĄáááşááźáąáŹááşá¸áááˇáşáĄá፠áĄááŻááşáááŻááşááŤá
áĄáááŻááşá¸áĄáááşááťáŹá¸áá áşááťážáąáŹááş ááźááˇáşááťááážáŻááťáŹá¸ááᯠá áŻá ááşá¸áááŻááşáááşá
áááşá¸ááᯠáááşááśá áŻá ááşá¸áááşá ááťá˝ááşáŻááşáááŻáˇáááş Gitlab Runner ááᯠáááˇáşáá˝ááşá¸áááş áááŻáĄááşááŤáááşá
á¤áĄááŻáśá¸áááşááŻáśááᯠGolang ááźááˇáşááąá¸ááŹá¸ááŹá¸áááşá áážáŽáááŻáážáŻááááŻáĄááşááąáŹ Golang ááášááŹáá˝ááşáá˝áąáˇáááąáˇáážááááˇáşáááŻááşáá áşááŻáááşá¸ááźá áşáááşá
á áááşááťáááşáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş Gitlab Runner ááᯠá áŹáááşá¸áá˝ááşá¸áááşá
ááťá˝ááşáŻááşáááŻáˇáááş Gitlab áááşáĄááşááŹááąáˇá áşáá˝ááş ááąáŹáˇááᯠáááşááśááážáááŤáááşá
áááŻáˇááąáŹááş command line áá˝ááş initialization command ááᯠááąáŤáşáááşá
áááŻááşááŹááąáŹáˇááŻááşáá˝ááş Gitlab Runner ááᯠááźááşáááşáááşáážááşááźááşá¸ (Shellá Dockerá VirtualBoxá SSH)
Gitlab Runner áážá ááŻááşáááş .gitlab-ci.yml áááşáááşááąáŤáşáá°áááşá commit áá áşááŻá áŽáááŻááşá¸áá˝ááş ááŻááşááąáŹááşáááşááźá áşáááşá
áááşáĄááşááŹááąáˇá áşáážá Gitlab áá˝ááş áááşá¸ááᯠáááşáááŻáˇááźááşáááŻááşááááşá¸á GItlab CI ááťáááşáááşááźáŽá¸ááąáŹááşá ááťá˝ááşáŻááşáááŻáˇáá˝ááş áááşáážááááşááąáŹááşáážáŻáĄááźáąáĄááąáĄáŹá¸ ááźááááˇáş áĄááśáá áşááŻáážááááşá
ááźáŽá¸áá˛áˇááąáŹ 4 áááá áşáááˇáşá á ááşá¸áááşáážáŻááťáŹá¸áĄáŹá¸ááŻáśá¸ááᯠáĄáąáŹááşááźááşááźáŽá¸ ááźáżááŹáá áşá áŻáśáá áşááŹáááźá áşá áąáᲠáááááááşáá áşááŻááźáŻááŻááşááŹá¸áááşááᯠááťá˝ááşáŻááşáááŻáˇáá˝áąáˇááźááşáááŤáááşá
áááşááąáŹááşáážáŻááťáŹá¸ááᯠáĄááąá¸á áááşááźááˇáşáážáŻáááŻááşááŤáááşá ááŽááąááŹáážáŹ ááźááşáááşáážá áşáᯠááźááşáááşá¸ááźáŽá¸áá˝áŹá¸ááźáŽáááŻáˇ ááźááşááŤáááşá áĄáááˇáşá á áşááąá¸áážáŻáĄááźáąáĄááąáážááˇáş áĄááŻáśá¸ááťáážáŻáĄááźáąáĄááąá
áĄáááşá ááťá˝ááşáŻááşáááŻáˇáááş ááŽá¸ááźáŹá¸áááşááąáŹááşáážáŻááᯠáážáááşááŤáá .gitlab-ci.yml áĄá ááŻááşáááşá¸á ááşáá˝ááş á áááşáá˛áˇááąáŹ áá˝ááşáááŻá¸ááşáĄáá˝ááşáážááááşááźá áşáááşá
á¤áááşáážáŹ ááťá˝ááşáŻááşáááŻáˇá ááŻááşááŻááşá ááŹááşáááşá¸ááŻáśá áśááźá áşáááşá áĄáąáŹááşááźááşáá˛áˇ ááźááŻá¸áááşá¸áážáŻáá˝áą áážáááąáááşáááŻáˇ ááźááşááŤáááşá á áŹááąá¸áá˝á˛ááťáŹá¸ááᯠáááşáá˝ááşá¸ááąáŹáĄááŤáá˝ááş áááşá¸áááŻáˇáááş ááąáŹááşáá áşáááˇáşáááŻáˇ ááá˝ážáąáˇáᲠáĄáááˇáşáááˇáşááąáŹ ááŻááşááᯠáĄááşááááşáááŻááşááŤá
docker ááᯠáĄááąáŹááşáĄáááşááąáŹáşáá˛áˇáĄá፠ááŹááşááŻáśáážáŹ áááşáááŻááźáżááŹáá˝áąááᯠááźáąáážááşá¸áá˛áˇáá˛á ááťá˝ááşáŻááşáááŻáˇáá áá áşáá˝ááş áĄá áááşáĄáááŻááşá¸ááťáŹá¸ááŤáááşááźáŽá¸ á áá áşáá áşááŻááŻáśá¸áááŻááşáᲠáááŻáážáąáŹááşáážáŻáá˝ááş áá˝ááşá¸ááśááŹá¸ááąáŹ áĄá áááşáĄáááŻááşá¸áĄááťááŻáˇáááŻáᏠááźááşáááşá áááşáááş áááŻáĄááşááŤáááşá
ááŤáááŻááŻááşáááŻáˇá áĄááŹáĄáŹá¸ááŻáśá¸ááᯠááŽá¸ááźáŹá¸ folders áá˝áąáĄááźá áş áá˝á˛ááŻááşááááşá
ááŤáááŻááŻááşááźáŽá¸ááąáŹááşá Docker-compose áááş áááŻááŤáá áşááŻá áŽáĄáá˝ááş áááşá¸ááááŻááşáááŻááşáá˝ááşáááşááąááŹááᯠáááşááŽá¸ááźáŽá¸ áááşá¸ááĄáááşááŽá¸ááŹá¸ááťááşá¸ááĄá áááşáĄáááŻááşá¸ááťáŹá¸ááᯠáááźááşááááˇáşáĄááťááşáážááˇáş ááźáżááŹáá áşááŻáážááá˛áˇáááşá
áá˝áŹá¸ááŹáááş Docker áá˝ááş áá˝ááşáááşááᯠáááŻááşáááŻááşáááşááŽá¸áá˛áˇáááşá Docker-compose áá˝ááş áááşáááş á¤áááąáŹááťááşáĄáá˝ááş áááŻáá˛áˇáááŻáˇááąáŹ áá˝ááşáááşááᯠáĄááŻáśá¸ááźáŻáááˇáşáááşáᯠááąá¸ááŹá¸ááŹá¸áááşá
áááŻáˇááźáąáŹááˇáşá ᤠmesh áážá áááşááąáŹáĄá áááşáĄáááŻááşá¸áá áşááŻá áŽáááş system ááĄááźáŹá¸áĄá áááşáĄáááŻááşá¸ááťáŹá¸áááŻááźááşáááşá
ááąáŹááşááźáżááŹáážáŹ áááąáŹááťááşááťáŹá¸á á˝áŹááźáŹá¸áá˝ááş áĄáááˇáşáá˝á˛ááąááźááşá¸áááşááźá áşáááşá
ááŤáá˝áąáĄáŹá¸ááŻáśá¸áᏠáážáááźáŽá¸ ááŻááşááŻááşáážáŻáá˛áˇ áĄááŽá¸á ááşááŻáśá¸ááźá áşááŹááźáąáŹááˇáş WEB áážáŹ ááąááŹáááŻááşá¸ááŻáśá¸áá˛áˇ port 80 áááŻáˇáááŻááş 443 ááᯠáĄááŻáśá¸ááźáŻááŹááąáŹááşá¸ááŤáááşá
ááŤááᯠáááşáááŻááźáąáážááşá¸áá˛áˇáá˛á ááťá˝ááşáŻááşáááŻáˇáááş ááźáŽá¸ááŹá¸ááąáŹ áááąáŹááťááşááťáŹá¸áĄáŹá¸ááŻáśá¸áá˝ááş Gitlab Runner áá áşáŚá¸ááᯠááŹáááşááąá¸áĄááşáá˛áˇáááşá
Gitlab áááş áááˇáşáĄáŹá¸ ááźááˇáşááąááŹá¸ááąáŹ Gitlab Runners áĄááťáŹá¸áĄááźáŹá¸ááᯠá áááşáá˝ááˇáşááźáŻáááşá áááşá¸áááş áĄááŻááşáĄáŹá¸ááŻáśá¸ááᯠááááŻááá˛ááźá áşá áąááźáŽá¸ áááşá¸áááŻáˇááᯠáá áşááŻááźáŽá¸áá áşáᯠááŻááşááąáŹááşá áąáááşááźá áşáááşá
áĄáááşááźáżááŹááťáŹá¸áááŻáážáąáŹááşáážáŹá¸áááşá ááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşáŻááşáááŻáˇááááąáŹááťááşáĄáŻááşá áŻááᯠááźáżááŹááážááᲠááťá˝ááşáŻááşáááŻáˇá volumes ááťáŹá¸áááŻááźáąáážááşá¸áááŻááşááąáŹ Gitlab Runner áá áşááŻáááŻáˇáááˇáşáááşááŹá¸áááşá
ááťá˝ááşáŻááşáááŻáˇáááş nginx-proxy ááᯠááŽá¸ááźáŹá¸á áááşáááˇáş ááŹááşáá˝ážááşá¸áĄááźá áşáááŻáˇ áá˝ážáąáˇááźáŽá¸ áááşá¸áážá áááąáŹááťááşáĄáŹá¸ááŻáśá¸á ááá áşááşááťáŹá¸ááᯠááąá¸ááŹá¸áá˛áˇáááşá
ááťá˝ááşáŻááşáááŻáˇááááąáŹááťááşáá˝ááş áááŹá¸áá˝ááşáá áşááŻááŤáážáááźáŽá¸ ááťáááşáá˝ááşááťážáŹáá˝ááş áááąáŹááťááşáĄáááşááťáŹá¸ááᯠáĄááźáąááśááŹá¸ááąáŹ ááá áşááťáŹá¸á á˝áŹáážááááşá áááşá¸áááş áááŻááááşá¸áĄáááşááťáŹá¸ááźááˇáş ááąáŹááşáááş proxy ááźáŻááŻááşáááŻááşáááşá
ááťá˝ááşáŻááşáááŻáˇáááąáŹááşá¸áááŻááťááşááťáŹá¸áááş ááááşáááşá¸ 80 áážá áááŻááááşá¸áážááááˇáş ááąáŹááşááŹááźáŽá¸ á¤áááŻááááşá¸ááᯠáááşááąáŹááşáážáŻááąá¸áááˇáş áá˝ááşááááşááŹáĄáŻááşá áŻáá áşá áŻááś ááźáąáážááşá¸ááąá¸ááŤáááşá
áááźáŹá¸ááŹááźáżááŹáá˝áąáážááá˛á á¤áááşáážáŹ ááŻáśááąáĄáŹá¸ááźááˇáş áá˝ááşááááşááŹáĄáŹá¸ááŻáśá¸áááş root áĄááźá áş ááŻááşááąáŹááşáááşá áááşá¸áááş á áá áşá áááŽááťážááąáŹ root host ááźá áşáááşá
áááŻáˇááąáŹáşá áááşáááş áá˝ááşááááşááŹááᯠáááˇáşáá˝ááşá¸ááŤáá áááşá¸áááş root ááźá áşááŹá á¤áá˝ááşááááşááŹáá˝ááş ááťá˝ááşáŻááşáááŻáˇáááşááŽá¸áááˇáşáááŻááşáááş root ááŻááşáááŻááşáá˝ááˇáşááťáŹá¸ááᯠááážááááşááźá áşáááşá
áĄáááşá developer áááş áá˝ááşááááşááŹáá˛áááŻáˇ áááşááźáŽá¸ áááŻááşááťáŹá¸áááŻááŻááşááąá¸áááˇáş áá˝ááşááááşááŹáá˝ááş áá˝ááşááááşááŹáĄááťááŻáˇááᯠááźáŻááŻááşááŤáá áááŻáˇááąáŹááş áá˝ááşááááşááŹááž áá˝ááşáá˝áŹáá˝áŹá¸ááŤáá áááşá¸áááŻááşáááşá¸ááąáŹááşááŹáááşá¸áá˝ážááşáá˝ááş áá°áááşááąáŹááşáá˝ááˇáşááážáááąáŹ áááŻááşáá áşááŻáážááááşá
ááŤááᯠáááşáááŻááźáąáážááşá¸áááŻááşááá˛á áá˝ááşááááşááŹáĄáá˝ááşá¸áážááááˇáş áĄááŻáśá¸ááźáŻáá°ááťáŹá¸ááᯠáááşáááˇáşáááŻááşáááşá
áĄááŻáśá¸ááźáŻáá°ááᯠáááˇáşááąáŹáĄááŤáá˝ááş áááşáááˇáşááźáżááŹááťáŹá¸ ááąáŤáşááąáŤááşááŹááááşá¸á
áĄááŻáśá¸ááźáŻáá°áá áşáŚá¸ááᯠáááşááŽá¸ááąáŹáĄááŤá áĄáŻááşá ᯠID (UID) áážááˇáş áĄááŻáśá¸ááźáŻáá° ID (GID) áááŻáˇáááş áááźáŹáá ááááŻááşááŽááŤá
á¤ááźáżááŹááᯠááźáąáážááşá¸áááşáĄáá˝ááş áá˝ááşááááşááŹáá˝ááş ID 1000 áážáááąáŹ ááŻáśá¸á á˝á˛áá°ááťáŹá¸ááᯠááťá˝ááşáŻááşáááŻáˇ áĄááŻáśá¸ááźáŻááŤáááşá
ááťá˝ááşáŻááşáááŻáˇáááá ášá áá˝ááşá áááşá¸áááş developer áĄáŹá¸ááŻáśá¸ááŽá¸ááŤá¸ Ubuntu OS áááŻáĄááŻáśá¸ááźáŻáááˇáşáĄááťááşáážááˇáş áááŻááşáááŻááşááąááŤáááşá Ubuntu OS áá˝ááş áááááŻáśá¸áĄááŻáśá¸ááźáŻáá°áááş ID 1000 áážááááşá
ááŤáááŻáˇáážáŹ áĄá áŽáĄá ááşáážáááŹá¸á
Docker á áŹáá˝ááşá áŹáááşá¸ááᯠááźááşáááşááŤá áááąáŹááťááşáááş áááşááźá˝á á˝áŹ áá˝áśáˇááźááŻá¸ááąááźáŽá¸ á áŹáá˝ááşá áŹáááşá¸ááťáŹá¸ ááźáąáŹááşá¸áá˛ááąáááşá áá˝ááşáá˛áˇááąáŹ áážá áşá áááŻáˇáááŻááş ááŻáśá¸ááááˇáşá ááážááá˛áˇááąáŹ ááąááŹááťáŹá¸áááş áááźááşá¸ááźááşá¸ ááąááşááąáŹááşááťááŹáááşá
ááťá˝ááşáŻááşáááŻáˇááźáąáážááşá¸áá˛áˇááąáŹ ááźáżááŹáĄááťááŻáˇááᯠá áśáááşá¸áááşá¸ááźááˇáş ááźáąáážááşá¸ááźáŽá¸ááŹá¸ááźá áşááąáááşá
ááťá˝ááşááąáŹáş ááááşáᲠáááşááťážáąáŹááşááźáŽá¸ ááźááŻá¸áááŻááşáážáŻáᎠáááŻááşáááŻááşáá˝áŹá¸ááťááşááŤáááşá
áĽáááŹáá áşááŻáážáŹ Docker á Built-in ááášáááŹá¸ááᯠDocker Swarm ááŻááąáŤáşáááşáá Docker Swarm áááşá¸áááŹááᯠáĄááźáąááśá ááŻááşááŻááşáážáŻáá˝ááş áá áşá áŻáśáá áşááŹááᯠá áááşáááŻááŤáááşá
ááąáŤááşáááˇáş áá˝ááşááááşááŹááťáŹá¸áááş áá áşááŻáśá¸ááťáŹá¸áážááˇáş áĄááŻááşááŻááşááŹáá˝ááş áĄáááşáááźáąááŤá áááŻáĄá፠áá áşááŻáśá¸ááťáŹá¸ááᯠááŽá¸ááźáŹá¸áá˝á˛ááŹá¸áááşá áááşá¸áááŻáˇáááş áá˝ááşááááşááŹááťáŹá¸áá˝ááş ááźááˇáşááťá˛ááąáááşá áĄááŻááşááťáŹá¸áá˛áážáá áşááŻáážáŹ áááşáĄááşááŹááąáˇá áşáážááááˇáş áážááşáááşá¸ááťáŹá¸ááᯠáĄáááşááźáąááźáą áááşááąáŹááşáááŻááşá áąáááşááźá áşáááşá
source: www.habr.com