ááááá¯á¶áž áá®á¡áá¯áá®áááºážáááºážá áá¬ááŒá
áºáá¬áá² á¡áá»ááºááá·áºááŸá
áºáá»ááºá¡ááºáẠ?
ááá¯ážááŸááºážáá±á¬á áá¬ážá¡á¬ážááŒáá·áºá á€á á¬ááœááºá á¬áááºážááẠáá±ááºáá®á¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááœáẠá¡áá»á¬ážáá¯á¶ážááŒá¯á¶ááœá±á·ááá±á·ááŸáááá·áº ááŒá¿áá¬áá»á¬ážááŸáá·áº á¡áá±á·á¡áá»áá·áºáá»á¬ážá¡ááŒá±á¬ááºáž developer áá»á¬ážááŸáá·áº DevOps á¡ááºáá»ááºáá®áá¬áá»á¬ážá¡á¬áž á¡áááá±ážááŒááºážááŒáá·áº áá°áá®ááŒááºážááŒáá·áº SaaS á¡ááºááºáá®áá±ážááŸááºážáá»á¬áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠááá¯ážááŸááºážá á±ááẠáá®ááá¯ááºážáá¯ááºáá¬ážáááºá
á á¬ááœááºá á¬áááºážááᯠHeroku ááááºáá±á¬ááºážá developer áá»á¬ážá áááºáá®ážáá¬ážáááºá
Twelve-Factor App ááẠáááºááá·áºáááá¯ááááºážáááºážáá¬áá¬á
áá¬ážááŒáá·áº áá±ážáá¬ážáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážááŸáá·áºáááᯠáá»á±á¬áá±á¬ááºáá±á¬ááºáá¶áááºáá±á¬ááºááŸá¯áá»á¬áž (áá±áá¬áá±á·á
áºáá»á¬ážá áááºáá±á·áá»áºáá»á¬ážá áááºááŸáºáá»á¬ážá á
áááº) ááá¯á·ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
á€áááºážá áá áºááá¯á¡ááŒá±áá¶ááá·áºá¡áá»ááºáá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºážáá»á¯ááºá¡á¬ážááŒáá·áº-
- Codebase - áá¬ážááŸááºážááááºážáá»á¯ááºááŸá¯ááœáẠááŒá±áá¬áá¶áá¬ážáá±á¬ codebase áá áºáᯠ- ááŒáá·áºáá»ááºááŸá¯áá»á¬ážá áœá¬
- ááŸá®ááá¯ááŸá¯ - ááŸá®ááá¯ááŸá¯ááᯠá¡ááá¡áááºážááŒá±áá¬ááŒá®áž áá®ážááŒá¬ážááœá²áá¯ááºáá«á
- configuration áá»á¬áž - runtime ááœáẠconfiguration ááá¯ááááºážáááºážáá«á
- áá¶á·ááá¯ážáá°áá®ááŸá¯áá»á¬áž - áá¶á·ááá¯ážáá±ážááá·áºáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠplug-in á¡áááºážá¡ááŒá áºáá»á¬ážá¡ááŒá Ạááá·áºááœááºážá ááºážá á¬ážáá«á
- áááºáá±á¬ááºáá«á ááœáŸááºáá«á ááŒá±ážáá«á - á ááºážáá±ážááœá²ááŸáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ á¡ááá·áºáá»á¬ážááᯠá¡ááá¡áá» ááœá²ááŒá¬ážáá«á
- áá¯ááºáááºážá ááºáá»á¬áž - á¡ááá®áá±ážááŸááºážááᯠáá áºáᯠááá¯á·ááá¯áẠáá áºáá¯áááºááá¯áá±á¬ ááá¯ááºáá¶áá²á·áá¯ááºáááºážá ááºáá»á¬ážá¡ááŒá Ạáá¯ááºáá±á¬ááºáá«á
- Port binding - port binding ááŸáá áºááá·áº áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááºááá¯á·ááŒááºážá
- á ááºááŒáá¯áẠ- áá¯ááºáááºážá ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºááá»áŸá±á¬ááºááœáŸá¬ááᯠá áá±ážáá»áá«á
- ááá«áá¯á¶áž - áá»ááºááŒááºá áœá¬á áááºááŒááºážááŸáá·áº ááá·áºááŸááºážáá±á¬ááááºááŒááºážááá¯á·ááŒáá·áº áá¯á¶ááŒááºá áááºáá»áááŸá¯ááᯠá¡ááŒáá·áºáá¯á¶ážááá°áá«á
- á¡ááá®áá±ážááŸááºáž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯/áá¯ááºáá±á¬ááºááŸá¯ áá°áá®ááŸá¯ - áááºáááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á á¡ááá·áºááŒáŸáá·áºáááºááŸá¯ááŸáá·áº áá¯ááºáá¯ááºááŸá¯áááºáááºážáá»ááºááᯠáááºááá¯ááºááá»áŸ áá°áá®á¡á±á¬ááºáá¬ážáá«á
- áá áºáá¯ááºááŒááºážá - ááŸááºáááºážááá¯ááŒá áºáááºáá»á¬ážáá á®ážááŒá±á¬ááºážá¡ááŒá áºááŒáá·áºááŸá¯áá«á
- á¡á¯ááºáá»á¯ááºáá±ážáá¯ááºáááºážáá»á¬áž - áá®ážááá·áºáá¯ááºáááºážá ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á á®áá¶ááá·áºááœá²áá±áž/ á á®áá¶ááá·áºááœá²ááŸá¯áá¬áááºáá»á¬ážááᯠáá±á¬ááºááœááºáá«á
á¡á±á¬ááºáá«á¡áááºážá¡ááŒá áºáá»á¬ážá០á¡áá»áẠ12 áá»ááºá¡ááŒá±á¬ááºáž ááá¯ááá¯ááááŸáááá¯ááºáááº-
-
ááá¬ážáááºá¡áááºážá¡ááŒá Ạ- á á¬áááºááááºá -
habr ááá¯ááºáá¬áá±á¬ááºážáá«ážá á¡áá»ááºááá·áºááŸá áºáá»ááºá¡ááºáẠ- ááá¬ážáááºáá¬áá¬ááŒáẠ-
habr ááá¯ááºáá¬áá±á¬ááºážáá«ážá 7 Factor App ááœáẠáá»á±á¬ááºáá¯á¶ážáá±áá±á¬ á¡áá»áẠá áá»áẠ- áááºážááá¯á·ááᯠááá¯ážáááºá á±ááẠáááºááœááºáá»ááºááŒáá·áº á¡áá»áẠáá áá»ááºááᯠá¡áá áºááááºááŒáá·áºááŸá¯áá«á
Blue-Green ááŒáá·áºáá»ááºááŒááºážáá°ááẠá¡áááºáááºážá
Blue-Green ááŒáá·áºáá»ááºááŒááºážááẠá¡ááºááá®áá±ážááŸááºážáá áºáá¯áá¶ááá¯á· áá±ážááá¯á·ááá·áºáááºážáááºážáá áºáá¯ááŒá áºáááºá áá¯ááºáá¯ááºááŸá¯ á¡áá¯á¶ážáá±á¬ááºáááºááẠáá°á·á¡ááá¯ááºážááœáẠáááºááá·áºááŒá±á¬ááºážáá²ááŸá¯áá»áŸ áááœá±á·áááá·áºáááºážááŒáá·áºá áá áºáááºážááá¯ááá±á¬áº áá¯áááŒáá·áº á¡ááá®áá±ážááŸááºážááᯠááŒáá·áºáá»ááºááŒááºáž ááŒá áºáááºá áá»áá»áááº.
ááá¹áááẠBG Deploy á¡á á®á¡á ááºááẠá¡á±á¬ááºáá±á¬áºááŒáá«áá¯á¶ááœáẠááŒáá¬ážááá·áºá¡ááá¯ááºážááŒá áºáááºá
- á¡á ááœáẠáá°áá®áá±á¬áá¯ááºá á¡ááá®áá±ážááŸááºážá ááá±á¬áá»ááºá áá°áá®áá±á¬ áá¯ááºá áá»áááºááœááºáá»áŸá¬ááŸááá±á¬ áá¯ááºááá¯ááºážááá¯ááºáᬠáá¬áᬠá áᯠááŸááááºá
- Router ááẠáááŠážááœáẠáá¬áá¬áá»á¬ážáá²á០áá±á¬ááºážááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠááœáŸááºááŒá¬ážááẠ(á áááºážáááºážáá±á¬).
- áááºáá¶áá¯ááºáá±ááẠááá¯á¡ááºááá·áºá¡áá»áááºááœááºá ááá±á¬áá»ááºáá áºáá¯áá¯á¶ážááᯠá¡ááŒá¬ážáá¬áá¬áá áºáá¯áá±á«áºááœáẠá¡ááºááááºáá¯ááºáá±ááẠ(ááŒá¬áá±á¬) áááºááá·áºáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááá¯áááᯠáá¯ááºáá±á¬ááºáá±áá«áááºá
- áá¯ááºááœáá·áºááŒá®ážáá±á¬áẠá¡ááŒá¬ áá¬áá¬ááᯠáá¯á¶ážá ááœááºážáá¶áá¬ážááŒá®ážá router á០ááŒá±á¬ááºážááẠá¡áááá·áºáá±ážáá¬ážáááºá á áááºážáááºážáá±á¬ á¡áá±á«áº ááŒá¬áá±á¬ áá¬áá¬á
- ááá¯á¡áá« áá¯á¶ážá áœá²áá°áá»á¬ážá¡á¬ážáá¯á¶ážááẠáá¯ááºááŒáá·áº áá¯ááºáá±á¬ááºáá±ááá·áº ááááºááᯠááŒááºááœá±á·ááááºá ááŒá¬áá±á¬ áá¬áá¬á
- á¡áá»áááºáá áºáá¯á á áááºážáááºážáá±á¬ áá¬áá¬ááẠááŒáá·áºáá»ááºááŸá¯ áá¡á±á¬ááºááŒááºáá«á á¡áááºáááá¹áá°á¡ááŒá Ạáá±á¬ááºááœááºáá«áááºá ááŒá¬áá±á¬ áá¬áá¬ááŸáá·áº áá»áá¯á·ááœááºážááŸá¯ááŸáá·áº áá»áá¯á·ááœááºážááŸá¯áá»á¬ážááŸááá±á¬á¡áá«á Router ááẠá¡áá¯á¶ážááŒá¯áá°á á®ážáááºážááŸá¯ááᯠááŒááºááŒá±á¬ááºážáá±ážáááºá á áááºážáááºážáá±á¬ áááºááŒáááºáá±á¬áá¬ážááŸááºážáá±á¬ááºážááŒáá·áº áá¬áá¬ááŸáá·áº áá¯ááºá¡áá áºááᯠááŒááºáááºááŒááºáááºááŒááºážááŸáá·áº á ááºážáááºááŒááºážá¡ááœáẠáá±ážááá¯á·áá«áááºá
- áá¯ááºáááºážá ááºáá¡áá¯á¶ážááœááºá áááºážááᯠá¡áá¬ážáá°áá¯á¶á á¶ááŒáá·áº ááœááºážáá¶áá¬ážáááºá á áááºážáááºážáá±á¬ áá¬áá¬á áááºážááᯠá¡ááºááááºáá¯ááºááŒá®ážáá±á¬ááºá router ááẠáá±á¬ááºážááá¯áá»ááºá á®ážáááºážááŸá¯ááᯠááŒááºááŒá±á¬ááºážáá±ážáááºá á áááºážáááºážáá±á¬ áá¬áá¬á
á¡á¬ážáá¯á¶ážá á¡áááºážááŒáá·áºááá¯á·áá±á¬ááºážááŒá®áž ááááá
áºáá»ááºááŸá¬ áá¬ááŒá¿áá¬á០áááŒá
áºááá·áºáá«áá°ážá
ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·ááẠáá±ááºáá
áºááá¹áá¬ááœáẠáá±ááá¯ááºáá±á¬ááŒá±á¬áá·áºá ááá¹ááááºá¡á
á®á¡á
á¥áºááœáẠáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž áá¯ááºááá¯ááºážááá¯ááºáá¬ááŒá±á¬ááºážáá²ááŒááºážááá¯ááºáᬠááœá±ážáá»ááºááŸá¯ááẠáá»áœááºá¯ááºááá¯á·ááŸáá·áº áááá¯ááºáá®áá«á á¡áá»ááºá¡áááºááᯠá¡áá¯áá² ááŸááºáááºážáááºáá«á áá±á¬ááºá០ááŒááºááœá¬ážáááºá
ááá±á¬ááºážáá±á¬á¡ááŒá¶áá¬ááºáá±á¬ááºáž
ááœá: á¡á±á¬ááºáá±á¬áºááŒáá«ááá°áá¬áá»á¬ážááẠáá»áœááºá¯ááºá¡áá¯á¶ážááŒá¯áá±á¬ á¡áá¯á¶ážá¡áá±á¬ááºáá»á¬áž/áááºážá áá áºáá»á¬ážááᯠááŒááááºá áááºááẠá¡áá¬ážáá°áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒáá·áº á¡ááŒá¬ážááœá±ážáá»ááºá áá¬áá»á¬ážááᯠáá¯á¶ážáá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
á¥ááá¬á¡áá»á¬ážá á¯ááẠPHP ááŸáá·áº Docker ááá¯á·ááŸáá·áºá¡áá° web development (áá«á á¡á¶á·á¡á¬ážááá·áºá áá¬) ááŸáá·áº áá áºáááºážááá¯ááºáá áºáááºáž áááºá ááºáá±áááá·áºáááºá
á¡á±á¬ááºáá±á¬áºááŒáá«á á¬ááá¯ááºáá»á¬ážááẠáááá»áá±á¬á¥ááá¬áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯á á¡ááŒá±á¬ááºážáááºážáá»á¬ážá¡áá¯á¶ážááŒá¯ááŒááºážááá¯ááºáᬠááá¯ážááŸááºážáá±á¬áááºááœá±á·áá±á¬áºááŒáá»ááºááᯠáá±ážá áœááºážáááºá á€á¡ááŒá±á¬ááºážá¡áá¬ááŸáá·áºáááºáááºá áá®á¡áá¯áá®ááá¯ááá¯áááŸáááá¯áá«áá áá°áááºážá¡áááºážá¡ááŒá áºááá¯á· á¡áááºáá±á¬áºááŒáá«ááá·áºááºáá»á¬ážááᯠááá¯ááºáá¬áá«á
1. Codebase
ááá¯ááºáá»á¬ážááᯠáá¬áá¬áá»á¬ážááá¯á· áá áºááŒáááºáááºáž á¡ááºáá¯ááºáá¯ááºááẠFTP ááŸáá·áº FileZilla ááá¯áá¯á¶ážáá«á áá¯ááºáá¯ááºááŸá¯áá¬áá¬ááŸááœá²á á¡ááŒá¬ážáááºááá·áºáá±áá¬ááœááºá០áá¯ááºááᯠáááááºážáááºážáá«ááŸáá·áºá
ááá±á¬áá»ááºááœáẠáá¯ááºá¡ááŒá±áá¶áá áºáᯠá¡ááŒá²ááŸáááá·áºáááºá ááá¯ááá¯áááºááŸá¬ áá¯ááºá¡á¬ážáá¯á¶ážááẠáá áºáá¯á០áááºážáááºáá¬ááŒááºážááŒá áºáááºá git ááá¯ááŸá±á¬ááºááŸá¯á áá¬áá¬áá»á¬áž (áá¯ááºáá¯ááºááŒááºážá á¡ááá·áºáááºááŸááºááŒááºážá test1á test2...) áá¯á¶ááá¯ááŸá±á¬ááºááŸá¯áá áºáá¯á á¡ááá¯ááºážá¡áááºáá»á¬ážááŸáá¯ááºááᯠá¡áá¯á¶ážááŒá¯áááºá á€áááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá®ááœááºááŸá¯ááᯠáááŸáá á±áááºá
2. ááŸá®ááá¯ááŸá¯
ááá±á¬áá»ááºá á¡ááŒá áºááá¯á· ááá¯ááºááá¯áẠááá¯ááºááœá²áá»á¬ážááŸá á á¬ááŒáá·áºááá¯ááºá¡á¬ážáá¯á¶ážááᯠáá±á«ááºážáá¯ááºáá¯ááºáá«á áá¯ááºá¡áá áºááᯠá á¬ááŒáá·áºááá¯ááºá áááºááŸááá¬ážááŸááºážááŒáá·áº ááá¯ááºááœá²ááá¯á· ááœáŸá²ááŒá±á¬ááºážááŒááºážááŒáá·áº ááá¯ážááŸááºážá áœá¬ á¡ááºááááºáá¯ááºáá«á áá±á¬ááºááẠáááºáá±á¬ááºááŸá¯ 20 áᯠáá¯ááºáá±á¬ááºáá±ááá·áº host server ááœáẠááá¯á¡ááºáá±á¬ utilities á¡á¬ážáá¯á¶ážááᯠinstall áá¯ááºáá«á
ááá±á¬áá»ááºáá
áºáá¯ááœáẠááŸááºážááŸááºážáááºážáááºáž áá¬ážáááºááá¯ááºáá±á¬ ááŸá®ááá¯ááŸá¯á
á¬áááºážáá
áºáᯠá¡ááŒá²ááŸáááá·áºááẠ(ááŸá®ááá¯ááŸá¯á¡á áá»áœááºá¯ááºááá¯ááá¯áááºááŸá¬ áááºáááºážáá»ááºááŒá
áºáááº)á ááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠá¡ááá¡áááºáž áááºááŸááºááŒá®áž áá®ážááŒá¬ážáá¬ážááááºá
á¥ááá¬áá
áºáá¯á¡áá±áá²á· áá°ááŒáá·áºáá¡á±á¬áẠáá±ážáá±ážááᬠО Docker.
áá±ážáá±ážááᬠâ PHP ááœáẠlibraries áá»á¬ážááᯠááá·áºááœááºážááá¯ááºá á±ááá·áº package manager áá áºáá¯á Composer ááẠááá·áºá¡á¬áž áá¬ážááŸááºážáá»á¬ážááᯠáááºážááŒááºá áœá¬ ááá¯á·ááá¯áẠáá»á±á¬á·áá²áá² áááºááŸááºááá¯ááºááŒá®áž áááºážááá¯á·ááᯠááŒááºáá¬ážá áœá¬ áááºááŸááºááá¯ááºá á±áá«áááºá áá¬áá¬ááœáẠááá°áá®áá±á¬ááá±á¬áá»áẠ20 áá«ááŸáááá¯ááºááŒá®áž áá áºáá¯á á®ááœáẠá¡ááŒá¬ážáá áºáá¯ááŸáá·áºáá áºáᯠáá®ážááŒá¬ážááááºážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááŸáá·áº á á¬ááŒáá·áºááá¯ááºáá»á¬ážá ááá¯ááºáá±ážááá¯ááºáá¬á á¬áááºážáá áºáá¯á á®áá«ááŸááááºá
Docker â á¡ááá®áá±ážááŸááºážáááºáááºááá·áºáááºáááºážáá»ááºááᯠáááºááŸááºááœá²ááŒá¬ážáááºááŸááºááá¯ááºá á±ááá·áº á¡áá¯á¶ážáááºááŸá¯áá áºáá¯á ááá¯á·ááŒá±á¬áá·áºá áá±ážáá±ážááá¬áá²á·ááá¯á·áááºá ááá¯á·áá±á¬áº ááá¯á á á±á·á á±á·á ááºá ááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá®áá±ážááŸááºážááŸáá·áº áááºááá¯á·á¡áá¯ááºáá¯ááºáááºááᯠáá¯á¶ážááŒááºááá¯ááºáááºá PHP á áá®ážááŒá¬ážáá¬ážááŸááºážáá áºáá¯ááᯠááœá±ážáá«á á¡ááá¯áá¬ááŸáááá·áºáá² ááá±á¬áá»ááºáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá±á¬ áááºáá±á·áá»áºáá»á¬ážááá¯áᬠááá·áºááœááºážáá«á á¡áá±ážá¡ááŒá®ážáá¯á¶ážááá±á¬á·á á¡áááºááŸááºá ááºááŸáá·áº á¡ááŒá¬ážááá±á¬áá»ááºáá»á¬ážá áááºáá±á·ááºá»áá»á¬ážááŸáá·áº áááºáááºážáá»ááºááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºáááŒá áºá á±áá²á ááá¯ááá¯áááºááŸá¬á Docker ááŸáááá·áºáááºáááºáá±áá±á¬áá¬áá¬ááŸáááá±á¬áá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááẠáááºááá·áºáááºáá±á·áá»áºááŸáá·áºáááᯠáá¯á¶ážáááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬áááºáááºážáá»ááºááᯠáá¯á¶ážáá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
3. ááœá²á·á ááºážááŸá¯
áá¯ááºááœáẠááá¯ááºááá¯áẠconfigs áá»á¬ážááᯠááááºážáá±áá»á¬ážá¡ááŒá Ạááááºážáááºážáá«á á ááºážáááºáá¬áá¬á¡ááœáẠáá®ážááŒá¬ážááááºážáá±áá»á¬ážááᯠááœá²ááŒá¬ážáá¬ážáᬠáá¯ááºáá¯ááºáááºá¡ááœáẠáá®ážááŒá¬ážááŒá áºáááºá á¡ááŒá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážááŸááá«á á¡áá¯á¶ážááŒá¯á ááá±á¬áá»ááºá á á®ážááœá¬ážáá±ážááá¯ááºáᬠáá¯áá¹áááá±áááœáẠáááºáááºážáá»ááºá¡áá±á«áºáá°áááºá á¡ááá®áá±ážááŸááºážááááºáááºááŸá¯ááᯠáá»áááºáááºáá«á
ááœá²á·á ááºážááŸá¯ - á€áááºááŸá¬ ááá±á¬áá»ááºáá»áá¬ážáá¬ááœáẠááœá²ááŒá¬ážááá·áºáá±á¬ áá áºáá¯áááºážáá±á¬áááºážáááºážááŒá áºáááºá á¡áá±á¬ááºážáá¯á¶ážá¡á¬ážááŒáá·áºá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážááᯠáááºáááºážáá»áẠvariables (env vars) ááŸáááá·áºááŒááºáááºážááá·áºáááºá
ááá¯ááá¯áááºááŸá¬ áááºááẠconfiguration ááá¯ááºáá»á¬ážá áœá¬ááᯠ.config.prod .config.local ááŒáá·áº ááááºážáááºážááŒá®áž áááºážááá¯á·ááᯠ.config ááá¯á· á¡áááºááŒá±á¬ááºážááá·áºá¡áá«ááœáẠ(á¡ááá®áá±ážááŸááºážá០á¡áá»ááºá¡áááºááá¯áááºááŸá¯ááá·áº á¡ááá config) - á€áááºááŸá¬ ááŸááºáááºáá±á¬áá»ááºážáááºááŸá¯ ááá¯ááºáá±á á€ááá á¹á ááœááºá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá»á¬ážá០á¡áá»ááºá¡áááºáá»á¬ážááẠá¡ááá®áá±ážááŸááºážáá±á¬á·ááºáá²áá±ážáá¬ážáá°áá»á¬ážá¡á¬ážáá¯á¶ážáᶠáá°ááááŸááºááŒá¬ážáááŸáááá¯ááºáááºááŒá áºááŒá®áž áá¯ááºáá¯ááºááá·áºáá¬áá¬ááŸáá±áá¬ááᯠá¡ááá¯ážáá¶ááááºááŒá áºáááºá ááœá²á·á ááºážááŸá¯á¡á¬ážáá¯á¶ážááᯠááŒáá·áºáá»ááºááŸá¯á áá Ạ(CI/CD) ááœáẠááá¯ááºááá¯ááºááááºážáááºážáá¬ážááááºááŒá áºááŒá®áž ááŒáá·áºáá»ááºáá»áááºá áá®ážááŒá¬ážáááºáááºážáá»ááºá¡ááœáẠááá¯á¡ááºáá±á¬áááºááá¯ážá¡áá»áá¯ážáá»áá¯ážááŒáá·áº ááá°áá®áá±á¬áááºáááºážáá»ááºáá»á¬ážá¡ááœáẠáá¯ááºáá¯ááºáá±ážááááºááŒá áºáááºá
4. Third Party áááºáá±á¬ááºááŸá¯áá»á¬áž
áááºáááºážáá»ááºááŸáá·áº áááºážááŒááºá áœá¬ áá»áááºáááºáá¬ážáá«á á¡áá»áá¯á·áá±á¬áááºáááºážáá»ááºáá»á¬ážááœáẠáá°áá®áá±á¬áááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠááá°áá®áá±á¬áá»áááºáááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«á
á¡ááŸááºááŸá¬á á€á¡áá»ááºááẠconfigurations áá»á¬ážá¡ááŒá±á¬ááºážá¡áá»ááºááŸáá·áº ááŒááºážááŒááºážáááºáááºáááºáá±áá±á¬ááŒá±á¬áá·áºá á€á¡áá»ááºáááŸááá²á áá¯á¶ááŸáẠconfiguration data áá»á¬ážááᯠááŒá¯áá¯ááºáááááá·áºá¡ááŒáẠáá±áá¯áá»á¡á¬ážááŒáá·áº configure áá¯ááºááá¯ááºá áœááºážááẠáá¬ááŸááá»ááºáá±á¬á·áá«á
áááºážá á®áá¬áá¬áá»á¬ážá áá±áá¬áá±á·á áºáá»á¬ážá áááºááŸáºáááºáá±á¬ááºááŸá¯áá»á¬ážáá²á·ááá¯á·áá±á¬ ááŒááºááááºáá±á¬ááºááŸá¯áá»á¬ážááá¯á· áá»áááºáááºááŸá¯á¡á¬ážáá¯á¶ážááẠáá±áááœááºážáááºáááºážáá»ááºááŸáá·áº ááŒááºáá¡ááœá²á·á¡á ááºáž/áá¯ááºáá¯ááºááŸá¯áááºáááºážáá»ááºá¡ááœáẠáá°áá®ááá«áááºá áá áºáááºážááá¯ááá±á¬áº á¡áá»áááºáááœá±ážá áá»áááºáááºááŸá¯á á¬ááŒá±á¬ááºážááᯠááŒá±á¬ááºážáá²ááŒááºážááŒáá·áºá áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠá¡ááŒá±áá¶áá¶áá«áẠ1 ááá¯á· á¡ááá®áá±ážááŸááºážáá¯ááºáááŒá±á¬ááºážáá² á¡ááŒá±áᶠ#2 ááŒáá·áº á¡á á¬ážááá¯ážááá¯ááºáá«áááºá á¥ááá¬á¡áá±ááŒáá·áºá á¥ááá¬á¡áá±ááŒáá·áºá áááºáá±á¬ááºááŸá¯ááᯠáá»á²á·ááœááºááá·áºá¡áá«á á¡ááá¯áááºáá±á¬ááºáž cache áá¬áá¬á¡ááœáẠá¡áá°ážáááºážáááºážááŒáá·áº áá»áááºáááºááŸá¯ááᯠáááºáááºááŸááºááẠáááá¯á¡ááºáá«á
5. áááºáá±á¬ááºá ááœáŸááºáá±ážáááºá áá¯ááºáá±á¬ááºáá«á
áá¯ááºáá±ááŸá¯ááᯠáá±á¬ááºááŒá±á¬ááºážááŒááºááŸáá·áºááẠá¡ááœáá·áºá¡áááºážáááŸááá² áá¬áá¬áá±á«áºááœáẠáá¯ááºááá±á¬ááºáá¯á¶ážáá¬ážááŸááºážááá¯áᬠáá¬ážááŸááá«á disk space ááŒáá·áºáááºáááá¯á¡ááºáá«á á¡ááŸá¬ážáá áºáá¯ááŒáá·áº áá¯ááºááᯠáá¯ááºáá¯ááºááá¯ááºáááºáᯠáááºááŒááºáá°ááá¯ááºážááẠááá±á¬ááºážáá±á¬ áááá¯ááááºáá¬áá áºáŠážááŒá áºáááºá
ááŒáá·áºáá»ááºááŸá¯ á¡ááá·áºá¡á¬ážáá¯á¶ážááᯠáá áºáá¯ááŸáá·áºáá áºáᯠááœá²ááŒá¬ážáá¬ážááááºá
áá±á¬ááºááŒá±á¬ááºážááŒááºááŸáá·áºááá¯á· á¡ááœáá·áºá¡áá±ážááŸááááºá á¡ááá®áá±ážááŸááºážá áááá¹áá°á¡áá±á¬ááºážáá»á¬áž (á á¯á ááºážáá¬ážááŒá®ážá ááá¯ááºááœá²á¡ááœáẠá¡ááá·áºááŒá áºáá±ááŒá®) á¡ááŒááºáááºáá±á¬ááºááá¯ááºááẠááááºážáááºážáá¬ážáá±á¬ááŒá±á¬áá·áº á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŸááá»áŸáẠáááºááẠáá¬ážááŸááºážáá±á¬ááºážááᯠááŒááºáááºááá°ááá¯ááºáááºááŒá áºáááºá ááá¯ááá¯áááºááŸá¬á á¡ááŒá±á¡áá±á¡á ááá¯áá«áá áºáᯠááŸááá«áááºá ááœáŸááºáá±ážááŸá¯ ááŸáá·áºááá¯ááºáá« ááá¯ááŒá®ážáá»áŸáẠá¡á±á¬ááºááŒááºá áœá¬ ááŒáá·áºáá»ááºááŒá®áž ááá¯ááºááœá²ááᯠáááºáááºáá«á ááᯠá¡ááœááºážááœááºááŸááá±á¬ áá¯ááºáá±ááŸá¯á¡áá áºááá¯á· áááºá¹áá±áááá·áºááºááŒáá·áº áá»áááºáááºáá¬ážáááºá ááœáŸááºáá±ážááŸá¯ áá¯ááºáá±ááŸá¯áá¶áá«ááºá ááá¬ážááá¯ážáá»á¡áááºááŒáá·áºá
á€áá±áá¬ááẠááá·áºá¡á¬áž áá¯ááºáá»á¬ážááŒá¬ážááŒá±á¬ááºážáá¯á¶áá¬áá á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒááºááááºážááá¯ááºááá·áºá áœááºážáááºááŒáá·áº á¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº áááºáááºážáá»ááºáá»á¬ážááŒá¬ážááœááºááẠááŒá±á¬ááºážááá¯ááºá á±ááá·áº Blue-Green ááŒáá·áºáá»ááºááŸá¯ááᯠáá»áœááºá¯ááºááá¯á· áááááááá«áááºá
6. áá¯ááºáááºážá ááºáá»á¬áž
á¡ááá®áá±ážááŸááºážá á¡ááŒá±á¡áá±áá±áá¬ááᯠá¡ááá®áá±ážááŸááºážá¡ááœááºáž ááá¯ááºááá¯ááºááááºážáááºážáá«á á¡ááá®áá±ážááŸááºážá RAM ááœáẠsessions ááá¯áá¯á¶ážáá«á ááŒááºááá¯áá¹ááá®áááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááŒá¬áž áááºááá¯ááºááá»áŸ áá»áŸáá±áá¯á¶ážá áœá²áá«á á¡ááá®áá±ážááŸááºážááœáẠáá¯ááºáááºážá ááºáá áºáá¯áá¬ááŸáááá¯ááºááŒá®áž á¡ááá¯ááºážá¡áá¬ááᯠááœáá·áºáááŒá¯ááá·áºá¡áá»ááºááᯠá¡á¬ážááá¯ážáá«á
á ááºááŸááºáá»á¬ážááŸáá·áº áááºáááºá ááŒááºáááŸáááºáá±á¬ááºááŸá¯áá»á¬áž (memcachedá redis) ááááºážáá»á¯ááºáá¬ážáá±á¬ áááºááŸáºáá áºáá¯ááœááºáᬠáá±áá¬ááᯠááááºážáááºážáá¬ážáá«á ááá·áºááœáẠá¡ááá®áá±ážááŸááºáž áá¯ááºáááºážá áẠ20 ááᯠáá¯ááºáá±á¬ááºáá±áá±á¬áºáááºáž áááºážááá¯á·áá²á០áá áºáá¯áá¯ááẠáááºááŸáºááᯠáááºáá±á¬ááºááŒá®ážáá«á client ááŸáá·áº áááºáááºáá¯ááºáá±á¬ááºááá¯ááºáááºááŒá áºáááºá á¡ááŒá¬ážáá¯ááºáááºážá ááºááœáẠá¡áá¯á¶ážááŒá¯áá°ááẠá¡ááá®áá±ážááŸááºážááŸáá·áº áá¯ááºáá±á¬ááºáá±ááá·áº á¡ááŒá±á¡áá±ááŸáá·áº áá°áá®áááºá á€áááºážáááºážááŒáá·áºá áááºá¡áá¯á¶ážááŒá¯áá±á¬ ááŒááºááááºáá±á¬ááºááŸá¯áá»á¬áž áááºáá»áŸááẠáááá¹áá°áá»á¬áž áááºáá»áŸáááºááŸáá á±áá¬áá° á¡áá¬á¡á¬ážáá¯á¶ážááẠáá¯á¶ááŸááºá¡ááá¯ááºážááŒá áºááŒá®áž áá±áá¬áá¯á¶ážá áœá²ááœáá·áºááœáẠááŒá¿áá¬áááŸáá á±áá² ááœááºáá±á«áºáá¬áááºááŒá áºáááºá
7. Port binding
áááºáá¬áá¬áá¬áá»áŸáẠááŒááºááá¯áá¹ááá®áááºáá±á¬ááºááŸá¯áá»á¬ážááŸáá·áº áááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááááá·áºáááºá ááá¯á·ááá¯áẠááá¯áá±á¬ááºážáá±á¬áºáááºážá áááºáá¬áá¬á¡ááœááºáž ááŒááºáááŸáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠááá¯ááºááá¯ááºááá·áºááœááºážáá«á á¥ááá¬á¡á¬ážááŒáá·áº Apache ááŸá PHP module áá
áºáá¯á¡áá±ááŒáá·áºá
ááá·áºáááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážááẠááááºá
á¬ááŸáá·áº ááááºáááºážá¡áá»áá¯á· (localgost:5432á localhost:3000á nginx:80á php-fpm:9000)á nginx á០áá»áœááºá¯ááºááẠphp- fpm ááŸáá·áº ááŸá
áºáá¯áá¯á¶ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºááẠá postgres ááŸáá·áº php-fpm á០postgres ááŸáá·áº nginx á¡ááááŒá
áºááŒá®áž á¡ááŸááºááááºáá±á¬á· áááºáá±á¬ááºááŸá¯áá
áºáá¯á
á®á០á¡ááŒá¬ážáááºáá±á¬ááºááŸá¯ááᯠáá»áœááºá¯ááºáááºáá±á¬ááºááá¯ááºáá«áááºá á€áááºážá¡á¬ážááŒáá·áº áááºáá±á¬ááºááŸá¯áá
áºáá¯á ááŸááºáááºááá¯ááºá
áœááºážááẠá¡ááŒá¬ážáááºáá±á¬ááºááŸá¯áá
áºáá¯á ááŸááºáááºááá¯ááºá
áœááºážááŸáá·áº áááºá
ááºááŸá¯áááŸááá«á
8. Parallelism
áá¯ááºáááºážá ááºáá áºáá¯áááºážááŒáá·áº áá¯ááºáá±á¬ááºáá«á ááá¯á·ááá¯ááºáá«á áá¯ááºáááºážá ááºáá»á¬ážá áœá¬ááẠáá áºáá¯ááŸáá·áºáá áºáᯠááŒá±áááºááá¯ááºááẠááá¯ááºáá«á
á¡ááá¯ááºážá¡áá¬á¡ááœáẠá¡áááºážáá»ááºáá¬ážáá«á Docker swarm áááºá€á¡ááœááºáá±á¬ááºážáááºá
Docker Swarm ááẠááá°áá®áá±á¬á
ááºáá»á¬ážááŸáá·áº áá°áá®áá±á¬á
ááºáá±á«áºááŸá ááœááºááááºáá¬áá»á¬ážááŒá¬ážááœáẠááœááºááááºáá¬á¡á
á¯á¡áá±ážáá»á¬ážááᯠáááºáá®ážááŒááºážááŸáá·áº á
á®áá¶ááá·áºááœá²ááŒááºážá¡ááœáẠáááááá¬áá
áºáá¯ááŒá
áºáááºá
swarm ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áá¯ááºáááºážá ááºáá áºáá¯á á®ááœáẠáá»áœááºá¯ááºááœá²áá±áá»áá¬ážáá±ážááá·áº áááºážááŒá áºá¡áá±á¡ááœááºááŸáá·áº áá°áá®áá±á¬áááºáá±á¬ááºááŸá¯á áá¯ááºáááºážá ááºáááºáá»áŸááŸááááºááá¯á·ááᯠáá¯á¶ážááŒááºááá¯ááºááŒá®áž áá±ážáá¬ážááá·áº port áá áºáá¯ááŸááá±áá¬áááºáá¶áááŸáááá·áºá¡ááœááºážááá¯ááºážáá»áááºááœááºáá»áŸá¬ááẠáááºážááᯠáá¯ááºáááºážá ááºáá»á¬ážááá¯á· á¡ááá¯á¡áá»á±á¬áẠproxy áá±ážáááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá áá¬áá¬áá±á«áºááŸá load ááá¯ážáá¬áááºááá¯ááŒááºááááŒáá·áºá á¡áá»áá¯á·áá±á¬áá¯ááºáááºážá ááºáá»á¬ážááœáẠload ááá¯áá»áŸá±á¬á·áá»ááŒááºážááŒáá·áº áá¯ááºáááºážá ááºáá»á¬ážááᯠááá¯ááá¯ááá·áºááœááºážááá¯ááºáááºá
9. Disposability
áá¯ááºáááºážá ááºáá»á¬ážááŸáá·áº áá±áá¬áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááẠáááºážá á®ááŒááºážááᯠááá¯á¶ážáá«ááŸáá·áºá áá¯ááºáááºážá ááºáá áºáá¯ááᯠáááºááŒááºážááẠá¡ááºááºáá áºáá¯áá¯á¶ážá¡áá±á«áº áááºáá±á¬ááºááŸá¯ááŸáááá·áºáááºá áááºáá±á¬ááºááŸá¯áá áºáᯠáá»ááœá¬ážááẠá¡áá¬á¡á¬ážáá¯á¶áž áá»ááœá¬ážáááºá
áá¯ááºáááºážá ááºááŸáá·áº áááºáá±á¬ááºááŸá¯áá áºáá¯á á®ááᯠá¡áá»áááºáááœá±áž ááááºááá¯ááºááŒá®áž áááºážááẠá¡ááŒá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááááá¯ááºá á±ááá·áºáá« (áá¯ááºáá«áááºá áááºážááẠá¡ááŒá¬ážáááºáá±á¬ááºááŸá¯áá áºáá¯á¡ááœáẠáááºáá±á¬ááºááŸá¯ááááá¯ááºáᯠáááá¯ááá¯áá«á ááá¯á·áá±á¬áº á€áá áºáá¯ááŒá®ážáá±á¬áẠá¡ááŒá¬ážáááºáá±á¬ááºááŸá¯ááᯠááááºáááºááá¯ááºáá«)á áá¯ááºáááºážá ááºá¡á¬ážáá¯á¶ážááᯠáá±á¬ááºážááœááºá áœá¬ áááºááá¯ááºážáá¬ážááááºááŒá áºáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠáááºá á²ááá¯ááºáá±á¬á¡áá«ááœáẠáááºááá·áºáá±áá¬áá»áŸ áá»ááºá á®ážááœá¬ážáááºááŒá áºááŒá®áž áá±á¬ááºáá áºááŒáááºááœáá·áºááá·áºá¡áá« á áá áºááŸááºáááºá áœá¬ á¡áá¯ááºáá¯ááºááá¯ááºáááºááŒá áºáááºá ááá¯ááá¯áááºááŸá¬á á¡áá±ážáá±á«áºáááºá á²ááá·áºá¡ááŒá±á¡áá±áá»áá¯ážááœááºáááºá áá±áá¬ááᯠááá»ááºá á®ážá á±ááá·áºáá« (á€áá±áá¬ááœáẠááœá±áá±ážááœá±áá°ááá¹ááá¬ážááẠááá·áºáá»á±á¬áºáááºá áá±áá¬áá±á·á áºááŸá á á¯á¶á ááºážáá±ážááŒááºážááŸá¯áá»á¬ážááᯠá¡á¯ááºá á¯áá»á¬ážá¡ááœááºážáᬠáá¯ááºáá±á¬ááºááá¯ááºááŒá®ážá á¡á¯ááºá á¯á០á¡áááºážáá¯á¶ážáá±ážááŒááºážáá»ááºáá áºáᯠáá»ááºááœááºáá«á ááá¯á·ááá¯áẠáá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááŒáá·áº áá¯ááºáá±á¬ááºáá«áá errorá ááá¯á·áá±á¬áẠgroup á០á¡ááŒá¬ážáá±ážááŒááºážááŸá¯ ááẠáá±á¬ááºáá¯á¶ážááœáẠá¡ááŸááºáááẠáá»ááºááœááºáááº)á
10. á¡ááá®áá±ážááŸááºáž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯/áá¯ááºáá±á¬ááºááŸá¯ áá°áá®ááŸá¯
á¡ááá®áá±ážááŸááºážááá¯ááºáá¯ááºááŸá¯á á¡ááá·áºáááºááŸááºááŒááºážááŸáá·áº áá±áááá¯ááºáá¬áá¬ážááŸááºáž ááœá²ááŒá¬ážááá«áááºá áá¯ááºáá¯ááºáá±ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠYii Lite framework ááŸáá·áº locally Yii ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááẠáá¯ááºáá¯ááºááŸá¯ááœáẠááá¯ááá¯ááŒááºáááºá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºáááºááŒá áºáááºá
áááºááœá±á·ááœááºá ááŒáá·áºáá»ááºááŒááºážááŸáá·áº áá¯ááºááŒáá·áºáá¯ááºáá±á¬ááºááŒááºážá¡á¬ážáá¯á¶ážááẠáá°áá®áá±á¬áááºáááºážáá»ááºáá áºáá¯áá®ážáá«ážááœáẠááŸáááá·áºááẠ(áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááá¯ááºážááá¯ááºáᬠáá¬á·ááºáá²á¡ááŒá±á¬ááºáž ááŒá±á¬áá±ááŒááºážááá¯ááºáá«)á ááá¯á·á¡ááŒááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáááºáááºážááá¯ááºážááẠááá¯á¡ááºáá«á áá¯ááºááᯠáá¯ááºáá¯ááºáá±ážááœáẠá¡áá¯á¶ážáá»ááá¯ááºááá·áºááŒá®áž á¡áá°ážáá±á·áá»áá·áºáá¬ážáá±á¬ áá¬áá¡áá»áá¯á·á០ááá¯ááºáá² á¡áá°ážááœááºá¡á¬ážááŒáá·áº áá»áŸá±á¬ááºááœáŸá¬ááᯠáá¯ááºáá¯ááºááŸá¯ááá¯á· ááŒáŸáá·áºáááºáá±ážááá¯ááºáá«áááºá
Docker á áá«ááá¯áááºáž áá°áá®áá±ážáááºá ááááºá¡áá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáááááŒá¯áááá«á docker ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áá¯ááºáá¯ááºááŸá¯ááŸáá·áº á ááºááœááºážááŸá áááºáááºážáá»ááºá¡á¬áž ááŒáá·áºáá»ááºáá¯ááºáá±á¬ááºááá·áº áá¯ááºáááºážá ááºááᯠááœáŸááºááŒá¬ážáá»ááºáá áºáᯠááá¯á·ááá¯áẠááŸá áºáá¯ááá¯á· áááºáá±á¬ááºá á±áááºááŒá áºáááºá
11. ááŸááºáááºážáá»á¬áž
áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáá»á¬ážááŸáá·áº áá±áá¬áá±á·á áºáá»á¬ážááá¯á· ááŸááºáááºážáá»á¬ážáá±ážáá«áááºá ááŸááºáááºážáá»á¬ážá០ááá¯ááºáá»á¬ážááŸáá·áº áá±áá¬áá±á·á áºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· áááá·áºááŸááºážáá«á 9000 Peta bytes áá«áá²á· hard drive ááá¯áááºááá¯ááºááŒáá¡á±á¬ááºá
ááŸááºáááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááŒá áºáááºáá»á¬ážá á á®ážááŒá±á¬ááºážáá áºáá¯á¡ááŒá ẠáááºááŸááºááá·áºáááºá á¡ááá®áá±ážááŸááºážááá¯ááºááá¯ááºá áá¯ááºáá±á¬ááºááŒááºážááŸááºáááºážáá»á¬ážááœáẠááá«áááºááá·áºáá«á ááŸááºáááºážáá»á¬ážááᯠstdout ááá¯á· udp áá²á·ááá¯á·áá±á¬ áááá¯ááá¯áá±á¬ááŸáá áºááá·áº áá±ážááá¯á·ááá·áºáááºá ááá¯á·ááŒá±á¬áá·áº ááŸááºáááºážáá»á¬ážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážááẠá¡ááá®áá±ážááŸááºážá¡ááœáẠááŒá¿áá¬áá áºá á¯á¶áá áºáá¬ááááºáá®ážááá¯ááºá á±ááẠááŸááºáááºážáá»á¬ážááᯠáá¯ááºáá±ážááá«áááºá greylog áááºá€á¡ááœááºáá±á¬ááºážáááºá Graylog ááẠudp ááŸáá áºááá·áº ááŸááºáááºážá¡á¬ážáá¯á¶ážááᯠáááºáá¶ááŒááºáž (á€áááá¯ááá¯áá±á¬ááẠáááºáááºáá¡á±á¬ááºááŒááºá áœá¬áááºáá¶ááŒááºážááŸáá·áºáááºáááºá áá¯á¶á·ááŒááºáá»ááºááá¯á á±á¬áá·áºááá¯ááºážááẠáááá¯á¡ááºáá«) ááẠá¡ááá®áá±ážááŸááºážá¡á¬áž áááºááá·áºáááºážááŒáá·áºáá»áŸ á¡ááŸá±á¬áá·áºá¡ááŸááºáááŒá áºá á±áá² ááŸááºáááºážáá»á¬ážáááºáá±á¬ááºááŒááºážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážááá¯á·ááá¯áᬠáá¯ááºáá±á¬ááºáá«áááºá á¡ááá®áá±ážááŸááºážáá¯áá¹áááá±áááẠááá¯ááá¯á·áá±á¬áá»ááºážáááºááŸá¯áá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááẠáááŒá±á¬ááºážáá²áá«á
12. á¡á¯ááºáá»á¯ááºáá±ážáá¬áááºáá»á¬áž
áá±áá¬á áá±áá¬áá±á·á áºáá»á¬áž á áááºááá¯á·ááᯠá¡ááºááááºáá¯ááºáááºá API ááœáẠáá®ážááŒá¬ážáááºáá®ážáá¬ážáá±á¬ á¡áá¯á¶ážááŸááºááᯠá¡áá¯á¶ážááŒá¯áá«á áááºážááᯠáááºááá¯áẠááŸá áºááŒáááºáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºááœá¬ážá á±áááºááŒá áºáááºá áá«áá±ááá·áº áááºážá áááá¯ááºáá°ážá ááŸá áºááŒááẠááŸáááºááŸá¬ ááá¯ááºáá°ážá áá«ááá¯á· ááœáŸá±á·ááŒá±á¬ááºážá áᬠáááá¯áá°ážá
á á®áá¶ááá·áºááœá²ááŒááºážáá¯ááºáááºážá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±ááŸá¯á¡ááá·áºááœáẠáá¯ááºá¡á¬ážáá¯á¶ážáá²á·ááá¯á· áá°áá®áá±á¬áááºáááºážáá»ááºááœáẠáá¯ááºáá±á¬ááºááá·áºáááºá ááá¯ááá¯áááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áá±á·á áºá ááœá²á·á ááºážáá¯á¶ááᯠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáá«áá áá±á¬áºáá¶áá»á¬ážá á¡áááºáá»á¬ážááᯠááŒá±á¬ááºážáá²áᬠá¡áá»áá¯á·áá±á¬ á¡ááŒááºááá¯ááºáᬠáá±áá¬áá±á·á Ạá á®áá¶ááá·áºááœá²ááŸá¯ áááááá¬áá»á¬ážááŸáá áºááá·áº á¡áá áºáá»á¬ážááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº áááºážááᯠááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºáááºááá¯ááºáá«á ááá¯ááá¯á·áá±á¬ á¡áá¬áá»á¬ážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá°áá®ááŒá®áž áá¬ážáááºááá¯ááºáá±á¬ ááááºááŒáá·áº áá±áá¬ááá¯ááºážááŸáá·áº áááºáááºážáá»ááºá¡á¬ážáá¯á¶ážááœáẠáá¯ááºáá±á¬ááºááá·áº áá®ážááŒá¬áž scripts áá»á¬áž - migrations ááᯠáááºáá®ážáá«áááºá ááá±á¬áá»ááºááᯠáá±áá¬ááŒáá·áºááœááºážááŒááºážáá²á·ááá¯á·áá±á¬ á¡ááŒá¬ážáá¯ááºáá±á¬ááºá áá¬áá»á¬ážá¡á¬ážáá¯á¶ážá¡ááœáẠá¡áá¬ážáá°áááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áºáááºá
PHPá Laravelá Laradocká Docker-Compose ááœáẠááá°áᬠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá
PS ááá°áá¬á¡á¬ážáá¯á¶ážááᯠMacOS ááœáẠááŒá¯áá¯ááºáá¬ážáááºá áááºážááá¯á·á¡áá»á¬ážá á¯ááẠLinux á¡ááœááºáááºáž ááá·áºáá»á±á¬áºáá«áááºá Windows á¡áá¯á¶ážááŒá¯áá°áá»á¬ážá áá»áœááºá¯ááºááᯠááœáá·áºááœáŸááºáá«á ááá¯á·áá±á¬áº áá»áœááºá¯ááºááẠWindows ááŸáá·áº á¡áá¯ááºááá¯ááºáááºááŸá¬ ááŒá¬áá«ááŒá®á
áá»áœááºá¯ááºááá¯á·á PC ááœáẠáááºááá·áº PHP áá¬ážááŸááºážáá»áŸ ááááºáááºááá±ážááá·áº á¡ááŒá±á¡áá±áá»áá¯ážááŸáá·áº áá¯á¶ážá á
áááºáá°ážááŒáá·áºááŒáá«á
áá¯á·á
docker ááŸáá·áº docker-compose á áá±á¬ááºáá¯á¶ážáá¬ážááŸááºážáá»á¬ážááᯠááá·áºááœááºážáá«á (áá«ááᯠá¡ááºáá¬áááºááŸá¬ ááŸá¬ááá¯á·ááááº)
docker -v &&
docker-compose -v
1. áááºáá«á
git clone https://github.com/Laradock/laradock.git &&
ls
Laradock ááŸáá·áº áááºáááºáá ááœááºááááºáá¬áá»á¬ážááŸáá·áº á¡áááºáá
á¹á
ááºážáá»á¬áž á¡áá»á¬ážá¡ááŒá¬ážáá«ááŸááá±á¬ á¡ááœááºá¡á±ážááŒáá±á¬ á¡áá¬áá
áºáá¯áᯠáá»áœááºáá±á¬áºááŒá±á¬áá«áááºá áá«áá±ááá·áº áá¯ááºáá¯ááºááŸá¯ááŸá¬ ááœááºážáá¶ááœááºážáá¶ááŸá¯ááœá± ááá¯ááºáá² Laradock ááᯠá¡áá¯á¶ážááŒá¯ááá¯á· á¡ááŒá¶ááŒá¯ááá¯áá«áááºá Laradock ááŸá ááá°áá¬áá»á¬ážááᯠá¡ááŒá±áá¶á ááá·áºááá¯ááºááá¯áẠááœááºááááºáá¬áá»á¬ážááᯠáááºáá®ážááŒááºážááẠááá¯áá±á¬ááºážáááºá á¡ááŒá±á¬ááºážááŸá¬ áááºážááẠáá
áºáá»áááºáááºážááœááºááŸááá±á¬ á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºáá°áá»áŸ áááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº áááºážááᯠááá¯á ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠááŒá¯áá¯ááºááá¯ááºáááºááŒá
áºáááºá
2. áá»áœááºá¯ááºááá¯á·áá¡ááá®áá±ážááŸááºážááá¯áááºáááºááẠLaradock ááá¯ááŒááºáááºáá«á
cd laradock &&
cp env-example .env
á.áá áááºážááŒááºáá°á¡áá»áá¯á·ááŸá habr directory (Laradock ááá¯áá¯á¶áá°ááœá¬ážáá¬ážááá·áº áááºáááá¯ááºááœá²) ááá¯ááœáá·áºáá«á (áá»áœááºá¯ááºá PHPStorm ááá
á¹á
ááœááº)
á€á¡ááá·áºááœáẠáá»áœááºá¯ááºááá¯á·ááẠááá±á¬áá»ááºááᯠáá¬áááºáá áºáá¯áá¬áá±ážáááºá
á.áá á¡áá¯ááºááœááºáá¯á¶ááááºááᯠá
áááºáá«á (áááºáááá
á¹á
ááœááºá áá¯á¶áá»á¬ážááá¯áááºáá±á¬ááºáááºá¡áá»áááºá¡áááºážáááºááŒá¬áááá·áºáááº)
Workspace ááẠdeveloper ááá¯ááºá
á¬áž framework ááŸáá·áº áá¯ááºáá±á¬ááºáááºá¡ááœáẠá¡áá°ážááŒááºáááºáá¬ážáá±á¬ áá¯á¶ááŒá
áºáááºá
áá¯á¶ážááŒá®áž ááœááºááááºáá¬áá²ááᯠáá±á¬ááºááœá¬ážáá¬á
docker-compose up -d workspace &&
docker-compose exec workspace bash
á.áá Laravel ááᯠááá·áºááœááºážááŒááºážá
composer create-project --prefer-dist laravel/laravel application
á.áá áááºáááºááŒá®ážáá±á¬ááºá ááá±á¬áá»ááºáá«ááŸááá±á¬ áááºážááœáŸááºááᯠáááºáá®ážááŒá®áž áááºáá
áºááŒááºážááŸááááŸá á
á
áºáá±ážáá«á
ls
exit
docker-compose down
á.á
á PHPStorm ááá¯á·ááŒááºááœá¬ážááŒá®áž .env ááá¯ááºááŸá áá»áœááºá¯ááºááá¯á·á laravel application ááá¯á· ááŸááºáááºáá±á¬áááºážááŒá±á¬ááºážááᯠáááºááŸááºááŒáá«á
áá¯á·á
3. áá¯ááºá¡á¬ážáá¯á¶ážááᯠGit ááœááºááá·áºáá«á
áááºážááá¯áá¯ááºáá±á¬ááºááẠGithub (ááá¯á·ááá¯áẠá¡ááŒá¬ážáááºááá·áºáá±áá¬áááá¯) ááœáẠááá¯ááŸá±á¬ááºááŸá¯áá áºáá¯ááᯠáááºáá®ážáá«áááºá Terminal ááŸá habr áááºážááœáŸááºááá¯ááœá¬ážá á¡á±á¬ááºáá«áá¯ááºááᯠáá¯ááºáá±á¬ááºááŒáá«á áá¯á·á
echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]:nzulfigarov/habr-12factor.git # зЎеÑÑ Ð±ÑÐŽÐµÑ ÑÑÑлка Ма Ð²Ð°Ñ ÑепП
git push -u origin master
git status
á¡á¬ážáá¯á¶áž á áá áºááá»ááŸááááŸá á á áºáá±ážááŒáá·áºáá¡á±á¬ááºá
á¡áááºááŒá±á
á±áááºá¡ááœááºá áá»áœááºá¯ááºááẠáááºážááẠGit á¡ááœáẠá¡ááŒááºá¡á¬áá¯á¶áá»ááºááŸá¬ááŒááºá¡áá»áá¯á·ááᯠá¡áá¯á¶ážááŒá¯ááẠá¡ááŒá¶ááŒá¯áá«áááºá
4. á áááºááá¯ááºáá¡á±á¬ááºá
áá áááºáá®á ááááºáááºáž 80 ááŸáá·áº 443 ááœáẠáááºááá·áºá¡áá¬áá»áŸ ááá»áááºáá¬ážááŒá±á¬ááºáž áá±áá»á¬áá«á á±á
docker-compose up -d nginx php-fpm
ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·áááá±á¬áá»ááºááœáẠáá®ážááŒá¬ážáááºáá±á¬ááºááŸá¯ 3 áá¯áá«áááºáááº-
- nginx - áááºáá¬áá¬
- php-fpm - áááºáá¬áá¬áá áºáá¯á០áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáááºáá¶áááºá¡ááœáẠphp
- workspace - developer áá»á¬ážá¡ááœáẠphp
áá±á¬áá±á¬áááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠ4 áá¯á¡ááẠ12 ááŸááºááŸáá·áºááá¯ááºáá®áá±á¬ application áá áºáá¯ááá¯áááºáá®ážááá¯ááºááẠ-
1. Codebase â áá¯ááºá¡á¬ážáá¯á¶ážááẠrepository áá áºáá¯áááºážááœááºááŸáááẠ(ááŸááºá á¯áááº- laravel ááá±á¬áá»ááºá¡ááœááºáž docker ááá·áºááŒááºážááẠááŸááºáááºááá¯ááºáá±á¬áºáááºáž áááºážááẠá¡áá±ážáááŒá®ážáá«)á
2. ááŸá®ááá¯ááŸá¯ - áá»áœááºá¯ááºááá¯á·áááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠapplication/composer.json ááŸáá·áº container áá áºáá¯á á®á Dockerfile áá áºáá¯á á®ááœáẠá¡ááá¡áááºáž áá±ážáá¬ážáá¬ážáááºá
3. áá¶á·ááá¯ážáá°áá®ááŸá¯áá»á¬áž â áááºáá±á¬ááºááŸá¯áá áºáá¯á á® (php-fomá nignxá workspace) ááẠáááºážáááá¯ááºááá¯ááºáááá±ááá¯ááºááŒá®áž ááŒááºáááŸáá»áááºáááºáá¬ážááŒá®áž áááºáá±á¬ááºááŸá¯áá áºáá¯ááŸáá·áºáá¯ááºáá±á¬ááºááá·áºá¡áá« á¡ááŒá¬ážáá áºáá¯á¡á¬áž ááááá¯ááºáááºááá¯ááºáá«á
4. áá¯ááºáááºážá ááºáá»á¬áž - áááºáá±á¬ááºááŸá¯áá áºáá¯á á®ááẠáá¯ááºáááºážá ááºáá áºáá¯ááŒá áºáááºá áááºáá±á¬ááºááŸá¯áá áºáá¯á á®ááá¯ááºážááẠá¡ááœááºážááá¯ááºážá¡ááŒá±á¡áá±ááᯠáááááºážááááºážáá¬ážáá±á
5. Port binding
docker ps
áá»áœááºá¯ááºááá¯á·ááŒááºááá¯ááºáááºá¡ááá¯ááºážá áááºáá±á¬ááºááŸá¯áá
áºáá¯á
á®ááẠáááºážáááá¯ááºááá¯áẠport ááœááºá¡áá¯ááºáá¯ááºááŒá®áž á¡ááŒá¬ážáááºáá±á¬ááºááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááá¯á· áááºáá±á¬ááºááá¯ááºáááºá
6. á ááºááŒáá¯ááº
Docker ááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž áááºážááá¯á·ááŒá¬ážááŸá á¡ááá¯á¡áá»á±á¬áẠLoad Balancing ááŒáá·áº áá°áá®áá±á¬ áááºáá±á¬ááºááŸá¯áá»á¬ážá áœá¬ááᯠáááºáá®ážááá¯ááºá á±áá«áááºá
ááœááºááááºáá¬ááœá±ááᯠáááºááŒá®áž á¡áá¶ááá¯ááŒááºááŒá®áž ááŒá±ážááŒáá¡á±á¬áẠ--á áá±áž
docker-compose down &&
docker-compose up -d --scale php-fpm=3 nginx php-fpm
áá»áœááºá¯ááºááá¯á·ááŒááºáááá·áºá¡ááá¯ááºáž php-fpm container á áá±á¬áºáá®áá»á¬ážááᯠáááºáá®ážáá¬ážáá«áááºá á€ááœááºááááºáá¬ááŒáá·áº áá¯ááºáá±á¬ááºáá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºááá·áºá¡áá¬ááá¯áá»áŸ ááŒá±á¬ááºážáá²ááẠáááá¯á¡ááºáá«á áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠport 9000 ááœáẠáááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž Docker ááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠááœááºááááºáá¬áá»á¬ážááŒá¬ážááœáẠáááºááᯠááááºážááŸááá±ážáá«áááºá
7. ááá«áá¯á¶áž - ááœááºááááºáá¬áá áºáá¯á á®ááẠáá áºáááºááᯠáááááá¯ááºá á±áá² áááºááá¯ááºáááºá ááœááºááááºáá¬ááᯠáááºááá·áºááŒááºáž ááá¯á·ááá¯áẠááŒááºáááºá áááºááŒááºáž ááẠáá±á¬ááºáááºááœá²ááœáŸáá·áºáááºááŸá¯áá»á¬ážá¡ááœááºáž á¡ááá®áá±ážááŸááºážááááºáááºááŸá¯ááᯠááááá¯ááºá á±áááºááá¯ááºáá«á ááœááºááááºáá¬áá áºáá¯á á®ááá¯áááºáž á¡áá»áááºáááœá±áž ááœáŸáá·áºááá¯ááºáááºá
8. á¡ááá®áá±ážááŸááºáž ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯/áá¯ááºáá±á¬ááºááŸá¯ áá°áá®ááŸá¯ - áá«ááá¯á·áááºáááºážáá»ááºá¡á¬ážáá¯á¶ážá á¡áá°áá°áá«áá²á áá¯ááºáá¯ááºááŸá¯ááœáẠáá¬áá¬áá±á«áºááœáẠá áá áºááá¯áááºáááºááŒááºážááŒáá·áºá áááºáá¡áááá·áºá á¬áá»á¬ážááœáẠáááºááá·áºá¡áá¬ááá¯áá»áŸ ááŒá±á¬ááºážáá²ááẠáááá¯á¡ááºáá«á á¡á¬ážáá¯á¶ážááẠDocker ááᯠáá°áá®áá±á¬áááºážááŒáá·áº á¡ááŒá±áá¶áá«áááºá
9. áá áºáá¯ááºááŒááºážá â á€ááœááºááááºáá¬áá»á¬ážááŸá ááŸááºáááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááá¯ááºááá¯ááºááœáŸáá·áºáááºááœá¬ážááŒá®áž Docker ááœááºááá¯ážááºááœáẠááŒááºááá¯ááºáááºá (ááááºáá±á¬á·á áááŒá¬ážá¡áááºáá¯ááºááœááºááááºáá¬ááœá±áá²á·ááá¯áááºáá±á¬á· ááá¯áá áá¯ááºááẠáá«ááááŒá áºááá¯ááºáá«áá°áž)
docker-compose logs -f
ááá¯á·áá±á¬áº PHP ááŸáá·áº Nginx ááœáẠDefault áááºááá¯ážáá»á¬ážááẠááá¯ááºáá
áºáá¯ááá¯á· ááŸááºáááºážáá»á¬ážáá±ážáá¬ááœááºáááºáž ááŸááºáá¬ážá
áá¬áá
áºáá¯ááŸááááºá á¡áá»áẠáá áá»áẠááŒáá·áºáá®ááẠááá¯á¡ááºáááºá ááááºáá¬áž ááœááºááááºáá¬áá
áºáá¯á
á®á áá®ážááá·áºááœá²á·á
ááºážáá¯á¶áá»á¬ážááœáẠááá¯ááºáá
áºáá¯ááá¯á· ááŸááºáááºážáá»á¬ážáá±ážááŒááºážá
Docker ááẠá¡áááºáá±á¬áºááŒáá« áá»áœááºá¯ááºáá±á¬áºááŒáá²á·ááá·áº greylog áá²á·ááá¯á·áá±á¬ á¡áá¬áá»á¬ážá¡ááœáẠááŸááºáááºážáá»á¬áž áá±ážááá¯á·ááẠá áœááºážáááºááá¯áááºáž áá¶á·ááá¯ážáá±ážáá«áááºá Greylog á¡ááœááºážááœááºá áá»áœááºá¯ááºááá¯á· ááŸá áºáááºáááᯠááŸááºáááºážáá»á¬ážááᯠáááºáááºááá¯ááºááŒá®áž áá»áœááºá¯ááºááá¯á·á á¡ááºááºáá®áá±ážááŸááºážááẠáááºážááᯠáááºááá·áºáááºážááŒáá·áºáá»áŸ áááááŒá¯áááááºááá¯ááºáá«á
10 á á¡á¯ááºáá»á¯ááºáá±ážáá¯ááºáááºážáá»á¬áž - 12 factor á¡ááá®áá±ážááŸááºážááᯠáááºáá®ážáá°áá»á¬áž á¡ááá¯ááŸáááá·áºá¡ááá¯ááºáž áááá»áá±á¬ áááºááŸá¯ááá¬áá°ážááºááŒá±á¬áá·áº laravel á០á á®áá¶ááá·áºááœá²áá±ážáá¬áááºáá»á¬ážááᯠááŒá±ááŸááºážáá±ážáá«áááºá
á¥ááá¬á¡áá±ááŒáá·áºá á¡áá»áá¯á·áá±á¬ command áá»á¬ážááá¯áááºáá²á·ááá¯á·áá¯ááºáá±á¬ááºááŒá±á¬ááºážááŒááá«áááºá
áá»áœááºáá±á¬áºááá¯á· ááœááºááááºáá¬áá²ááᯠáá±á¬ááºááœá¬áž áááºá
docker-compose exec workspace bash
php artisan list
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáááºááá·áº command ááá¯áááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá (áá»á±ážáá°ážááŒá¯á áá»áœááºá¯ááºááá¯á·ááẠáá±áá¬áá±á·á
áºááŸáá·áº áááºááŸáºááᯠconfigure ááá¯ááºáá¬ážáá±á¬ááŒá±á¬áá·áº ááœááºáááºážáá»á¬ážá áá
áºáááºááᯠáááºááŸáºááŸáá·áº áá±áá¬áá±á·á
áºááŸáá·áº á¡áá¯ááºáá¯ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáá±á¬ááŒá±á¬áá·áº ááŸááºáááºá
áœá¬ áá¯ááºáá±á¬ááºáááºááá¯ááºááŒá±á¬ááºáž áá»á±ážáá°ážááŒá¯á áááááŒá¯áá«á)
11 á ááœá²á·á
ááºážááŸá¯ ááŸáá·áº 12 á áááºáá±á¬ááºáá«á ááœáŸááºáá«á ááŒá±ážáá«á
á€á¡ááá¯ááºážááᯠBlue-Green Deployment ááœáẠá¡ááºááŸá¶áá»ááºáá±á¬áºáááºáž á€áá±á¬ááºážáá«ážá¡ááœáẠá¡ááœááºáá»ááºááŒáá·áºááœá¬ážáá«áááºá áá®á¡ááŒá±á¬ááºážáá²á· áááºáááºááŒá®áž áá®ážááŒá¬ážáá±á¬ááºážáá«ážáá áºáá¯ááºáá±ážáááºá
á¡ááá¯áá»á¯ááºááŒá±á¬ááá»áŸáẠááá±á¬ááá¬ážááẠCI/CD á áá áºáá»á¬ážááᯠá¡ááŒá±áá¶áá¬ážáááºá Jenkins О Gitlab CI. ááŸá áºáá¯á áá¯á¶ážááœááºá áááºááẠáá®ážááŒá¬ážáááºáááºážáá»ááºáá áºáá¯ááŸáá·áº áááºá ááºáá±áá±á¬ áááºáááºážáá»ááºááᯠááŒá±á¬ááºážáá²áááºááŸááºááá¯ááºáááºá ááá¯á·ááŒá±á¬áá·áº á€á¡ááŒá±á¡áá±ááœáẠá¡ááŸáẠ(á) ááŒáá·áºá á¯á¶áááá·áºáááºá ááŒááºáááºááŸá¯áá»á¬áž.
ááŸáá·áº áááºááẠáááºáá±á¬ááºáá«á ááœáŸááºáá«á ááŒá±ážáá«á á¡áááºááŒáá·áº Built-in áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒáá·áº ááŒá±ááŸááºážáá¬ážáááºá ááá¯ááºááá¯ááºáž.
ááá¯ááºááá¯ááºáž áááºáááºááŒááºáž áá¯ááºáááºážá ááºááᯠá¡ááá·áºáá»á¬ážá áœá¬ááá¯á· ááá¯ááºážááŒá¬ážááá¯ááºááŒá®áž á á¯áá±ážááŒááºážá ááœáŸááºáááºááŒááºážááŸáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºáž á¡ááá·áºáá»á¬ážááᯠáá®ážáá±á¬ááºážááá¯ážááŒááá¯ááºá á±áá«áááºá ááá¯á·á¡ááŒáẠPipeline ááœáẠáááºááẠá¡áááºáá°ážáá°ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááá¯ááºááŒá®áž á¡ááŸááºáááẠáááºááá·áºá¡áá¬ááá¯áááᯠááŒá¯áá¯ááºááá¯ááºáááºá áááºážááẠá¡ááá·áºá¡áááºáááŸá á¡áá¬ážá¡áá¬ááŸááá±á¬ áááááá¬áá áºáá¯ááŒá áºáááºá
áá»áŸá±á¬ááºááœáŸá¬áá¯ááºááŸá¬
ဠrepository ááᯠcloning áá¯ááºáá±á¬á¡áá« submodule ááá¯á
áááºáááºááá±á·áá«ááŸáá·áºá
PS- á€áá»ááºážáááºáááºážá¡á¬ážáá¯á¶ážááᯠá¡ááŒá¬ážáá±á¬ utilities áá»á¬ážááŸáá·áº programming language áá»á¬ážááŒáá·áº á¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá á¡áááááá±á¬á· á¡ááŸá
áºáá¬áá áááœá²ááŒá¬ážáá«áá°ážá
source: www.habr.com