ΠΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΏΠΈΡΠ° Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° Π½Π° ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΡ Π‘ΠΈΠ³Π°ΡΠ΅Π² ΠΎΡ Inventos βΠΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Ρ Docker + Gitlab CIβ
Π’Π΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΠΏΡΡΠ²Π° Π·Π°ΠΏΠΎΡΠ²Π°Ρ Π΄Π° ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅, Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Docker + Gitlab CI, ΡΠ΅ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ. ΠΡΠΊΡΠ΄Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π°? ΠΠ°ΠΊ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅? ΠΠ°ΠΊ Π΄Π° ΡΠ΅ΡΡΠ²Π°ΠΌ?
Π’ΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ Π΅ Π΄ΠΎΠ±ΡΡ, Π·Π°ΡΠΎΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈ ΠΏΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Docker ΠΈ Gitlab CI. Π‘Π°ΠΌΠΈΡΡ Π΄ΠΎΠΊΠ»Π°Π΄ Π΅ ΠΎΡ 2017 Π³. ΠΠΈΡΠ»Ρ, ΡΠ΅ ΠΎΡ ΡΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΡΡΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΈΡΠ΅, ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ°, ΠΈΠ΄Π΅ΡΡΠ°, ΠΎΠΏΠΈΡΠ° Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°.
ΠΠ° ΠΊΠΎΠ³ΠΎ ΠΌΡ ΠΏΡΠΊΠ°, ΠΌΠΎΠ»Ρ ΠΏΠΎΠ΄ ΠΊΠΎΡΠΊΠ°ΡΠ°.
ΠΠ°Π·Π²Π°ΠΌ ΡΠ΅ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡΡ Π‘ΠΈΠ³Π°ΡΠ΅Π². Π Π°Π±ΠΎΡΡ Π·Π° Inventos. Π©Π΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° ΠΌΠΎΡ ΠΎΠΏΠΈΡ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Docker ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π³ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°.
Π’Π΅ΠΌΠ° Π½Π° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ°: ΠΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Docker ΠΈ Gitlab CI.
Π’ΠΎΠ²Π° Π΅ Π²ΡΠΎΡΠΈΡΡ ΠΌΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ Π·Π° Docker. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΡΠ²ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄ Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΌΠ΅ ΡΠ°ΠΌΠΎ Docker Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½ΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ. ΠΡΠΎΡΡ Π½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
Π° Docker Π±Π΅ΡΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 2-3 Π΄ΡΡΠΈ. ΠΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΠ΅ Π½Π°ΡΡΡΠΏΠ° ΠΎΠΏΠΈΡ ΠΈ ΡΠ΅ ΠΏΡΠΈΠ΄Π²ΠΈΠΆΠΈΡ
ΠΌΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π½Π°ΠΏΡΠ΅Π΄. ΠΠΈΠ½ΠΊ ΠΊΡΠΌ Π½Π°ΡΠΈΡ
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π² ΡΠΎΠ·ΠΈ Π΄ΠΎΠΊΠ»Π°Π΄? Π©Π΅ ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ Π½Π°ΡΠΈΡ ΠΎΠΏΠΈΡ ΠΊΠ°ΠΊΡΠ² ΡΠ΅ΠΉΠΊ ΡΠΌΠ΅ ΡΡΠ±ΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΌΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ. ΠΠ΅ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ Π±Π΅ΡΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π½Π°ΠΏΡΠ΅Π΄.
ΠΠ°ΡΠ΅ΡΠΎ ΠΌΠΎΡΠΎ Π΅: Π·Π°ΠΊΠ°ΡΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ, Π΄ΠΎ ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ Π΄ΠΎΠΊΠΎΠΏΠ°ΠΌΠ΅.
ΠΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ΅ΡΠ°Π²Π°ΠΌΠ΅?
ΠΠΎΠ³Π°ΡΠΎ Π² Π΅Π΄Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΅ΠΊΠΈΠΏΠ°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΡΡ Π΅ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ ΡΠ΅ΡΡΡΡ. ΠΠΌΠ° Π΅ΡΠ°ΠΏΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΡΡ Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π΅ Π΄Π°Π΄Π΅Π½ Π·Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΄ΡΡΠ³ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΡΡ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ Π±ΡΡΠ·ΠΎ, ΡΠΎΠΉ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΠ΅Π΄Π°ΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΡΠΊΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ, Π°ΠΊΠΎ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΠΎΡ Π½ΡΠ»Π°ΡΠ°, ΡΠΎΠ³Π°Π²Π° ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠ°ΠΌΠΎ Π·Π° ΡΡΠ°ΡΠΈ Ρ ΠΎΡΠ°. Π‘Π»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ ΡΠ°ΠΌΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ½ΠΎΡΠΎ ΡΠΈ ΠΌΡΡΡΠΎ Π·Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ. ΠΠ° Π΄Π° ΡΡΠΊΠΎΡΠΈΠΌ ΡΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Docker.
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π² Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠΎΡ ΠΎΠΏΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠΎΠ΅ΠΌΠ°Ρ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Π°ΡΠ°. ΠΡΠ² Π²ΡΠ΅ΠΊΠΈ ΠΏΠ΅ΡΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ Π²ΡΠ²Π΅ΠΆΠ΄Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ vasya.dev. ΠΠΎ Π½Π΅Π³ΠΎ ΡΠ΅Π΄ΠΈ ΡΡΡΠ΅Π΄ΠΊΠ°ΡΠ° ΠΌΡ ΠΠ΅ΡΡ, ΡΠΈΠΉΡΠΎ Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π΅ petya.dev. Π’Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΡΠ΅Π±ΡΠ°ΠΉΡ ΠΈΠ»ΠΈ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠΎΠ²Π° ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½.
ΠΠΎΠ³Π°ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ°ΡΡΠ΅ ΠΈ ΡΠ΅Π·ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ Π·Π°ΠΏΠΎΡΠ²Π°Ρ Π΄Π° Π²Π»ΠΈΠ·Π°Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π²ΡΠ·Π½ΠΈΠΊΠ²Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π½Π° ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΠΏΡΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ° ΡΠ΅ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°.
Π‘ΡΡΠΎΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΈ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. ΠΡΠΊΠΎΠΉ Π½Π΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° ΠΈ ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΏΡΠ°Π·Π½Π° root ΠΏΠ°ΡΠΎΠ»Π°. ΠΠ° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ MySQL ΠΏΠΎΠΈΡΠΊΠ° ΠΎΡ Π½ΡΠΊΠΎΠ³ΠΎ ΠΏΠ°ΡΠΎΠ»Π° ΠΈ ΠΏΠ°ΡΠΎΠ»Π°ΡΠ° ΡΠ΅ ΠΎΠΊΠ°Π·Π° 123. Π§Π΅ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΡΠΊΠΎΠΉ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°, Π½ΡΠΊΠΎΠΉ Π½Π΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠΌΠ°ΡΠ΅ ΡΡΠΈΠΊΠΎΠ²Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·Π²Π°Π΄ΠΈΡ
ΠΌΠ΅ Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΠ΅ΡΡΠΎΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ .gitignore
ΠΈ Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° Π·Π°ΡΡΡΠ΄Π½ΠΈ Π·Π°ΠΏΠΎΡΠ²Π°Π½Π΅ΡΠΎ. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΅, Π½Π°ΡΠ΅Π΄ Ρ Π΄ΡΡΠ³ΠΈ Π½Π΅ΡΠ°, Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ Π·Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π΄Π° ΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅ ΠΏΠ°ΡΠΎΠ»Π°, Π΄Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈ Ρ.Π½.
ΠΡΡΠ³ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅. Π§Π΅ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° Π΅Π΄ΠΈΠ½ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΠΌΠ° ΠΏΡΠΎΠ΅ΠΊΡ Legacy, ΠΊΠΎΠΉΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠ΅Π΄ΠΈ ΠΏΠ΅Ρ Π³ΠΎΠ΄ΠΈΠ½ΠΈ (ΠΎΡ 2017 Π³. β Π±Π΅Π». ΡΠ΅Π΄.). ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π·Π°ΠΏΠΎΡΠ½Π°Ρ ΠΌΠ΅ Ρ MySQL 5.5. ΠΠΌΠ° ΠΈ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π΄Π° Π²Π½Π΅Π΄ΡΠΈΠΌ ΠΏΠΎ-ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° MySQL, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 5.7 ΠΈΠ»ΠΈ ΠΏΠΎ-ΡΡΠ°ΡΠΈ (ΠΏΡΠ΅Π· 2017 Π³. - Π±Π΅Π». ΡΠ΅Π΄.)
ΠΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Ρ MySQL, Π·Π½Π°Π΅, ΡΠ΅ ΡΠ΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½ΠΎΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΡΡ ΡΠ΅Π±Π΅ ΡΠΈ. ΠΠΎΡΡΠ° Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ 2 Π±Π°Π·ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. ΠΠΎΠ½Π΅ ΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΈ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ Π½ΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΡΠ·Π΄Π°Π²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, ΡΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π»ΠΎΠΊΠ°Π»Π½Π° RAM. Π¦ΡΠ»ΠΎΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π΅Π΄Π½Π° ΠΌΠ°ΡΠΈΠ½Π°. ΠΡΠΈΠΌΠ΅Ρ Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ backend ΡΡΡΠ²ΡΡΠΈ Π² Production 3 ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π·Π°ΠΏΠΈΡΠ²Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² Π³Π»Π°Π²Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ ΠΎΡΡΠ°ΠΌ nginx Π²Π·Π΅ΠΌΠ° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π·Π° Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΊΡΠ² ΠΊΠΎΠ΄ ΠΏΠΎΠΏΠ°Π΄Π½Π΅ Π² Production, ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΠ°ΠΉΠ»ΡΡ ΠΏΡΠΈΡΡΡΡΠ²Π° Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ 3-ΡΠ΅ ΡΡΡΠ²ΡΡΠ°.
ΠΠΎΡΠΎΠΊΠ°ΡΠ° Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Π½ΡΠΊΠΎΠΈ ΠΌΠ°Π»ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ. Π’ΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅.
Frondend-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Ρ Π²ΡΡΡ Ρ JS, Π½ΡΠΌΠ° ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π²ΡΡΡ Ρ Backend. ΠΠ΅ΠΊΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°, Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, Ruby on Rails ΠΈ Π½Π΅ ΠΏΡΠ΅ΡΠΈ Π½Π° Frondend. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° API.
ΠΠ°ΡΠΎ Π±ΠΎΠ½ΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Docker ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° ΡΠ΅ΡΠΈΠΊΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° Staging. ΠΡΠ΅ΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ²ΠΎΡΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. Π€ΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈ ΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»Π΅Π½ ΡΡΡΠ²ΡΡ ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΎ, ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»ΠΈ Π½ΡΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΡΡΠ΅Π΄Π° ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π°, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅, Π΄Π° ΡΠΈ Π²Π»ΠΈΡΡΡ Π΅Π΄ΠΈΠ½ Π½Π° Π΄ΡΡΠ³.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ. ΠΠ°ΠΊΠ²ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅?
- Π‘Π°ΠΌΠΈΡΡ Π΄ΠΎΠΊΠ΅Ρ. Dockerfile ΠΎΠΏΠΈΡΠ²Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
- Docker-compose Π΅ ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΡ Π½Π°ΡΠΈΡΠ΅ Docker ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ GitLab Π·Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ GitLab-CI Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ.
ΠΠΎΠΊΠ»Π°Π΄ΡΡ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ Π΄Π²Π΅ ΡΠ°ΡΡΠΈ.
ΠΡΡΠ²Π°ΡΠ° ΡΠ°ΡΡ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Docker Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ Π½Π° ΠΌΠ°ΡΠΈΠ½ΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ.
ΠΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°ΠΌΠ΅ Ρ GitLab, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ ΠΊΠ°ΠΊ Π²Π½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅ Π² Staging.
Docker Π΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π΅Π½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄) Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ Dockerfile. Π’ΡΠΊ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ²Π°ΠΌΠ΅ ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ Ruby:2.3.0 Docker ΠΎΠ±ΡΠ°Π·. Π’ΠΎΠΉ ΡΡΠ΄ΡΡΠΆΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° Ruby Π²Π΅ΡΡΠΈΡ 2.3. ΠΠΈΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ NodeJS. ΠΠΏΠΈΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ /app
. ΠΠ°Π΄Π°ΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΊΠ°ΡΠΎ ΡΠ°Π±ΠΎΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. Π ΡΠ°Π·ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Gemfile ΠΈ Gemfile.lock. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ ΡΠΎΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ. ΠΠΎΡΠΎΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ Π³ΠΎΡΠΎΠ² Π΄Π° ΡΠ»ΡΡΠ° Π½Π° Π²ΡΠ½ΡΠ΅Π½ ΠΏΠΎΡΡ 3000. ΠΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°, ΠΊΠΎΡΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΊΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ° ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΏΠΎΡΠΎΡΠ΅Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°.
Π’ΠΎΠ²Π° Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π΄ΠΎΠΊΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠ°Π½ ΡΠ°ΠΉΠ». Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅, ΡΠ΅ ΠΈΠΌΠ° Π²ΡΡΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. Π’ΠΎΠ²Π° Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΡΡΠ»ΡΠ³Π°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠ΅Π± ΡΡΠ»ΡΠ³Π°ΡΠ°. ΠΠ°ΡΠΈΡΠ΅ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π½ΡΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°ΡΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ Π·Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ MySQL, ΠΏΡΠΈΠΌΠ΅ΡΡΡ Π΅ Ρ MySQL - Π½ΠΎ Π½ΠΈΡΠΎ Π½Π΅ Π½ΠΈ ΠΏΡΠ΅ΡΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΡΡΠ³Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ (PostgreSQL, Redis).
ΠΠ·ΠΈΠΌΠ°ΠΌΠ΅ ΠΎΡ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ ΠΎΡ Docker hub ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° MySQL 5.7.14 Π±Π΅Π· ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. ΠΠΈΠ΅ ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. Π’ΠΎΠΉ ΡΡΠ±ΠΈΡΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π½Π°Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΡΠ²ΠΎΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΡΡΠΊ. ΠΠΊΠΎ ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ Π½Π°Π·Π°Π΄, ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· Puma Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π°. Puma Π΅ ΡΡΠ»ΡΠ³Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Ruby. ΠΡΠ² Π²ΡΠΎΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡΠΌΠ΅Π½ΡΠΌΠ΅. Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°ΡΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ ΠΈΠ»ΠΈ Π·Π°Π΄Π°ΡΠΈ.
ΠΠΈΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΎΠΏΠΈΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅ΠΏΡΠ°ΡΠΈΠΌ ΠΏΠΎΡΡ Π½Π° Π½Π°ΡΠ°ΡΠ° Ρ ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΠΎΡ 3000 Π½Π° 3000 Π½Π° ΠΏΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° iptables ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ, ΠΊΠΎΠΉΡΠΎ Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²Π³ΡΠ°Π΄Π΅Π½ Π² Docker.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΡΡΡΠΎ ΠΌΠΎΠΆΠ΅, ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠ΅Π΄ΠΈ, Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²ΡΠ΅ΠΊΠΈ Π½Π°Π»ΠΈΡΠ΅Π½ IP Π°Π΄ΡΠ΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 127.0.0.1 Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΡ ΠΈΠ»ΠΈ Π²ΡΠ½ΡΠ΅Π½ IP Π°Π΄ΡΠ΅Ρ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ°.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ ΡΠ΅Π΄ ΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΠ΅Π± ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ db ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°ΠΌΠ΅ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ΅Π± ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, docker-compose ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π½Π°Ρ. ΠΡΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ (Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ»Π΅Π΄ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°! Π’ΠΎΠ²Π° Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ° Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ) ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π½Π°ΡΠΈΡΡ Π±Π΅ΠΊΠ΅Π½Π΄.
Π’ΠΎΠ²Π° ΠΈΠ·Π±ΡΠ³Π²Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π½Π΅ Π΅ ΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΠΈ ΡΠΏΠ΅ΡΡΡΠ²Π° ΡΠ΅ΡΡΡΡΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΏΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠΎ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π·Π° Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ.
ΠΠ°ΠΊΠ²ΠΎ Π½ΠΈ Π΄Π°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΎΠΊΠ΅ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° MySQL Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ. Π’ΠΎΠ²Π° ΠΈΠ·Π±ΡΠ³Π²Π° Π½ΡΠΊΠΎΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ Π²Π΅ΡΡΠΈΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ. Π’ΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΎΠ±ΡΠΎ ΠΈΠΌΠ΅ Π½Π° Ρ ΠΎΡΡ Π·Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΈΠΌΠ΅, ΠΏΠ°ΡΠΎΠ»Π°. ΠΠΈΠ΅ ΡΠ΅ ΠΎΡΠ΄Π°Π»Π΅ΡΠ°Π²Π°ΠΌΠ΅ ΠΎΡ Π·ΠΎΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°ΡΠ° Π³ΡΠ°Π΄ΠΈΠ½Π° Π½Π° ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ ΠΌΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ.
ΠΠΌΠ°ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΠΏΡΠΈΠΌΠ°Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ°. MySQL Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Π·Π° ΡΠ»Π°Π±ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΡΠ°.
Docker Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π½Π° Python, Ruby, NodeJS, PHP Π½Π° ΠΆΠ΅Π»Π°Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΡΡΡΠ²Π°Π²Π°ΠΌΠ΅ ΡΠ΅ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΡΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅. ΠΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° Ruby ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ rpm ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π° Docker, ΠΏΠ»Π°Π²Π½ΠΎ Π΄Π° ΠΌΠΈΠ³ΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π° Π³ΠΎ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π·Π°Π΅Π΄Π½ΠΎ ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅. ΠΡΠΌΠ°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° ΠΊΠ°ΠΊΡΠΎ Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΡΠ°ΠΊΠ° ΠΈ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠ° Π΄Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ°, ΡΠΏΡΡΠ½Π΅ΡΠ΅ ΡΡΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΏΠΎΠ²Π΄ΠΈΠ³Π½Π΅ΡΠ΅ Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΠΊΠΎ Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΏΡΡΠ½Π΅ΠΌ Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π΄Π° Π²Π΄ΠΈΠ³Π½Π΅ΠΌ ΡΡΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
Π‘Π»Π΅Π΄ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΊΠ°ΠΊΡΠΎ Π² Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠ°ΠΊΠ° ΠΈ Π² ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ. Π’ΠΎΠ²Π° Π²Π°ΠΆΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ.
ΠΡΠ² Frontend ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ JavaScipt ΠΈ NodeJS.
Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ReacJS. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΠΈΡΠΊΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΈ ΡΡΠ΅Π· Π³ΠΎΡΠ΅ΡΠΎ ΠΏΡΠ΅Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π·Π°Π΄Π°ΡΠ°ΡΠ° Π·Π° Π°ΡΠ΅ΠΌΠ±Π»ΠΈΡΠ°Π½Π΅ Π½Π° JavaScipt ΠΈ ΠΊΠΎΠ΄ΡΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ Π² ΡΡΠ°ΡΠΈΠΊΠ°, ΡΠ΅ Π΄Π°Π²Π° ΡΡΠ΅Π· nginx Π·Π° ΡΠΏΠ΅ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ.
Π’ΡΠΊ ΡΡΠΌ Π΄Π°Π» ΡΡ Π΅ΠΌΠ°ΡΠ° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ°ΠΊΠ²ΠΈ Π·Π°Π΄Π°ΡΠΈ Π±ΡΡ Π° ΡΠ΅ΡΠ΅Π½ΠΈ? ΠΠΌΠ°Ρ ΠΌΠ΅ Π½ΡΠΆΠ΄Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°, Ρ ΠΊΠΎΡΡΠΎ Π΄Π° ΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°Ρ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. Π’Π΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π΄Π°Π½Π½ΠΈ. ΠΠ΄Π½Π° ΠΎΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°ΡΠ΅ Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΈΠ·Π²Π΅ΡΡΠΈΡ Π΄ΠΎ ΡΠΎΠ²Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
ΠΠ°ΠΊΠ²ΠΎ ΡΠΌΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π·Π° ΡΠΎΠ²Π°?
Π Π°Π·Π΄Π΅Π»ΠΈΡ ΠΌΠ΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ°ΠΊΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ: Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° JS, Π±Π΅ΠΊΠ΅Π½Π΄Π°, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° REST ΠΏΠΎΠ΄ Ruby on Rails. ΠΠ΅ΠΊΠ΅Π½Π΄ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈΡΡ ΠΏΠ°Π½Π΅Π» Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° Ρ Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° REST.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ°Ρ ΠΌΠ΅ Π½ΡΠΆΠ΄Π° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΈΠ·Π²Π΅ΡΡΠΈΡ. ΠΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΠΈΠΌΠ°Ρ ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΠΉΡΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠΈΡ Π΄ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡ Π΅ΠΌΠ°: ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡ Π±ΡΠ°ΡΠ·ΡΡΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈΡ ΠΏΠ°Π½Π΅Π», Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈΡΡ ΠΏΠ°Π½Π΅Π» Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° Ρ Π±Π΅ΠΊΠ΅Π½Π΄Π°, Π·Π°Π΄Π°ΡΠ°ΡΠ° Π΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ° Push ΠΈΠ·Π²Π΅ΡΡΠΈΡ.
Push ΠΈΠ·Π²Π΅ΡΡΠΈΡΡΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°Ρ Ρ Π΄ΡΡΠ³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ Π² NodeJS.
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ ΡΠ΅ ΠΎΠΏΠ°ΡΠΊΠΈ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΈΠ·Π²Π΅ΡΡΠΈΡ ΠΏΠΎ ΡΠ΅Ρ Π½ΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ.
Π’ΡΠΊ ΡΠ° Π½Π°ΡΠΈΡΡΠ²Π°Π½ΠΈ Π΄Π²Π΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Docker ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 2 Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΠΏΠΎ Π½ΠΈΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠΌΠ°Ρ ΠΎΠ±ΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΡΠ΅ΠΆΠ°, Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
Π‘ΡΡΠΎΡΠΎ, Π½ΠΎ Π² ΡΠΈΡΡΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΌΡΡΡΠΎΡΠΎ, ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π΅ Π²Π°ΠΆΠ½ΠΎ.
ΠΠΊΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΌΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠΎ Π² ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΡΠ°ΡΠ° ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° Push ΠΈΠ·Π²Π΅ΡΡΠΈΡ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΡΠΎ ΠΏΡΠ»Π΅Π½ ΡΡΡΠ²ΡΡ. Π’ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ API. Π Π½Π°ΡΠ°ΡΠ° Π½ΠΎΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅ΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° Ρ Π½Π΅Π³ΠΎ.
ΠΠΎ ΡΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Π²Π΅ΡΡΠΈΡ 4 Π½Π° NodeJS. Π‘Π΅Π³Π° (ΠΏΡΠ΅Π· 2017 Π³. - Π±Π΅Π». ΡΠ΅Π΄.) Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²Π΅ΡΡΠΈΡ 7 Π½Π° NodeJS. ΠΡΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½ΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π΄Π° Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° NodeJS ΠΎΡ ΡΡΠ»ΡΠ³Π°ΡΠ° Push notification.
Π Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ API, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Ρ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π°.
ΠΠ°ΠΊΠ²ΠΎ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Docker? ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ Dockerfile ΠΊΡΠΌ Π½Π°ΡΠ΅ΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠΏΠΈΡΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ ΡΠ° ΡΠ°Π·Π±ΠΈΡΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ backend ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ.
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Dockerfile, ΠΎΠΏΠΈΡΠ²Π°ΠΌΠ΅ ΠΆΠ΅Π»Π°Π½Π°ΡΠ° Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ° (Python, Ruby, NodeJS). Π docker-compose ΡΠΎΠΉ ΠΎΠΏΠΈΡΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ - Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. ΠΠΏΠΈΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ°ΠΊΠ°Π²Π° ΠΈ ΡΠ°ΠΊΠ°Π²Π° Π²Π΅ΡΡΠΈΡ, ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΡΠ°ΠΌ ΠΈ ΡΠ°ΠΌ.
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΡΠ΅ΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ nginx, Π·Π° Π΄Π° ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°ΠΌΠ΅ ΡΡΠ°ΡΠΈΡΠ½ΠΎ. ΠΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠ°ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ½ΠΈΠΌΠΊΠΈ. Backend Π³ΠΈ ΠΏΠΎΡΡΠ°Π²Ρ Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ ΠΎΠ±Π΅ΠΌ, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ nginx, ΠΊΠΎΠΉΡΠΎ Π΄Π°Π²Π° ΡΡΠ°ΡΠΈΠΊΠ°ΡΠ°.
ΠΠ° Π΄Π° ΡΡΡ ΡΠ°Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° nginx, mysql, Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ ΠΏΠ°ΠΏΠΊΠ° Docker, Π² ΠΊΠΎΡΡΠΎ ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π°ΠΏΡΠ°Π²ΠΈ git ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΡΠ²ΠΎΡΡΠ° ΠΌΠ°ΡΠΈΠ½Π°, ΡΠΎΠΉ Π²Π΅ΡΠ΅ ΠΈΠΌΠ° Π³ΠΎΡΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅. ΠΡΠΌΠ° Π²ΡΠΏΡΠΎΡ ΠΊΠ°ΠΊΡΠ² ΠΏΠΎΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡΠ΅.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°: Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ, inform-API, Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΈΠ·Π²Π΅ΡΡΠΈΡ.
ΠΠ° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π°, ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ Π΄ΡΡΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π½Π°ΡΠ΅ΠΊΠΎΡ ΠΌΠ΅ dockerized-app. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΡΠ΅Π΄ΠΈ Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. Π’Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ - Π² GitLab ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΠΏΠ°ΠΏΠΊΠ°, Π½ΠΎ Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΏΠ°ΠΏΠΊΠ° Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ΄Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π°Π΄ΠΎΠ»Ρ ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ.
Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΌΠΎ Π·Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° dockerized-app. Π’ΡΠΊ ΠΏΡΠ΅Π½Π°ΡΡΠΌΠ΅ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Docker, Π² ΠΊΠΎΡΡΠΎ ΠΏΠΎΠΏΡΠ»Π²Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. ΠΠΌΠ° README.md, ΠΊΠΎΠΉΡΠΎ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΎΠΏΠΈΡΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π’ΡΠΊ ΡΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠ»ΠΈ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° Π·Π° ΡΡΡΡΠ°Π²ΡΠ½Π΅ Π½Π° docker. Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π±ΡΠ³Π°ΡΠ΅ Π½Π° ΡΡΡΠΏΠΊΠΈ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΡΠ°Π±ΠΎΡΠΈ Ρ ΡΠ΄ΡΠΎΡΠΎ, ΡΠΎΠΉ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΈΠ·Π²Π΅ΡΡΠΈΡ, ΡΠΎΠΉ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ° docker-compose ΡΠ°ΠΉΠ» ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΡΠ΅ΡΡΡΡΡΡ ΡΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°.
ΠΠΊΠΎ ΠΈΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Ρ Π½Π°ΡΠΎΡΠ΅Π½ΠΈ ΠΈΠ·Π²Π΅ΡΡΠΈΡ, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ docker-compose.yaml ΠΈ docker-compose-push.yaml.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ docker-compose.yaml ΠΈ docker-compose-push.yaml ΡΠ° Π² ΠΏΠ°ΠΏΠΊΠ°, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π΅Π΄Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΡΠ΅ΠΆΠ°.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎ-ΡΠ°Π·ΡΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. ΠΠ°ΠΊΠ²ΠΎ Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΡΡΠΊ? Π’ΡΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π·Π° Π±Π°Π»Π°Π½ΡΠΈΡΠ°Π½Π΅.
Π’ΠΎΠ²Π° Π΅ Π³ΠΎΡΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Docker, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° nginx ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ»ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π½Π° Docker. ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅Π½, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Ρ, ΡΠΎΠΉ ΡΠ΅Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° nginx. Π Π°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΠΌΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ ΠΎΡ ΡΡΠ΅ΡΠΎ Π½ΠΈΠ²ΠΎ.
ΠΠ° ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° .dev - api.informer.dev. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Ρ Π΄ΠΎΠΌΠ΅ΠΉΠ½ .dev ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΡ ΠΊΡΠΌ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΡΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π΅ Π½Π°ΡΠΈΡΡ Π±ΡΠ°ΡΠ·ΡΡ ΠΈΠ»ΠΈ Π½ΡΠΊΠ°ΠΊΡΠ² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Ρ ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ°Π²ΠΈΠΌ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π»Π°Π½ΡΡΠΎΡΠ°.
ΠΠ°Π»Π°Π½ΡΠΈΡΠ°ΡΠΈΡΡ ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΡΠΌ ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅.
ΠΠΎΠΆΠ΅ Π΄Π° Π΅ nginx, ΠΊΠΎΠΉΡΠΎ Π΄Π°Π²Π° Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° JS. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ nginx, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ API, ΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π΄Π°Π²Π°Ρ Π½Π° nginx ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΊΠ°ΡΠ΅Π½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ° ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΡΡΠ΅Π· Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΡΠ΅ΠΆΠ° ΠΈ ΡΠ° ΡΠΊΡΠΈΡΠΈ Π·Π°Π΄ ΠΏΡΠΎΠΊΡΠΈ.
ΠΠ° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΊΠ°ΡΠΎ Π·Π½Π°Π΅ΡΠ΅ IP, Π½ΠΎ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΎΠ²Π°. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ.
ΠΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅, Π·Π° Π΄Π° Π΄ΠΎΠΊΠ΅ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠΈ? Π‘ΠΏΠΎΡΠ΅Π΄ ΠΌΠ΅Π½ Π΄ΠΎΠ±ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡΡ Π΄ΠΎΠΊΠ΅Ρ ΠΎΠ±ΡΠ°Π· Π·Π° MySQL.
ΠΠΎΡΡΠ° Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅Π»ΡΡΠ²ΠΎ. ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π²Π΅ΡΡΠΈΠΈ. ΠΠΎ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΠΎΠΊΡΠΈΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΡΠΆΠ΄ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅. ΠΠΊΠΎ ΠΎΡΠ΄Π΅Π»ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°, ΡΠΎΠ³Π°Π²Π° ΠΌΠΈΡΠ»Ρ, ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡΠΈ ΡΠ°ΠΌΠΎΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ.
Hub.docker.com ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΡΠ΄ΡΡΠΆΠ° Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ github.com, ΠΊΠΎΠΉΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π² ΡΠΎΠ²Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈΠΌΠ° ΡΠΊΡΠΈΠΏΡ docker-endpoint.sh, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π·Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΡΠ½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π² ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°. ΠΠ°ΡΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈΠ»ΠΈ ΡΡΠ΅Π· docker-compose, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠ°Π·Π½Π° ΠΏΠ°ΡΠΎΠ»Π° Π·Π° Π΄ΠΎΠΊΠ΅Ρ Π·Π° root Π² MySQL ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅.
ΠΠΌΠ° ΠΎΠΏΡΠΈΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΏΠ°ΡΠΎΠ»Π°. ΠΠ°Π·Π²Π°ΠΌΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΠ°ΡΠΎΠ»Π° Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.
Π Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π»Π΅ΠΊΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈΡ ΠΌΠ΅ Dockerfile, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ°. Π’Π°ΠΌ Π³ΠΎ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Ρ ΠΌΠ΅ ΡΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ, Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡΠ΅ ΠΏΡΠ°Π²Π°, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π’ΠΎΠ²Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. Ruby ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΈΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅, ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.
Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π²Π΅ΡΡΠΈΡ Π½Π° MySQL Π½Π° github.com. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ Dockerfile ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΈΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° ΡΠ°ΠΌ.
docker-endpoint.sh Π΅ ΡΠΊΡΠΈΠΏΡΡΡ, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° Π²Ρ ΠΎΠ΄Π½Π°ΡΠ° ΡΠΎΡΠΊΠ°. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π½ΡΠΊΠΎΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΡΠΏΠΊΠΈ ΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ ΡΠ°ΠΌΠΎ Π² ΡΠΊΡΠΈΠΏΡΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ Π²ΡΠΎΡΠ°ΡΠ° ΡΠ°ΡΡ.
ΠΠ° Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ ΠΌΠ΅ ΠΊΡΠΌ gitlab. Π’ΠΎΠ²Π° Π΅ Π΄ΠΎΡΡΠ° ΠΌΠΎΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ ΠΈΠΌΠ° Π²ΠΈΠ·ΡΠ°Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠ΄ΠΈΠ½ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° Gitlab Π΅ Gitlab CI. Π’Ρ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΎΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅.
Π Π°Π·Π³ΠΎΠ²ΠΎΡ Π·Π° Gitlab CI 2
Π‘Π΅Π³Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Gitlab CI. ΠΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Gitlab CI, ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΉΠ»Π° .gitlab-ci.yml Π² ΠΊΠΎΡΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π’ΡΠΊ ΠΎΠΏΠΈΡΠ²Π°ΠΌΠ΅, ΡΠ΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ° ΠΎΡ ΡΡΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°ΡΠΎ ΡΠ΅ΡΡ, ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅.
ΠΠΈΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ docker-compose, Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π΅ ΡΠ°ΠΌΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π±Π΅ΠΊΠ΅Π½Π΄.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΊΠ°Π·Π²Π°ΠΌΠ΅, ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΡ ΡΠ΅ΡΡΠΎΠ²Π΅.
ΠΠΊΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈ Π½Π΅ Π²ΡΡΡΠ°Ρ ΠΊΠΎΠ΄ Π·Π° Π³ΡΠ΅ΡΠΊΠ°, ΡΠΎΠ³Π°Π²Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΊΡΠΌ Π²ΡΠΎΡΠΈΡ Π΅ΡΠ°ΠΏ ΠΎΡ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ.
ΠΡΠ°ΠΏΡΡ Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ Π²Π½Π΅Π΄ΡΠ΅Π½ Π·Π° Π΅ΡΠ°ΠΏΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Ρ ΠΌΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Ρ Π½ΡΠ»Π΅Π² ΠΏΡΠ΅ΡΡΠΎΠΉ.
ΠΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½ΠΎ Π³Π°ΡΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΠ²Π΄ΠΈΠ³Π°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΡΡΠ±ΡΠ°Π½ΠΈ Π½Π° ΠΏΡΡΠ²ΠΈΡ Π΅ΡΠ°ΠΏ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ.
ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ Π·Π° ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅.
ΠΠΌΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°, ΡΠ΅ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΡΠ½Π°ΡΡ ΡΠ°ΠΌΠΎ Π·Π° Π³Π»Π°Π²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½.
ΠΡΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π΄ΡΡΠ³ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°.
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Ρ ΡΠ°Π·Π³ΡΡΡΠ°Π½ΠΈΡ ΠΏΠΎ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅.
ΠΠ° Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Gitlab Runner.
Π’Π°Π·ΠΈ ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Golang. Π’ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ», ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΎ Π² ΡΠ²Π΅ΡΠ° Π½Π° Golang, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΌΠ΅ Gitlab Runner.
ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΊΠ»ΡΡΠ° Π² ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° Gitlab.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄.
ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ Gitlab Runner ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ (Shell, Docker, VirtualBox, SSH)
ΠΠΎΠ΄ΡΡ Π½Π° Gitlab Runner ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΡΠΈ Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΠΈΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° .gitlab-ci.yml.
ΠΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²ΠΈΠ·ΡΠ°Π»Π½ΠΎ Π² Gitlab Π² ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠΌΠ΅ ΡΠ²ΡΡΠ·Π°Π»ΠΈ GItlab CI, ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ»Π°Π³, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°.
ΠΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΠΈ 4 ΠΌΠΈΠ½ΡΡΠΈ, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π» Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ Π½Π΅ Π΅ ΠΏΡΠΈΡΠΈΠ½ΠΈΠ» Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΡΠ±Π»ΠΈΠ·ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅. Π’ΡΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ Π΄Π²Π΅ ΡΡΡΡΠΎΡΠ½ΠΈΡ Π²Π΅ΡΠ΅ ΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈ. Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ ΠΈ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ ΠΏΡΠΈ ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅.
ΠΠΊΠΎ ΡΡΠ°ΠΊΠ½Π΅ΠΌ Π²ΡΡΡ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΡΠΎΠ³Π°Π²Π° ΡΠ΅ ΠΈΠΌΠ° ΠΊΠΎΠ½Π·ΠΎΠ»Π΅Π½ ΠΈΠ·Ρ ΠΎΠ΄ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΠ° ΡΠΏΠΎΡΠ΅Π΄ .gitlab-ci.yml.
ΠΡΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²Π° ΠΈΡΡΠΎΡΠΈΡ. ΠΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ ΠΈΠΌΠ° ΡΡΠΏΠ΅ΡΠ½ΠΈ ΠΎΠΏΠΈΡΠΈ. ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π°Π΄Π°Ρ ΡΠ΅ΡΡΠΎΠ²Π΅, Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΊΡΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° ΠΈ Π΅ΡΠ°ΠΏΠ½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π΅ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°.
ΠΠ°ΠΊΠ²ΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π½Π° ΡΡΠ΅Π½Π°ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π²Π½Π΅Π΄ΡΠΈΡ ΠΌΠ΅ Π΄ΠΎΠΊΠ΅Ρ? ΠΠ°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΈ ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π±ΡΡ Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ, Π° Π½Π΅ ΡΡΠ»Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠ° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ°Π·Π±ΠΈΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΎ Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ.
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΌΠ΅ ΡΠΎΠ²Π°, ΠΈΠΌΠ°Ρ ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Docker-compose ΡΡΠ·Π΄Π°Π²Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°ΡΠΊΠΎ ΠΈ Π½Π΅ Π²ΠΈΠΆΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° ΡΡΡΠ΅Π΄Π°.
ΠΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ΄Π²ΠΈΠΆΠ²Π°ΠΌΠ΅, ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΠΌΡΠ΅ΠΆΠ°ΡΠ° Π² Docker ΡΡΡΠ½ΠΎ. Π Docker-compose Π±Π΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°ΠΊΠ°Π²Π° ΠΌΡΠ΅ΠΆΠ° Π·Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ.
Π’Π°ΠΊΠ° Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΡΠ°Π·ΠΈ ΠΌΡΠ΅ΠΆΠ°, Π²ΠΈΠΆΠ΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π² Π΄ΡΡΠ³ΠΈ ΡΠ°ΡΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΡΡΠ΅Π½Π°ΡΠ° Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈ.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π·Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ Π΄ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΎ, Π΅ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎΡΡ 80 ΠΈΠ»ΠΈ 443, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ Π² WEB.
ΠΠ°ΠΊ Π³ΠΎ ΡΠ΅ΡΠΈΡ ΠΌΠ΅? ΠΠ°Π·Π½Π°ΡΠΈΡ ΠΌΠ΅ Π΅Π΄ΠΈΠ½ Gitlab Runner Π·Π° Π²ΡΠΈΡΠΊΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ.
Gitlab Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Gitlab Runners, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΡΠ²ΠΎΠΉ ΡΠ΅Π΄ ΠΏΠΎ Ρ Π°ΠΎΡΠΈΡΠ΅Π½ Π½Π°ΡΠΈΠ½ ΠΈ ΡΠ΅ Π³ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ.
ΠΠ° Π΄Π° Π½ΡΠΌΠ°ΠΌΠ΅ ΠΊΡΡΠ°, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡ ΠΌΠ΅ Π³ΡΡΠΏΠ°ΡΠ° ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π΄ΠΎ Π΅Π΄ΠΈΠ½ Gitlab Runner, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠΏΡΠ°Π²Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π½Π°ΡΠΈΡΠ΅ ΠΎΠ±Π΅ΠΌΠΈ.
ΠΡΠ΅ΠΌΠ΅ΡΡΠΈΡ ΠΌΠ΅ nginx-proxy Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΡΠΊΡΠΈΠΏΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ ΠΌΡΠ΅ΠΆΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π² Π½Π΅Π³ΠΎ.
ΠΠ°ΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠΌΠ° Π΅Π΄Π½Π° ΠΌΡΠ΅ΠΆΠ°, Π° Π±Π°Π»Π°Π½ΡΡΠΎΡΡΡ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΡΠ΅ΠΆΠΈ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠΊΡΠΈΡΠ° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠ΅Π· ΠΈΠΌΠ΅Π½Π° Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ΠΈ.
ΠΠ°ΡΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΈΠ΄Π²Π°Ρ ΠΏΡΠ΅Π· Π΄ΠΎΠΌΠ΅ΠΉΠ½Π° Π½Π° ΠΏΠΎΡΡ 80 ΠΈ ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½Π° Π³ΡΡΠΏΠ°, ΠΊΠΎΡΡΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΡΠΎΠ·ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½.
ΠΠ°ΠΊΠ²ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠΌΠ°ΡΠ΅? Π’ΠΎΠ²Π° Π΅, ΠΊΠΎΠ΅ΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΊΠ°ΡΠΎ root ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. Π’ΠΎΠ²Π° Π΅ root, ΠΊΠΎΠΉΡΠΎ Π½Π΅ Π΅ ΡΠ°Π²Π΅Π½ Π½Π° root Ρ ΠΎΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
ΠΠΊΠΎ ΠΎΠ±Π°ΡΠ΅ Π²Π»Π΅Π·Π΅ΡΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎΠΉ ΡΠ΅ Π±ΡΠ΄Π΅ root ΠΈ ΡΠ°ΠΉΠ»ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π² ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΏΠΎΠ»ΡΡΠ°Π²Π° root ΠΏΡΠ°Π²Π°.
ΠΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π΅ Π²Π»ΡΠ·ΡΠ» Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ» ΡΠ°ΠΌ Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΊΠΎΠΈΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π°ΠΏΡΡΠ½Π°Π» ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎΠ³Π°Π²Π° ΡΠΎΠΉ ΠΈΠΌΠ° ΡΠ°ΠΉΠ» Π² ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π΄ΠΎ ΠΊΠΎΠΉΡΠΎ Π½ΡΠΌΠ° Π΄ΠΎΡΡΡΠΏ.
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ? ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ?
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΡΠ΅ΡΡΠΎ Π½ΡΠΌΠ°ΠΌΠ΅ ΡΡΡΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π³ΡΡΠΏΠ° (UID) ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (GID).
ΠΠ° Π΄Π° ΡΠ°Π·ΡΠ΅ΡΠΈΠΌ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Ρ ID 1000.
Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° ΡΡΠ²ΠΏΠ°Π΄Π½Π° Ρ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΠΏΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Ubuntu. Π Π² Ubuntu ΠΏΡΡΠ²ΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» ΠΈΠΌΠ° ID 1000.
ΠΠΌΠ°ΠΌΠ΅ Π»ΠΈ ΠΏΠ»Π°Π½ΠΎΠ²Π΅?
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° Docker. ΠΡΠΎΠ΅ΠΊΡΡΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° Π°ΠΊΡΠΈΠ²Π½ΠΎ, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ. ΠΠ°Π½Π½ΠΈΡΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ ΠΏΡΠ΅Π΄ΠΈ Π΄Π²Π°-ΡΡΠΈ ΠΌΠ΅ΡΠ΅ΡΠ°, Π²Π΅ΡΠ΅ Π»Π΅ΠΊΠ°-ΠΏΠΎΠ»Π΅ΠΊΠ° ΠΎΡΡΠ°ΡΡΠ²Π°Ρ.
ΠΡΠΊΠΎΠΈ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ΡΠΈΡ ΠΌΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π²Π΅ΡΠ΅ ΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈ ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°.
Π’Π°ΠΊΠ° ΡΠ΅ ΠΈΡΠΊΠ°ΠΌ Π²Π΅ΡΠ΅ Π΄Π° ΠΎΡΠΈΠ΄Π° ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ, Π·Π° Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΡΠΌ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡΡΠ°.
ΠΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π½Π° Docker, Π½Π°ΡΠ΅ΡΠ΅Π½ Docker Swarm, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π»ΠΈΠ·Π° ΠΎΡ ΠΊΡΡΠΈΡΡΠ°. ΠΡΠΊΠ°ΠΌ Π΄Π° ΠΏΡΡΠ½Π° Π½Π΅ΡΠΎ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎ, Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Docker Swarm.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π·Π° Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° Ρ Π°ΠΉΠ²Π΅ΡΠ° ΠΏΡΠ°Π²ΡΡ Π½Π΅ΡΠ΄ΠΎΠ±Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΡΡΡΠΏΠΈ. Π‘Π΅Π³Π° ΡΡΡΠΏΠΈΡΠ΅ ΡΠ° ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ. Π’Π΅ ΡΠ° ΡΠ°Π·ΠΏΡΡΡΠ½Π°ΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. ΠΠ΄Π½Π° ΠΎΡ Π·Π°Π΄Π°ΡΠΈΡΠ΅ Π΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ΄ΠΎΠ±Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡΠ΅Π· ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com