ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ The Twelve-Factor App ?
ΠΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ·Π²Π°Π½Π½ΡΠΉ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ SaaS ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ΅ΠΌ ΡΡΠΎ, ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°Ρ ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Heroku.
ΠΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΠΈ ΡΠ°ΠΊΡΠΎΡΠΎΠ²(The Twelve-Factor App) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ
Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ
Π»ΡΠ±ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ
ΡΠ»ΡΠΆΠ± (backing services) (Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
, ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΡΡ-ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ Ρ.Π΄.).
ΠΠΎΡΠΎΡΠΊΠΎ ΠΎ ΡΠ°ΠΌΠΈΡ ΡΠ°ΠΊΡΠΎΡΠ°Ρ Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠΎΠΈΡΡΡ ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ:
- ΠΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° β ΠΠ΄Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π°, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ, β ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΠΉ
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β Π―Π²Π½ΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠΉΡΠ΅ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡΡΠΉΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ β Π‘ΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² ΡΡΠ΅Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
- Π‘ΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ (Backing Services) β Π‘ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ (backing services) ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ
- Π‘Π±ΠΎΡΠΊΠ°, ΡΠ΅Π»ΠΈΠ·, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β Π‘ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠΉΡΠ΅ ΡΡΠ°Π΄ΠΈΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
- ΠΡΠΎΡΠ΅ΡΡΡ β ΠΠ°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ (stateless)
- ΠΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΠΎΡΡΠΎΠ² (Port binding) β ΠΠΊΡΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΏΠΎΡΡΠΎΠ²
- ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ β ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
- Π£ΡΠΈΠ»ΠΈΠ·ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ (Disposability) β ΠΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡΡΠΉΡΠ΅ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΡΡΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ
- ΠΠ°ΡΠΈΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ/ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΠΠ΅ΡΠΆΠΈΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ (staging) ΠΈ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ (production) ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌΠΈ
- ΠΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Logs) β Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΆΡΡΠ½Π°Π» ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ
- ΠΠ°Π΄Π°ΡΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ/ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π·ΠΎΠ²ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²
ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ 12 ΡΠ°ΠΊΡΠΎΡΠ°Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ²:
-
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΈΡΡΠΎΡΠ½ΠΈΠΊ β ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ -
Π‘ΡΠ°ΡΡΡ Π½Π° habr. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π²Π΅Π½Π°Π΄ΡΠ°ΡΠΈ ΡΠ°ΠΊΡΠΎΡΠΎΠ² β The Twelve-Factor App β ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ -
Π‘ΡΠ°ΡΡΡ Π½Π° habr. 7 Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ² Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ 12 Factor App β ΡΠ²Π΅ΠΆΠΈΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° 12 ΡΠ°ΠΊΡΠΎΡΠΎΠ² Ρ ΡΠ΅Π»ΡΡ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΈΡ .
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Blue-Green deployment?
Blue-Green deployment β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° production ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠΎΡΠΎΠ½Ρ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ downtime.
ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡ Π΅ΠΌΠ° BG Deploy Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅.
- ΠΠ° ΡΡΠ°ΡΡΠ΅ Π΅ΡΡΡ 2 ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, ΠΈ Π΅ΡΡΡ ΡΠΎΡΡΠ΅Ρ (Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ).
- Π ΠΎΡΡΠ΅Ρ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² (Π·Π΅Π»Π΅Π½ΡΠΉ).
- Π ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΡΠ½ΠΎΠ²Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅Π»ΠΈΠ·, Π²Π΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ (ΡΠΈΠ½ΠΈΠΉ), ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
- ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π½Π° ΡΠΈΠ½Π΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½, ΡΠΎΡΡΠ΅ΡΡ Π΄Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° ΡΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Ρ Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ Π½Π° ΡΠΈΠ½ΠΈΠΉ ΡΠ΅ΡΠ²Π΅Ρ.
- Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π²ΠΈΠ΄ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ΄Π° Ρ ΡΠΈΠ½Π΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°.
- ΠΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ, Π·Π΅Π»Π΅Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ»ΡΠΆΠΈΡ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π½Π° ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ Π½Π° ΡΠΈΠ½ΠΈΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ ΠΈ Π±Π°Π³ΠΎΠ², ΡΠΎΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° Π·Π΅Π»Π΅Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ ΡΡΠ°ΡΠΎΠΉ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ, Π° Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
- Π ΠΏΠΎΠ΄ ΠΊΠΎΠ½Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π·Π΅Π»Π΅Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ. Π ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΡΠΎΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° Π·Π΅Π»Π΅Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ.
ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΎ ΠΈ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ Ρ ΡΡΠΈΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΆΠΈΠ²Π΅ΠΌ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΌΠΈΡΠ΅, ΡΠΎ Π²Π°ΡΠΈΠ°Π½Ρ Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡ
Π΅ΠΌΠ΅ Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎΠΊΠ° Π·Π°ΡΠΈΠΊΡΠΈΡΡΠΉΡΠ΅, ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π½Π΅ΠΉ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΡΠ΅Π΄Π½ΡΠ΅ ΠΈ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΡΠΎΠ²Π΅ΡΡ
Disclaimer: Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π½ΠΈΠΆΠ΅ ΡΠΊΠ°Π·Π°Π½Ρ ΡΡΠΈΠ»ΠΈΡΡ / ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π»ΡΠ±ΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ ΡΠΎ ΡΡ ΠΎΠΆΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.
ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ Ρ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ (Π²ΠΎΡ ΡΡΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡΡ), Ρ PHP ΠΈ Docker.
Π ΠΏΡΠ½ΠΊΡΠ°Ρ Π½ΠΈΠΆΠ΅ ΠΈΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΎΡΠΈΠΈ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌ Π²ΡΡΠ΅ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ.
1. ΠΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π°
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ FTP ΠΈ FileZilla Π·Π°Π³ΡΡΠΆΠ°Ρ ΡΠ°ΠΉΠ»Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΡΠΊΠ΅, Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ Π½ΠΈΠ³Π΄Π΅ ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ Π½Π° production ΡΠ΅ΡΠ²Π΅ΡΠ΅.
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΅Π΄ΠΈΠ½Π°Ρ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π°, ΡΠΎ Π΅ΡΡΡ, Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΈΠ΄Π΅Ρ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ 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.
ΠΡΠ΅ Π²Π°ΡΠΈ ΡΠ»ΡΠΆΠ±Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄ΡΡΠ³ Π΄Π»Ρ Π΄ΡΡΠ³Π° ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ-Π»ΠΈΠ±ΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈ ΠΏΠΎΡΡΡ (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, Π΄ΠΎΠ²Π΅Π΄Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ Π½Π° production, ΡΠ°ΠΊ ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Π΄ΠΎ Π²Π²ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠΉ-Π΄Π²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄.
11. ΠΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Logs)
ΠΠΎΠ³ΠΈ ΠΏΠΈΡΠ΅ΠΌ Π² ΡΠ°ΠΉΠ»Ρ ΠΈ Π±Π΄! Π€Π°ΠΉΠ»Ρ ΠΈ Π±Π΄ ΠΎΡ Π»ΠΎΠ³ΠΎΠ² Π½Π΅ ΡΠΈΡΡΠΈΠΌ. ΠΡΠΏΠΈΠΌ ΠΏΡΠΎΡΡΠΎ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊ Π½Π° 9000 ΠΠ΅ΡΠ° Π±Π°ΠΉΡ ΠΈ Π½ΠΎΡΠΌ.
ΠΡΠ΅ Π»ΠΎΠ³ΠΈ Π½Π°Π΄ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ. Π‘Π°ΠΌΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π»ΠΎΠ³ΠΎΠ². ΠΠΎΠ³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ΄Π°Π²Π°ΡΡΡΡ Π»ΠΈΠ±ΠΎ Π² stdout, Π»ΠΈΠ±ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎ ΡΠ°ΠΊΠΎΠΌΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΊΠ°ΠΊ udp, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ° Ρ Π»ΠΎΠ³Π°ΠΌΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π»Π° Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ graylog. Graylog ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΡΠ΅ Π»ΠΎΠ³ΠΈ ΠΏΠΎ udp (ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ ΠΎΡΠ²Π΅ΡΠ° ΠΎΠ± ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ΅ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°) Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π»ΠΎΠ³ΠΎΠ². ΠΠΎΠ³ΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌΠΈ.
12. ΠΠ°Π΄Π°ΡΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , Π±Π΄ ΠΈ Ρ/Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ Π² Π°ΠΏΠΈ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ 2 ΡΠ°Π·Π° ΠΏΠΎΠ΄ΡΡΠ΄ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ ΡΡΠΎ Ρ Π²Π°Ρ Π²ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π° Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡΡΡ. ΠΠΎ Π²Ρ ΠΆΠ΅ Π½Π΅ Π΄ΡΡΠ°ΠΊΠΈ, Π½Π΅ Π½Π°ΠΆΠΌΠ΅ΡΠ΅ 2 ΡΠ°Π·Π°, Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π½Π°ΠΌ Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ.
ΠΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ΅Π΄Π΅ ΡΡΠΎ ΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ΄, Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΅Π»ΠΈΠ·ΠΎΠ². Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ Π±Π΄, ΡΠΎ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΡΠΊΠ°ΠΌΠΈ ΠΌΠ΅Π½ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠ. ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ Π²Π΅ΡΠ΅ΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ β ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²Π΅Π·Π΄Π΅ ΠΈ Π½Π° Π²ΡΠ΅Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ ΠΎΠ±ΡΠΈΠΌ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ. ΠΠ»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΡΠΈΠΏΠ° Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π°Π½Π½ΡΠΌΠΈ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΡ ΠΎΠΆΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° PHP, Laravel, Laradock, Docker-Compose
P.S ΠΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»Π°Π»ΠΈΡΡ Π½Π° MacOS. ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΠΈ Π΄Π»Ρ Linux. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Windows ΡΠΆ ΠΏΡΠΎΡΡΠΈΡΠ΅, Π½ΠΎ Ρ Π²ΠΈΠ½Π΄ΠΎΠΉ Ρ Π΄Π°Π²Π½ΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π».
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΡΠΎ Ρ Π½Π°Ρ Π½Π° ΠΠ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π½ΠΈΠΊΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ PHP ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Ρ.
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ docker ΠΈ docker-compose ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
Π²Π΅ΡΡΠΈΠΉ. (ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅)
docker -v &&
docker-compose -v
1. Π‘ΡΠ°Π²ΠΈΠΌ
git clone https://github.com/Laradock/laradock.git &&
ls
ΠΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ Laradock ΡΠΊΠ°ΠΆΡ ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΠ»Π°ΡΡΠ½Π°Ρ ΡΡΡΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ±ΡΠ°Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ
ΡΡΡΠΊ. ΠΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ Laradock Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ Π½Π° production β Ρ Π±Ρ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΠ·-Π·Π° Π΅Π³ΠΎ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΠΈ. ΠΡΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ ΠΎΠΏΠΈΡΠ°ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΡ Π² 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 [email protected]:nzulfigarov/habr-12factor.git # Π·Π΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»ΠΊΠ° Π½Π° Π²Π°Ρ ΡΠ΅ΠΏΠΎ
git push -u origin master
git status
ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π²ΡΠ΅ Π»ΠΈ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Git, Π² ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ
4. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ!
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ Π½Π° 80 ΠΈ 443 ΠΏΠΎΡΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΈΡΠΈΡ.
docker-compose up -d nginx php-fpm
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 3 ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²:
- nginx β Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ
- php-fpm β php Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² Ρ Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°
- workspace β php Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΡ Π΄ΠΎΠ±ΠΈΠ»ΠΈΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅, ΡΠΆΠ΅ 4 ΠΏΡΠ½ΠΊΡΠ°ΠΌ ΠΈΠ· 12, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:
1. ΠΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° β Π²Π΅ΡΡ ΠΊΠΎΠ΄ Π»Π΅ΠΆΠΈΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ (Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ΅ΠΌΠ°ΡΠΊΠ°: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ Π±ΡΠ΄Π΅Ρ Π²Π½Π΅ΡΡΠΈ docker Π²Π½ΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° laravel, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ).
2. ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ β ΠΡΠ΅ Π½Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π½ΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°Π½Ρ Π² application/composer.json ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Dockerfile ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
3. Π‘ΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ (Backing Services) β ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΡΠ»ΡΠΆΠ± (php-fom, 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 ΡΠ°ΠΊΡΠΎΡΠ°ΠΌ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π·Π°ΠΏΠΈΡΡ Π»ΠΎΠ³ΠΎΠ² Π² ΡΠ°ΠΉΠ» Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ
ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
Π’Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠΊΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ Π»ΠΎΠ³ΠΈ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π² 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