
ΠΡΠ΅Π΄ΠΈ Π²ΡΠΈΡΠΊΠΎ, ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ΠΎΡΠΈΡ. ΠΠ°ΠΊΠ²ΠΎ Π΅ ?
Π‘ ΠΏΡΠΎΡΡΠΈ Π΄ΡΠΌΠΈ, ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° SaaS ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠΎ ΠΏΠΎΠΌΠ°Π³Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΈ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°ΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ°Ρ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΡΡ Π΅ ΡΡΡΡΠ°Π²Π΅Π½ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Heroku.
ΠΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° Π΄Π²Π°Π½Π°Π΄Π΅ΡΠ΅ΡΡΠ΅ ΡΠ°ΠΊΡΠΎΡΠ° (The Twelve-Factor App) ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Π° Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ (backing services) (Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΎΠΏΠ°ΡΠΊΠΈ Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠ΅Ρ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Ρ.Π½.).
ΠΡΠ°ΡΠΊΠΎ Π·Π° ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ°ΠΊΡΠΎΡΠΈ, Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±Π°Π·ΠΈΡΠ° ΡΠ°Π·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ:
- ΠΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° β ΠΠ΄Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°, ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅, β ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½ΠΈΡ
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β Π―ΡΠ½ΠΎ ΠΎΠ±ΡΠ²Π΅ΡΠ΅ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°ΠΉΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ β ΠΠ°ΠΏΠ°Π·Π²Π°ΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅
- ΠΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ (Backing Services) β ΠΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°ΠΉΡΠ΅ Π²ΡΠ½ΡΠ½ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ (backing services) ΠΊΠ°ΡΠΎ ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ
- Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅, ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ β Π‘ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠΉΡΠ΅ Π΅ΡΠ°ΠΏΠΈΡΠ΅ Π½Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅
- ΠΡΠΎΡΠ΅ΡΠΈ β ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΊΠ°ΡΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π·Π°ΠΏΠ°Π·Π²Π°Ρ Π²ΡΡΡΠ΅ΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ (stateless)
- Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ (Port binding) β ΠΠ·Π½Π°ΡΡΠΉΡΠ΅ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΡΡΠ΅Π· ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅
- ΠΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ β ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ
- Π£ΡΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΠΎΡΡ (Disposability) β ΠΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡΡΠ° ΡΡΠ΅Π· Π±ΡΡΠ· ΡΡΠ°ΡΡ ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°
- ΠΠ°ΡΠΈΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°/ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ β ΠΡΡΠΆΡΠ΅ ΡΡΠ΅Π΄ΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ (staging) ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ (production) Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ
- ΠΠΎΠ³ΠΎΠ²Π΅ (Logs) β ΠΡΠ·ΠΏΡΠΈΠ΅ΠΌΠ°ΠΉΡΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠΎΠΊ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ
- ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ β ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΉΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈ/ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠΈ Π·Π°Π΄Π°ΡΠΈ ΡΡΠ΅Π· Π΅Π΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ
ΠΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ 12-ΡΠ΅ ΡΠ°ΠΊΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ:
- β Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½ Π·Π° ΠΏΡΠΎΡΠΈΡ
- β ΠΎΡΠΈΡΠΈΠ°Π»Π΅Π½ ΠΏΡΠ΅Π²ΠΎΠ΄
- β ΡΠ²Π΅ΠΆ ΠΏΠΎΠ³Π»Π΅Π΄ Π²ΡΡΡ Ρ 12-ΡΠ΅ ΡΠ°ΠΊΡΠΎΡΠ° Ρ ΡΠ΅Π» ΡΡΡΠ²ΡΡΡΠ΅Π½ΡΡΠ²Π°Π½Π΅.
ΠΠ°ΠΊΠ²ΠΎ Π΅ Blue-Green deployment?
Blue-Green Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π΅ Π½Π°ΡΠΈΠ½ Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ ΠΏΠΎ Π½Π°ΡΠΈΠ½, ΠΊΠΎΠΉΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ Π½Π΅ Π·Π°Π±Π΅Π»ΡΠ·Π²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π°. Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ Π½ΡΠ»Π΅Π² Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π΅ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ.
ΠΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡ Π΅ΠΌΠ° BG Deploy ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.

- Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΈΠΌΠ° 2 ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ²ΡΡΠ° Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² ΠΊΠΎΠ΄, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈ ΠΈΠΌΠ° ΡΡΡΠ΅Ρ (Π±Π°Π»Π°Π½ΡΡΠΎΡ).
- Π ΡΡΠ΅ΡΡΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π½Π°ΡΠΎΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΡΡΠ²ΡΡΠΈΡΠ΅ (Π·Π΅Π»Π΅Π½).
- Π ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π²Π΅ΡΡΠΈΡ, ΡΠ΅Π»ΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π° Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΡΡΠ²ΡΡ (ΡΠΈΠ½), ΠΊΠΎΠΉΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ.
- Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ΡΡ Π½Π° ΡΠΈΠ½ΠΈΡ ΡΡΡΠ²ΡΡ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π΅Π½, Π½Π° ΡΡΡΠ΅ΡΠ° ΡΠ΅ Π΄Π°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ ΠΎΡ Π·Π΅Π»Π΅Π½ Π½Π° ΡΠΈΠ½ ΡΡΡΠ²ΡΡ.
- Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π²ΠΈΠΆΠ΄Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ΄Π° ΠΎΡ ΡΠΈΠ½ΠΈΡ ΡΡΡΠ²ΡΡ.
- ΠΡΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅, Π·Π΅Π»Π΅Π½ ΡΡΡΠ²ΡΡΡΡ ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ ΡΠ΅Π·Π΅ΡΠ²Π½Π° ΠΊΠΎΠΏΠΈΡ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠ½ ΡΡΡΠ²ΡΡ ΠΈ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΏΡΠΎΠ²Π°Π» ΠΈ Π±ΡΠ³ΠΎΠ²Π΅, ΡΡΡΠ΅ΡΡΡ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΡΠΌ Π·Π΅Π»Π΅Π½ ΡΡΡ ΡΡΠ°ΡΠ°ΡΠ° ΡΡΠ°Π±ΠΈΠ»Π½Π° Π²Π΅ΡΡΠΈΡ, Π° Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π·Π° Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅.
- Π Π² ΠΊΡΠ°Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π° Π·Π΅Π»Π΅Π½ ΡΡΡΠ²ΡΡ. Π ΡΠ»Π΅Π΄ Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΡΡΡΠ΅ΡΡΡ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π·Π°ΡΠ²ΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° Π·Π΅Π»Π΅Π½ ΡΡΡΠ²ΡΡ.
ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅ ΠΈ Π½Π° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄ Π½Π΅ Π±ΠΈ ΡΡΡΠ±Π²Π°Π»ΠΎ Π΄Π° ΠΈΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ.
ΠΠΎ ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΆΠΈΠ²Π΅Π΅ΠΌ Π² ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡ ΡΠ²ΡΡ, Π²Π°ΡΠΈΠ°Π½ΡΡΡ Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅, ΠΊΠ°ΠΊΡΠΎ Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡ
Π΅ΠΌΠ°, Π½Π΅ Π½ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠΆΠ΄Π°. ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ Π½Π΅Ρ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
ΠΡΠ΅Π΄Π½ΠΈ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΡΠ²Π΅ΡΠΈ
ΠΡΠΊΠ°Π· ΠΎΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡ: Π ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΡΠ° ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ/ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΈ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΡΠΈΡΠ°Ρ ΡΠ°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ Ρ ΡΠ΅Π± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° (ΠΈΠ·Π½Π΅Π½Π°Π΄Π°!), Ρ PHP ΠΈ Docker.
Π ΡΠΎΡΠΊΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΈΠΌΠ° ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΊΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΠΎΡΠΈΡ ΠΏΠΎ ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ°, ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ ΡΠ΅ ΠΊΡΠΌ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΊΡΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ.
1. ΠΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ FTP ΠΈ FileZilla, Π·Π° Π΄Π° ΠΊΠ°ΡΠ²Π°ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΡΡΡΠ²ΡΡΠΈΡΠ΅ ΠΏΠΎ Π΅Π΄ΠΈΠ½, Π½Π΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΉΡΠ΅ ΠΊΠΎΠ΄Π° Π½ΠΈΠΊΡΠ΄Π΅, ΠΎΡΠ²Π΅Π½ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈΡ ΡΡΡΠ²ΡΡ.
Π ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°, ΡΠΎΠ΅ΡΡ, ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ ΠΈΠ΄Π²Π° ΠΎΡ Π΅Π΄Π½ΠΎ Git Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅. Π‘ΡΡΠ²ΡΡΠΈΡΠ΅ (production, staging, test1, test2 ...) ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΊΠΎΠ΄Π° ΠΎΡ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΠ±Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΏΠΎΡΡΠΈΠ³Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡ Π½Π° ΠΊΠΎΠ΄Π°.
2. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π‘Π²Π°Π»ΡΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΠΊΠΎΡΠ΅Π½Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ°Π²ΡΡ ΠΏΡΠΎΡΡΠΎ ΡΡΠ΅Π· ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠ½Π΅ Π½Π° Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Ρ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°. ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° Ρ ΠΎΡΡΠΈΠ½Π³ ΡΡΡΠ²ΡΡΠ°, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ°Π±ΠΎΡΡΡ ΠΎΡΠ΅ 20 ΡΡΠ»ΡΠ³ΠΈ.
ΠΡΠΎΠ΅ΠΊΡΡΡ Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΡΡΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΡΠΊ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (ΠΏΠΎΠ΄ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌ ΠΈ ΡΡΠ΅Π΄Π°ΡΠ°). ΠΡΠΈΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ.
ΠΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ Composer ΠΈ Docker.
Composer β ΠΏΠ°ΠΊΠ΅ΡΠ΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° PHP Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Composer Π΄Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ Π²Π΅ΡΡΠΈΠΈ ΡΡΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ ΡΡΡΠΎΠ³ΠΎ ΠΈ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΡΠ½ΠΎ. ΠΠ° ΡΡΡΠ²ΡΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ 20 ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΈΠΌΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΡΠΏΠΈΡΡΠΊ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π΅Π·Π°Π²ΠΈΡΠ΅Ρ ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅.
Docker β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΠ° ΡΡΠ΅Π΄Π°ΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Ρ composer, Π½ΠΎ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° PHP, Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π±Π΅Π· Π΄Π° Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ Π½ΠΈΡΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΎ. Π Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠΈΡΠ°ΠΌΠ΅ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΈ ΡΡΠ΅Π΄Π°ΡΠ° Π½Π° Ρ ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. Π’ΠΎΠ΅ΡΡ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° ΡΡΡΠ²Π΅ΡΠ°, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ ΡΡΠ΅Π· Docker, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΡΠΊΠ°ΠΊΡΠ² Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½Π° ΡΡΠ΅Π΄Π°.
3. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
ΠΠ°ΠΏΠ°Π·Π²Π°ΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΠΊΠΎΠ΄Π°. ΠΡΠ΄Π΅Π»Π½ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π·Π° ΡΠ΅ΡΡΠΎΠ²ΠΈΡ ΡΡΡΠ²ΡΡ, ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ°. ΠΡΠΈΠ²ΡΡΠΆΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΡΠ΅Π΄Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ if else.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ β ΡΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎΡΠΎ, Ρ ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΡΠ°Π·Π³ΡΡΡΠ°Π½ΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° (deployment). Π ΠΈΠ΄Π΅Π°Π»Π½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΡΡΠ΅Π· ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° (env vars).
Π’ΠΎΠ΅ΡΡ, Π΄ΠΎΡΠΈ Π°ΠΊΠΎ ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»Π° .config.prod .config.local ΠΈ Π³ΠΈ ΠΏΡΠ΅ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΡΠ°Π·Π²ΠΎΡΠ°ΡΠ°Π½Π΅ΡΠΎ Π² .config (ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΎΡ ΠΊΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ) β ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² ΡΠ°ΠΊΡΠ² ΡΠ»ΡΡΠ°ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ ΡΠ΅ Π΅ ΠΎΠ±ΡΠΎΠ΄ΠΎΡΡΡΠΏΠ½Π° Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈΡ ΡΡΡΠ²ΡΡ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠ°Π½ΠΈ. ΠΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ (CI/CD) ΠΈ Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½ΡΠ°.
4. ΠΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ (Backing Services)
Π‘ΡΡΠΈΠΊΡΠ½ΠΎ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°ΠΉΡΠ΅ Ρ ΠΎΠΊΠΎΠ»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ Π·Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ ΡΡΠ»ΡΠ³ΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡΠ΅Π΄ΠΈ.
ΠΡΡΡΠ½ΠΎΡΡ ΡΠΎΠ·ΠΈ ΠΏΡΠ½ΠΊΡ ΡΠΈΠ»Π½ΠΎ ΡΠ΅ ΠΏΡΠΈΠΏΠΎΠΊΡΠΈΠ²Π° Ρ ΠΏΡΠ½ΠΊΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π±Π΅Π· Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠ½ΠΊΡ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΡΡ Π½ΠΎΡΠΌΠ°Π»Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ·ΠΎΠ±ΡΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΎΡΠΏΠ°Π΄Π½Π΅.
ΠΡΠΈΡΠΊΠΈ Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ, ΠΊΠ°ΡΠΎ ΡΡΡΠ²ΡΡΠΈ Π½Π° ΠΎΠΏΠ°ΡΠΊΠΈ, Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠ΅ΡΠΈΡΠ°ΡΠΈ ΡΡΠ»ΡΠ³ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΠΊΠ°ΠΊΡΠΎ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°, ΡΠ°ΠΊΠ° ΠΈ Π·Π° Π²ΡΠ½ΡΠ½Π°ΡΠ° / ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°. Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, ΠΌΠΎΠ³Π° ΠΏΠΎ Π²ΡΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΏΡΠΎΠΌΠ΅Π½ΡΠΉΠΊΠΈ Π²ΡΡΠ·ΠΊΠ°ΡΠ°, Π΄Π° Π·Π°ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡΡΠ° ΠΊΡΠΌ Π±Π°Π·Π° #1 Ρ Π±Π°Π·Π° #2 Π±Π΅Π· ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ»ΠΈ Π·Π°Π±Π΅Π»ΡΠ·Π²Π°ΠΉΠΊΠΈ Π½Π°ΠΏΡΠ΅Π΄, ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π΅, ΡΠ΅ ΠΏΡΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, Π½ΡΠΌΠ° Π΄Π° ΡΡΡΠ±Π²Π° Π·Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΡΡΠ²ΡΡ Π·Π° ΠΊΠ΅Ρ Π΄Π° ΡΠΊΠ°Π·Π²Π°ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ Π½Π°ΡΠΈΠ½.
5. Π‘Π±ΠΎΡΠΊΠ°, ΡΠ΅Π»ΠΈΠ·, ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅
ΠΠΌΠ°ΠΉΡΠ΅ Π½Π° ΡΡΡΠ²ΡΡΠ° ΡΠ°ΠΌΠΎ ΡΠΈΠ½Π°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π°, Π±Π΅Π· ΡΠ°Π½ΡΠΎΠ²Π΅ Π·Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΠ·Π° Π½Π°Π·Π°Π΄. ΠΠ΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° Π·Π°ΠΏΡΠ»Π²Π°ΡΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΠΎΠΉΡΠΎ ΡΠΈ ΠΌΠΈΡΠ»ΠΈ, ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΡΠ½Π΅ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° Ρ Π³ΡΠ΅ΡΠΊΠ°, Π΅ Π»ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡ!
ΠΡΠΈΡΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ.
ΠΠΌΠ°ΠΉΡΠ΅ ΡΠ°Π½Ρ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅Π»ΠΈΠ·ΠΈ, ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΉΠΊΠΈ Π² Π±ΡΡΠ· Π΄ΠΎΡΡΡΠΏ ΡΡΠ°ΡΠΈ ΠΊΠΎΠΏΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (Π²Π΅ΡΠ΅ ΡΡΠ±ΡΠ°Π½ΠΈ ΠΈ Π³ΠΎΡΠΎΠ²ΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ°), ΡΠ°ΠΊΠ° ΡΠ΅ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π΄Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ. Π’ΠΎΠ΅ΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎ ΠΈΠΌΠ° ΠΏΠ°ΠΏΠΊΠ° releases ΠΈ ΠΏΠ°ΠΏΠΊΠ° current, ΠΈ ΡΠ»Π΅Π΄ ΡΡΠΏΠ΅ΡΠ΅Π½ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΠΏΠ°ΠΏΠΊΠ°ΡΠ° current ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ Π½ΠΎΠ²ΠΈΡ ΡΠ΅Π»ΠΈΠ·, ΠΊΠΎΠΉΡΠΎ Π΅ Π²ΡΡΡΠ΅ releases Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΡΠ΅Π»ΠΈΠ·Π°.
Π’ΡΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ ΡΠΏΠΎΠΌΠ½ΠΈΠΌ Π·Π° Blue-Green deployment, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π° ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈ Π΄ΠΎΡΠΈ ΡΡΠ΅Π΄ΠΈ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π°Π·Π°Π΄.
6. ΠΡΠΎΡΠ΅ΡΠΈ
Π‘ΡΡ ΡΠ°Π½ΡΠ²Π°ΠΉΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½ΠΎ Π² ΡΠ°ΠΌΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ΅ΡΠΈΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ. ΠΡΠ½ΠΎΠ²Π°Π²Π°ΠΉΡΠ΅ ΡΠ΅ Π½Π° ΡΠΎΠ²Π°, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ ΠΈ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΠΉΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅.
ΠΡΠ½ΠΎΡΠ½ΠΎ ΡΠ΅ΡΠΈΠΈΡΠ΅, ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΉΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ°ΠΌΠΎ Π² ΠΊΠ΅ΡΠ°, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ (memcached, redis), ΡΠ°ΠΊΠ° ΡΠ΅ Π΄ΠΎΡΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ 20 ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΡΡ , ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ Ρ ΠΊΠ΅ΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΡΡΡΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΅ Π±ΠΈΠ», ΡΠ°Π±ΠΎΡΠ΅ΠΉΠΊΠΈ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π΄ΡΡΠ³ ΠΏΡΠΎΡΠ΅Ρ. Π‘ ΡΠ°ΠΊΡΠ² ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠΏΠΈΡ Π½Π° Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅, Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ ΠΈ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Π΄Π°Π½Π½ΠΈ.
7. ΠΡΠΈΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ (Port binding)
Π‘Π°ΠΌΠΎ ΡΠ΅Π± ΡΡΡΠ²ΡΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π½Π°Π΅ ΠΊΠ°ΠΊ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ. Π Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π²ΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ Π½Π°ΠΏΡΠ°Π²ΠΎ Π²ΡΡΡΠ΅ Π² ΡΠ΅Π± ΡΡΡΠ²ΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΠΎ PHP ΠΌΠΎΠ΄ΡΠ» Π² Apache.
ΠΡΠΈΡΠΊΠΈ Π²Π°ΡΠΈ ΡΡΠ»ΡΠ³ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π΅Π΄Π½Π° Π·Π° Π΄ΡΡΠ³Π° ΡΡΠ΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π½ΡΠΊΠ°ΠΊΡΠ² Π°Π΄ΡΠ΅Ρ ΠΈ ΠΏΠΎΡΡ (localhost:5432, localhost:3000, nginx:80, php-fpm:9000), Ρ.Π΅. ΠΎΡ nginx ΠΌΠΎΠ³Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠ° Π΄ΠΎΡΡΡΠΏ ΠΈ Π΄ΠΎ php-fpm, ΠΈ Π΄ΠΎ postgres, Π° ΠΎΡ php-fpm Π΄ΠΎ postgres ΠΈ nginx, ΠΈ Π²ΡΡΡΠ½ΠΎΡΡ ΠΎΡ Π²ΡΡΠΊΠ° ΡΡΠ»ΡΠ³Π° ΠΌΠΎΠ³Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠ° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΄ΡΡΠ³Π° ΡΡΠ»ΡΠ³Π°. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π½Π΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π½Π° Π΄ΡΡΠ³Π° ΡΡΠ»ΡΠ³Π°.
8. ΠΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ
Π Π°Π±ΠΎΡΠ΅ΡΠ΅ Ρ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ, Π·Π°ΡΠΎΡΠΎ Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΡΠΏΠ΅ΡΡ Π΄Π° ΡΡΠΆΠΈΡΠ΅Π»ΡΡΠ²Π°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠ°!
ΠΡΡΠ°Π²ΡΠΉΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅. Docker Swarm Π΅ ΠΎΡΠ»ΠΈΡΠ΅Π½ Π·Π° ΡΠΎΠ²Π°.
Docker Swarm Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΡΠ°ΠΊΠ° ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Π½Π° Π΅Π΄Π½Π° ΠΌΠ°ΡΠΈΠ½Π°.
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° swarm ΠΌΠΎΠ³Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΡΡΡΡΠΈ ΡΠ΅ ΠΎΡΠ΄Π΅Π»Ρ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΈ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΎΡ Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° ΡΡΠ»ΡΠ³Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌ, Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΉΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎΡΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ Π³ΠΈ ΠΏΡΠΎΠΊΡΠΈΡΠ° ΠΊΡΠΌ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½, Π°ΠΊΠΎ Π²ΠΈΠ΄Ρ, ΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΠ²ΡΡΠ° Π΅ Π½Π°ΡΠ°ΡΠ½Π°Π»ΠΎ, ΠΌΠΎΠ³Π° Π΄Π° Π΄ΠΎΠ±Π°Π²Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»Ρ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ.
9. Π£ΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ (Disposability)
ΠΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΎΠΏΠ°ΡΠΊΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈ Π΄Π°Π½Π½ΠΈ. Π£Π±ΠΈΠΉΡΡΠ²ΠΎΡΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ ΡΡΡΠ±Π²Π° Π΄Π° Π²Π»ΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΡΠ»ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΊΠΎ Π΅Π΄Π½Π° ΡΡΠ»ΡΠ³Π° ΠΏΠ°Π΄Π½Π΅ β Π²ΡΠΈΡΠΊΠΎ ΠΏΠ°Π΄Π°.
ΠΡΠ΅ΠΊΠΈ ΠΏΡΠΎΡΠ΅Ρ ΠΈ ΡΡΠ»ΡΠ³Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΏΠΎ Π²ΡΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΡΠΎΠ²Π° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°ΡΡΠ³Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ (Π½Π΅ ΡΡΠ°Π²Π° Π΄ΡΠΌΠ° Π·Π° ΡΠΎΠ²Π°, ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ° Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ Π½Π°Π»ΠΈΡΠ½Π° Π·Π° Π΄ΡΡΠ³Π° ΡΡΠ»ΡΠ³Π°, Π° Π·Π° ΡΠΎΠ²Π°, ΡΠ΅ Π΄ΡΡΠ³Π° ΡΡΠ»ΡΠ³Π° Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈ ΡΠ»Π΅Π΄ ΡΠ°Π·ΠΈ). ΠΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π²ΡΡΡΠ²Π°Ρ ΠΏΠ»Π°Π²Π½ΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΈ ΡΡΡ Π½ΠΎΡΠΎ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π΄Π°Π½Π½ΠΈΡΠ΅ Π΄Π° Π½Π΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ²ΡΠ΅Π΄Π΅Π½ΠΈ ΠΈ ΠΏΡΠΈ ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. Π’ΠΎΠ΅ΡΡ Π΄ΠΎΡΠΈ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ ΡΠΏΠΈΡΠ°Π½Π΅, Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΡΡΠ°Π΄Π°Ρ (ΡΡΠΊ Π±ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Π» ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΡΠ°Π±ΠΎΡΡΡ ΡΠ°ΠΌΠΎ Π½Π° Π³ΡΡΠΏΠΈ, ΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΎΡ Π³ΡΡΠΏΠ°ΡΠ° Π½Π΅ Π΅ Π±ΠΈΠ»Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π° ΠΈΠ»ΠΈ Π΅ Π±ΠΈΠ»Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π° Ρ Π³ΡΠ΅ΡΠΊΠ°, ΡΠΎ Π½ΠΈΡΠΎ Π΅Π΄Π½Π° Π΄ΡΡΠ³Π° Π·Π°ΡΠ²ΠΊΠ° ΠΎΡ Π³ΡΡΠΏΠ°ΡΠ° Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ΅Π°Π»Π½ΠΎ).
10. ΠΠ°ΡΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°/ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
ΠΡΠΎΠ΄Π°ΠΊΡΠ΅Π½, ΡΡΠ΅ΠΉΠ΄ΠΆΠΈΠ½Π³ ΠΈ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ. ΠΠ° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π° ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ Yii Lite, Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ Yii, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Π½Π° ΠΏΡΠΎΠ΄Π΅!
Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½ΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠ΄Π° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠΎΡΡΠΈ Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΡΡΠ΅Π΄Π° (Π½Π΅ ΡΡΠ°Π²Π° Π΄ΡΠΌΠ° Π·Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎ ΠΆΠ΅Π»ΡΠ·ΠΎ). Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π° ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈ Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΡΠΆΠΈΡΠ΅Π» ΠΎΡ Π΅ΠΊΠΈΠΏΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π° Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΎΠ±ΡΡΠ΅Π½ devops ΠΎΡΠ΄Π΅Π», ΠΊΠΎΠΉΡΠΎ ΡΠ°ΠΌΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½Π° ΡΠΈΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π΄ΠΈΠ³Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π°.
Π’ΡΠΊ ΡΡΡΠΎ Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Docker. ΠΡΠΈ ΡΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ ΡΠΎΡΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° docker ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΡΡΠ΅Π΄Π° ΠΊΠ°ΠΊΡΠΎ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ°, ΡΠ°ΠΊΠ° ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Π΄ΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π΅Π΄Π½Π°-Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
11. ΠΡΡΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ (Logs)
ΠΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ! Π€Π°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΠΈ Π±Π°Π·ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΡΠΈΡΡΠ²Π°Ρ. ΠΡΠΎΡΡΠΎ ΡΠ΅ ΠΊΡΠΏΠΈΠΌ Π΅Π΄ΠΈΠ½ ΡΠ²ΡΡΠ΄ Π΄ΠΈΡΠΊ Π½Π° 9000 ΠΠ΅ΡΠ° Π±Π°ΠΉΡΠ° ΠΈ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄.
ΠΡΠΈΡΠΊΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΊΠ°ΡΠΎ ΠΏΠΎΡΠΎΠΊ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ. Π‘Π°ΠΌΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅. ΠΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π»ΠΈΠ±ΠΎ Π² stdout, Π»ΠΈΠ±ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΊΠ°ΡΠΎ udp, Π·Π° Π΄Π° Π½Π΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ° ΡΠ°Π·ΠΈ ΡΠ΅Π» graylog Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ. Graylog, ΠΏΡΠΈΠ΅ΠΌΠ°ΠΉΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΏΠΎ udp (ΠΏΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΡΠ°ΠΊΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π·Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ°), Π½Π΅ ΠΏΡΠ΅ΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ Π½ΠΈΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ ΠΈ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π° ΡΠ°ΠΌΠΎ ΡΡΡ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅. ΠΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ.
12. ΠΠ°Π΄Π°ΡΠΈ Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ΡΠΎ
ΠΠ° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ Ρ.Π½. ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅Π½ Π΅Π½Π΄ΠΏΠΎΠΈΠ½Ρ Π² API, ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΉΡΠΎ Π΄Π²Π° ΠΏΡΡΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π΄ΡΠ±Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΎ. ΠΠΎ Π²ΠΈΠ΅ Π½Π΅ ΡΡΠ΅ Π³Π»ΡΠΏΠ°ΡΠΈ Π΄Π° Π½Π°ΡΠΈΡΠ½Π΅ΡΠ΅ 2 ΠΏΡΡΠΈ, Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π΅ Π½ΠΈ ΡΡΡΠ±Π²Π°Ρ.
ΠΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π² ΡΡΡΠ°ΡΠ° ΡΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΡΠΎ Π΅ ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄, Π½Π° Π½ΠΈΠ²ΠΎ Π²Π΅ΡΡΠΈΠΈ. Π’ΠΎΠ΅ΡΡ, Π°ΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π½ΡΠΌΠ° Π΄Π° Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ Π½Π° ΡΡΠΊΠ°, ΠΏΡΠΎΠΌΠ΅Π½ΡΠΉΠΊΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠΉΠΊΠΈ Π½ΠΎΠ²ΠΈ ΡΡΠ΅Π· Π½ΡΠΊΠ°ΠΊΠ²ΠΈ Π²ΠΈΠ·ΡΠ°Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠ° ΡΠ°ΠΊΠΈΠ²Π° Π½Π΅ΡΠ° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ β ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ ΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ΅Π΄ΠΈ Ρ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΠΈ ΡΡΠ΅Π½ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΠ° Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠ°ΡΠΎ ΠΏΠΎΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ Π΄Π°Π½Π½ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° PHP, Laravel, Laradock, Docker-Compose
P.S ΠΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π±ΡΡ Π° ΠΏΡΠ°Π²Π΅Π½ΠΈ Π½Π° 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

2.1. ΠΡΠ²Π°ΡΡΠΌΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° habr (ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠ°ΡΠ° ΠΏΠ°ΠΏΠΊΠ°, Π² ΠΊΠΎΡΡΠΎ Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½ laradock) Π² Π½ΡΠΊΠΎΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ. (Π ΠΌΠΎΡ ΡΠ»ΡΡΠ°ΠΉ PHPStorm)
ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°.

2.2. Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±ΡΠ°Π·Π° workspace. (ΠΡΠ² Π²Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ ΡΠ΅ ΡΠ΅ Π±ΠΈΠ»Π΄ΡΡ Π·Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅)
Workspace β ΡΠΎΠ²Π° Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ ΠΎΠ±ΡΠ°Π· Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° ΠΎΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ Π²ΡΡΡΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π°
docker-compose up -d workspace &&
docker-compose exec workspace bash

2.3. ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Laravel
composer create-project --prefer-dist laravel/laravel application 
2.4. Π‘Π»Π΅Π΄ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π·Π°ΡΠ²Π°ΡΡΠΌΠ΅ compose.
ls
exit
docker-compose down

2.5. ΠΡΡΡΠ°ΠΌΠ΅ ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² PHPStorm ΠΈ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Π²Π΅ΡΠ½ΠΈΡ ΠΏΡΡ Π΄ΠΎ Π½Π°ΡΠ΅ΡΠΎ laravel ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΉΠ»Π° .env.

3. ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ ΡΠ΅Π»ΠΈΡ ΠΊΠΎΠ΄ Π² Git.
ΠΠ° ΡΠ΅Π»ΡΠ° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π° Github (ΠΈΠ»ΠΈ Π½Π° Π΄ΡΡΠ³ΠΎ ΠΌΡΡΡΠΎ). ΠΡΠ΅Ρ Π²ΡΡΠ»ΡΠΌΠ΅ ΡΠ΅ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° habr ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΊΠΎΠ΄.
echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com: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 β php Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠΎΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅, ΡΠ΅ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΡΠ³ΠΎΠ²Π°ΡΡΡΠΎ Π½Π° Π²Π΅ΡΠ΅ 4 ΠΏΡΠ½ΠΊΡΠ° ΠΎΡ 12, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:
1. ΠΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° β ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Π»Π΅ΠΆΠΈ Π² Π΅Π΄ΠΈΠ½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ (ΠΌΠ°Π»ΠΊΠ° Π±Π΅Π»Π΅ΠΆΠΊΠ°: ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΡΠ΅ Π²ΠΌΡΠΊΠ½Π΅ docker Π²ΡΡΡΠ΅ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° laravel, Π½ΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»Π½ΠΎ).
2. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β ΠΡΠΈΡΠΊΠΈ Π½Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ° ΡΠ²Π½ΠΎ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ Π² application/composer.json ΠΈ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ Dockerfile Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
3. ΠΡΠ½ΡΠ½ΠΈ ΡΡΠ»ΡΠ³ΠΈ (Backing Services) β ΠΡΡΠΊΠ° ΠΎΡ ΡΠ»ΡΠΆΠ±ΠΈΡΠ΅ (php-fpm, nginx, workspace) ΠΆΠΈΠ²Π΅Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ ΡΠΈ ΠΆΠΈΠ²ΠΎΡ ΠΈ Π΅ ΡΠ²ΡΡΠ·Π°Π½Π° ΠΎΡΠ²ΡΠ½ ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π΅Π΄Π½Π° ΡΡΠ»ΡΠ³Π°, Π΄ΡΡΠ³Π°ΡΠ° Π½Π΅ ΡΠ΅ Π±ΡΠ΄Π΅ Π·Π°ΡΠ΅Π³Π½Π°ΡΠ°.
4. ΠΡΠΎΡΠ΅ΡΠΈ β Π²ΡΡΠΊΠ° ΡΡΠ»ΡΠ³Π° Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ. ΠΡΡΠΊΠ° ΠΎΡ ΡΠ»ΡΠΆΠ±ΠΈΡΠ΅ Π½Π΅ Π·Π°ΠΏΠ°Π·Π²Π° Π²ΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
5. Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ (Port binding)
docker ps

ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Π²ΡΡΠΊΠ° ΡΡΠ»ΡΠ³Π° Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π° Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΏΠΎΡΡ ΠΈ Π΅ Π½Π°Π»ΠΈΡΠ½Π° Π·Π° Π²ΡΠΈΡΠΊΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠ»ΡΠ³ΠΈ.
6. ΠΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ
Docker Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ ΡΡΠ»ΡΠ³ΠΈ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ .
Π‘ΠΏΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΈ Π³ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Ρ ΡΠ»Π°Π³Π° βscale
docker-compose down &&
docker-compose up -d --scale php-fpm=3 nginx php-fpm

ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡΡ php-fpm Π΅ ΡΡΠ·Π΄Π°Π» ΠΊΠΎΠΏΠΈΡ. ΠΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΌΠ΅ Π½ΠΈΡΠΎ Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π΄Π° ΠΌΡ ΡΠ΅ ΠΎΠ±ΡΡΡΠ°ΠΌΠ΅ Π½Π° ΠΏΠΎΡΡ 9000, Π° Docker ΡΠΏΡΠ°Π²Π»ΡΠ²Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π½Π°Ρ.
7. Π£ΡΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΠΎΡΡ (Disposability) β Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ±ΠΈΡ Π±Π΅Π· Π΄Π° Π²ΡΠ΅Π΄ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡΠ΅. Π‘ΠΏΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π½Π΅ ΠΎΠΊΠ°Π·Π²Π° Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈΡ. ΠΡΠ΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΠΎ Π²ΡΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅.
8. ΠΠ°ΡΠΈΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°/ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ β Π²ΡΠΈΡΠΊΠΈ Π½Π°ΡΠΈ ΡΡΠ΅Π΄ΠΈ ΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ. Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΡΡΡΠ²ΡΡ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ, Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠ΅ Π½ΠΈΡΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΡΠΈ. ΠΡΠΈΡΠΊΠΎ ΡΠ΅ Π΅ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠ°, Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° Docker.
9. ΠΠΎΠ³ΠΎΠ²Π΅ (Logs) β Π²ΡΠΈΡΠΊΠΈ Π»ΠΎΠ³Π° Π² ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Ρ Π½Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΈ ΡΠ° Π²ΠΈΠ΄ΠΈΠΌΠΈ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π° Docker. (Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ, Π²ΡΡΡΠ½ΠΎΡΡ, Ρ Π΄ΡΡΠ³ΠΈ ΡΠ°ΠΌΠΎΠ΄Π΅Π»Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΡΠ°ΠΊΠ°, Π°ΠΊΠΎ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΡΠ΅ Π·Π° ΡΠΎΠ²Π°)
docker-compose logs -f 
ΠΠΎ, ΡΡΠΊ ΠΈΠΌΠ° ΡΠ»ΠΎΠ²ΠΊΠ°, ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π² PHP ΠΈ Nginx ΡΡΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π² ΡΠ°ΠΉΠ». ΠΠ° Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π° 12-ΡΠ΅ ΡΠ°ΠΊΡΠΎΡΠ°, Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΠΌ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π² ΡΠ°ΠΉΠ» Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎΠΎΡΠ΄Π΅Π»Π½ΠΎ.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, Docker ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π½Π°ΡΠΎΡΠ²Π°ΡΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ Π² stdout, Π½ΠΎ ΠΈ ΠΊΡΠΌ Π½Π΅ΡΠ° ΠΊΠ°ΡΠΎ graylog, Π·Π° ΠΊΠΎΠΈΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΏΠΎ-Π³ΠΎΡΠ΅. Π Π²ΡΡΡΠ΅ Π² graylog ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎ Π²ΡΡΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½ ΠΈ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΡΠΌΠ° Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ ΡΠΎΠ²Π°.
10. ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π½ΠΈ Π·Π°Π΄Π°ΡΠΈ β Π²ΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π°Ρ ΠΎΡ Laravel Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Artisan, ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΡΠΎ Π±ΠΈΡ Π° ΠΈΡΠΊΠ°Π»ΠΈ ΡΡΠ·Π΄Π°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° 12-ΡΠ°ΠΊΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½ΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
ΠΠ»ΠΈΠ·Π°ΠΌΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
docker-compose exec workspace bash
php artisan list

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²ΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°. (ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π½Π΅ ΡΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π»ΠΈ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ ΠΊΠ΅ΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΡ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ ΠΊΠ΅ΡΠ° ΠΈ ΠΠ).

11. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ 12. Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅, ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅
Π’Π°Π·ΠΈ ΡΠ°ΡΡ ΠΈΡΠΊΠ°Ρ Π΄Π° ΠΏΠΎΡΠ²Π΅ΡΡ Π½Π° Blue-Green Deployment, Π½ΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π° ΡΠ²ΡΡΠ΄Π΅ ΠΎΠ±ΡΠΈΡΠ½Π° Π·Π° ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ. Π©Π΅ Π½Π°ΠΏΠΈΡΠ° ΠΎΡΠ΄Π΅Π»Π½Π° ΡΡΠ°ΡΠΈΡ Π·Π° ΡΠΎΠ²Π°.
Π‘ Π΄Π²Π΅ Π΄ΡΠΌΠΈ, ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΡ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° CI/CD ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΊΠ°ΡΠΎ Jenkins ΠΈ GitLab CI. Π ΠΈ Π΄Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄Π°. Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ ΠΏΡΠΈ ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠΎΡΠΊΠ° Ρ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
Π ΡΠΎΡΠΊΠ°ΡΠ° Π·Π° Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅, ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ΅ΡΠ°Π²Π° ΠΎΡ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΠ΅ Π² Π΄Π²Π΅ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈ Pipeline.
Pipeline ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΅ΡΠ°ΠΏΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠΉΠΊΠΈ Π΅ΡΠ°ΠΏΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π² Pipeline ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΈ ΠΊΠΎΠΏΠΈΡ ΠΈ ΠΏΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅. Π’ΠΎΠ·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΈΠΌΠ° Π±Π΅Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π».
ΠΊΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² .
ΠΠ΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ submodule ΠΏΡΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ.
P.S.: ΠΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Ρ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π΄ΡΡΠ³ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡΠΈ. ΠΠ°ΠΆΠ½ΠΎ Π΅ ΡΡΡΠ½ΠΎΡΡΡΠ° Π΄Π° Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
