
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ΠΎΡΠΈΡ. ΠΠ°ΠΊΠ²ΠΎ Π΅ ?
Π‘ ΠΏΡΠΎΡΡΠΈ Π΄ΡΠΌΠΈ, ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° Π·Π° ΡΠ΅Π» Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° 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 deployment β ΡΠΎΠ²Π° Π΅ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ production ΡΠ°ΠΊΠ°, ΡΠ΅ ΠΊΡΠ°ΠΉΠ½ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ Π²ΠΈΠΆΠ΄Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΡ ΡΠ²ΠΎΡ ΡΡΡΠ°Π½Π°. Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΠ°Π²Π° Π±Π΅Π· Π½ΡΠ»Π΅Π² ΠΏΡΠ΅ΡΡΠΎΠΉ.
ΠΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡ Π΅ΠΌΠ° BG Deploy ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.

- Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΈΠΌΠ° 2 ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ²ΡΡΠ° Ρ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ΅Π½ ΠΊΠΎΠ΄, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΈΠΌΠ° ΡΡΡΠ΅Ρ (Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ).
- Π ΡΡΠ΅ΡΡΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π½Π°ΡΠΎΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΡΡΠ²ΡΡΠΈΡΠ΅ (ΡΠΈΠ½).
- Π ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠ΅Π»ΠΈΠΉΠ·, ΡΠ΅Π»ΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π° Π½Π° Π΄ΡΡΠ³ ΡΡΡΠ²ΡΡ (Π°Π»ΡΠ°), ΠΊΠΎΠΉΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ.
- Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ΡΡ Π½Π° ΡΠΈΠ½ΠΈΡ ΡΡΡΠ²ΡΡ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½, ΡΡΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠΈ ΠΎΡ Π·Π΅Π»Π΅Π½ΠΎΡΠΎ Π½Π° Π°Π»ΡΠ° ΡΡΡΠ²ΡΡ.
- Π‘Π΅Π³Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π²ΠΈΠΆΠ΄Π°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ΄Π° Ρ ΡΠΈΠ½ΠΈΡ ΡΡΡΠ²ΡΡ.
- ΠΡΠΊΠ°ΠΊΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΠΈΠ½ ΡΡΡΠ²ΡΡΡΡ ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ ΡΠ΅Π·Π΅ΡΠ²Π½Π° ΠΊΠΎΠΏΠΈΡ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° Π°Π»ΡΠ° ΡΡΡΠ²ΡΡ ΠΈ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° ΠΏΡΠΎΠ²Π°Π» ΠΈ Π±ΡΠ³ΠΎΠ²Π΅, ΡΡΡΠ΅ΡΡΡ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΡΠΌ ΡΠΈΠ½ ΡΡΡΠ²ΡΡΠ° ΡΡΡ ΡΡΠ°ΡΠ°ΡΠ° ΡΡΠ°Π±ΠΈΠ»Π½Π° Π²Π΅ΡΡΠΈΡ, Π° Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π½Π° Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅ΡΡΠ²Π°Π½Π΅.
- Π Π² ΠΊΡΠ°Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π° ΡΠΈΠ½ ΡΡΡΠ²ΡΡΠ°. Π ΡΠ»Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ΡΠΎ ΠΌΡ, ΡΡΡΠ΅ΡΡΡ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΡΠΈΠ½ ΡΡΡΠ²ΡΡ.
Π¦ΡΠ»ΠΎΡΠΎ ΡΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅ ΠΈ Π½Π° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄ Ρ Π½Π΅Π³ΠΎ Π½Π΅ Π±ΠΈ ΡΡΡΠ±Π²Π°Π»ΠΎ Π΄Π° ΠΈΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ.
ΠΠΎ ΠΏΠΎΠ½Π΅ΠΆΠ΅ ΠΆΠΈΠ²Π΅Π΅ΠΌ Π² ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡ ΡΠ²ΡΡ, Π²Π°ΡΠΈΠ°Π½ΡΡΡ Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΡΠΎ ΠΏΡΠ΅ΠΊΠ»ΡΡΠ²Π°Π½Π΅, ΠΊΠ°ΠΊΡΠΎ Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡ
Π΅ΠΌΠ°, Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π·Π° Π½Π°Ρ. ΠΠ°ΠΏΠΈΡΠ²Π°ΠΉΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π°ΡΠ΅Π³Π°, ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ Π½Π΅Ρ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
ΠΠΎΡΠΈ ΠΈ Π΄ΠΎΠ±ΡΠΈ ΡΡΠ²Π΅ΡΠΈ
ΠΡΠΊΠ°Π·: Π ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΡΠ° ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ / ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ Π°Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΈ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΡΠΈΡΠ°Ρ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ Ρ ΡΠ΅Π± ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° (ΡΠΎΠ²Π° Π΅ ΠΈΠ·Π½Π΅Π½Π°Π΄Π°), Ρ PHP ΠΈ Docker.
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ»Π΅Π΄Π²Π° ΠΏΡΠΎΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΊΡΠΎΡΠΈΡΠ΅ ΠΏΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΠΎΡΠΈΡ ΠΏΠΎ ΡΠ΅ΠΌΠ°ΡΠ°, ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ ΡΠ΅ ΠΊΡΠΌ Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΊΡΠΌ ΠΏΡΡΠ²ΠΎΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊΠ°.
1. ΠΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ FTP ΠΈ FileZilla, Π·Π° Π΄Π° ΠΊΠ°ΡΠ²Π°ΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΡΡΡΠ²ΡΡΠΈΡΠ΅ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½, Π½Π΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΉΡΠ΅ ΠΊΠΎΠ΄Π° Π½ΠΈΠΊΡΠ΄Π΅ ΠΎΡΠ²Π΅Π½ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈΡ ΡΡΡΠ²ΡΡ.
Π ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°, Ρ.Π΅. ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ ΠΈΠ΄Π²Π° ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ. Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. Π‘ΡΡΠ²ΡΡΠΈΡΠ΅ (ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ, ΡΠ΅ΡΡΠΎΠ²ΠΈ, 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.
ΠΡΠΈΡΠΊΠΈ Π²Π°ΡΠΈ ΡΡΠ»ΡΠ³ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΡΡΠ΅Π· ΠΎΠ±ΡΡΡΠ΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π°Π΄ΡΠ΅Ρ ΠΈ ΠΏΠΎΡΡ (localgost: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, ΡΠΈΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ Π΄Π²Π° ΠΏΡΡΠΈ ΠΏΠΎΠ΄ΡΠ΅Π΄, ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π΄ΡΠ±Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°. ΠΠΎ Π²ΠΈΠ΅ Π½Π΅ ΡΡΠ΅ Π³Π»ΡΠΏΠ°Π²ΠΈ, Π½ΡΠΌΠ° Π΄Π° Π½Π°ΡΠΈΡΠ½Π΅ΡΠ΅ Π΄Π²Π° ΠΏΡΡΠΈ, Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π½Π΅ ΡΠ° Π½ΠΈ Π½ΡΠΆΠ½ΠΈ.
ΠΡΠΈΡΠΊΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ Π² ΡΡΡΠ°ΡΠ° ΡΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΡΠΎ Π΅ ΡΠ΅Π»ΠΈΡΡ ΠΊΠΎΠ΄, Π½Π° Π½ΠΈΠ²ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΡ. Π’ΠΎΠ΅ΡΡ, Π°ΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π½ΡΠΌΠ° Π΄Π° Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠΌ ΡΡΡΠ½ΠΎ, ΠΏΡΠΎΠΌΠ΅Π½ΡΠΉΠΊΠΈ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠΉΠΊΠΈ Π½ΠΎΠ²ΠΈ ΡΡΠ΅Π· Π²ΠΈΠ·ΡΠ°Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΠ. ΠΠ° ΡΠ°ΠΊΠΈΠ²Π° Π½Π΅ΡΠ° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ β ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅ ΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ΅Π΄ΠΈ Ρ ΠΎΠ±Ρ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΠ° Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠ°ΡΠΎ Π·Π°ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ Π΄Π°Π½Π½ΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° PHP, Laravel, Laradock, Docker-Compose
P.S. ΠΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π±ΡΡ Π° Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΈ Π½Π° MacOS. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡ ΡΡΡ ΡΡΠ°Π²Π°Ρ ΠΈ Π·Π° Linux. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Windows, ΠΈΠ·Π²ΠΈΠ½Π΅ΡΠ΅, Π½ΠΎ ΠΎΡΠ΄Π°Π²Π½Π° Π½Π΅ ΡΡΠΌ ΡΠ°Π±ΠΎΡΠΈΠ» Ρ Windows.
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π½Π° ΠΠ Π½ΠΈ Π½Π΅ Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° 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 "ΠΏΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΈΡ"
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, nignx, 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 
ΠΠΎ ΡΡΠΊ ΠΈΠΌΠ° ΡΠ»ΠΎΠ²ΠΊΠ°, ΡΠ΅ Default ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π² 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
