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