Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΌΠ°Π»ΠΊΠΎ тСория. Какво Π΅ The Twelve-Factor App?

Π‘ прости Π΄ΡƒΠΌΠΈ, Ρ‚ΠΎΠ²Π° Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° Π·Π° Ρ†Π΅Π» Π΄Π° опрости Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° SaaS прилоТСния, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°ΠΉ-чСсто сС срСщат Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ прилоТСния.

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Π΅ ΡΡŠΡΡ‚Π°Π²Π΅Π½ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Heroku.

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡΡ‚Π° Π½Π° дванадСсСттС Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° (The Twelve-Factor App) ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π° Π·Π° прилоТСния, написани Π½Π° всСки Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ всякакви ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΡ‚ външни услуги (backing services) (Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, опашки Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, кСш ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ Π΄Ρ€.).

Накратко Π·Π° самитС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ сС основава Ρ‚Π°Π·ΠΈ мСтодология:

  1. Кодова Π±Π°Π·Π° – Π•Π΄Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°, прослСдявана Π² систСма Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° вСрсиитС, – мноТСство Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ
  2. Зависимости – Ясно Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°ΠΉΡ‚Π΅ зависимоститС
  3. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ – Π—Π°ΠΏΠ°Π·Π²Π°ΠΉΡ‚Π΅ конфигурацията Π² Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° срСда
  4. Π’ΡŠΠ½ΡˆΠ½ΠΈ услуги (Backing Services) – Π‘Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π²ΡŠΠ½ΡˆΠ½ΠΈΡ‚Π΅ услуги (backing services) Π·Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ рСсурси
  5. БглобяванС, ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, изпълнСниС – Π‘Ρ‚Ρ€ΠΎΠ³ΠΎ раздСляйтС Ρ„Π°Π·ΠΈΡ‚Π΅ Π½Π° сглобяванС ΠΈ изпълнСниС
  6. ΠŸΡ€ΠΎΡ†Π΅ΡΠΈ – Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ процСси Π±Π΅Π· Π·Π°ΠΏΠ°Π·Π΅Π½ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ (stateless)
  7. ΠŸΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ (Port binding) – Π˜Π·Π½Π°ΡΡΠΉΡ‚Π΅ услугитС Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅
  8. ΠŸΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ – ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° процСси
  9. УтилизируСмост (Disposability) – ΠœΠ°ΠΊΡΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ надСТдността Ρ‡Ρ€Π΅Π· Π±ΡŠΡ€Π·ΠΎ стартиранС ΠΈ ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅
  10. ΠŸΠ°Ρ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ – Π”Ρ€ΡŠΠΆΡ‚Π΅ срСдитС Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ (staging) ΠΈ продукция (production) възмоТно Π½Π°ΠΉ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ
  11. Π›ΠΎΠ³ΠΎΠ²Π΅ (Logs) – Π‘Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ
  12. Административни Π·Π°Π΄Π°Ρ‡ΠΈ – Π˜Π·ΠΏΡŠΠ»Π½ΡΠ²Π°ΠΉΡ‚Π΅ административни/управляващи Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‡Ρ€Π΅Π· Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΈ процСси

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация Π·Π° 12-Ρ‚Π΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚ слСднитС рСсурси:

Какво С Blue-Green deployment?

Blue-Green deployment – Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° доставка Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ production Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ крайният ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π²ΠΈΠΆΠ΄Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΎΡ‚ своя страна. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ става Π±Π΅Π· Π½ΡƒΠ»Π΅Π² прСстой.

ΠšΠ»Π°ΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ‚Π° схСма BG Deploy ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

  • Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈΠΌΠ° 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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΌΠ΅ Laradock

git clone https://github.com/Laradock/laradock.git && 
ls

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Π—Π° Laradock Ρ‰Π΅ ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Π΅ чудСсСн инструмСнт, Π² ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ инструмСнти. Однако, Π½Π΅ Π±ΠΈΡ… ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Π» Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Laradock Π² производствСни условия Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΠΈΠ·Π»ΠΈΡˆΠ½ΠΎΡΡ‚. По-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° сС ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ собствСни ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, основавайки сС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Laradock, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° оптимизация, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΈΠΌΠ°, Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

2. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Laradock Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

cd laradock && 
cp env-example .env

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

2.1. ΠžΡ‚Π²Π°Ρ€ΡΠΌΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° habr (родитСлска ΠΏΠ°ΠΏΠΊΠ°, Π² която Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½ laradock) във всСки Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. (Π’ моя случай PHPStorm)

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ поставямС само ΠΈΠΌΠ΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

2.2. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·Π° workspace. (Π’ΡŠΠ² вашия случай ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Ρ‰Π΅ сС Π±ΠΈΠ»Π΄Π²Π°Ρ‚ извСстно Π²Ρ€Π΅ΠΌΠ΅)
Workspace β€” Ρ‚ΠΎΠ²Π° Π΅ спСциално ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ ΠΎΠ±Ρ€Π°Π· Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

Π’Π»ΠΈΠ·Π°ΠΌΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π°

docker-compose up -d workspace && 
docker-compose exec workspace bash

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

2.3. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΌΠ΅ Laravel

composer create-project --prefer-dist laravel/laravel application

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

2.4. Π‘Π»Π΅Π΄ инсталацията провСрявамС Π΄Π°Π»ΠΈ Π΅ създадСна дирСкторията с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ спирамС compose.

ls
exit
docker-compose down

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

2.5. Π’Ρ€ΡŠΡ‰Π°ΠΌΠ΅ сС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² PHPStorm ΠΈ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ правилния ΠΏΡŠΡ‚ Π΄ΠΎ Π½Π°ΡˆΠ΅Ρ‚ΠΎ laravel ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π° .env.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

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

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ всичко Π΅ Π½Π°Ρ€Π΅Π΄.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Π—Π° удобство ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ някакъв Π²ΠΈΠ·ΡƒΠ°Π»Π΅Π½ интСрфСйс Π·Π° Git, Π² моя случай Ρ‚ΠΎΠ²Π° Π΅ GitKraken. (Ρ‚ΡƒΠΊ Ρ€Π΅Ρ„Π΅Ρ€Π°Π»Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°)

4. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅!

ΠŸΡ€Π΅Π΄ΠΈ стартиранС сС ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ Π½ΠΈΡ‰ΠΎ Π½Π΅ Π΅ Π·Π°Π΄ΡŠΡ€ΠΆΠ°Π½ΠΎ Π½Π° ΠΏΠΎΡ€Ρ‚ 80 ΠΈ 443.

docker-compose up -d nginx php-fpm

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Π’Π°ΠΊΠ° Π½Π°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ 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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

ΠšΠ°ΠΊΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, всяка услуга Π΅ стартирана Π½Π° собствСн ΠΏΠΎΡ€Ρ‚ ΠΈ Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π·Π° всички Π΄Ρ€ΡƒΠ³ΠΈ услуги.

6. ΠŸΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΡŠΠΌ

Docker Π½ΠΈ позволява Π΄Π° стартирамС няколко процСса Π½Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ услуги с Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ балансиранС Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ тях.

Π‘ΠΏΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ Π³ΠΈ стартирамС с Ρ„Π»Π°Π³Π° β€”scale

docker-compose down && 
docker-compose up -d --scale php-fpm=3 nginx php-fpm

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Как ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, php-fpm ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Π΅ създал копия. Няма Π½ΡƒΠΆΠ΄Π° Π΄Π° промСнямС Π½ΠΈΡ‰ΠΎ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π΄Π° взаимодСйствамС с Π½Π΅Π³ΠΎ Π½Π° ΠΏΠΎΡ€Ρ‚ 9000, Π° Docker Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅.

7. УтилизируСмост (Disposability) β€” всСки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡƒΠ±ΠΈΡ‚ Π±Π΅Π· Π²Ρ€Π΅Π΄Π° Π·Π° Π΄Ρ€ΡƒΠ³. Π‘ΠΏΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΈΠ»ΠΈ рСстартиранСто Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π΅ ΠΎΠΊΠ°Π·Π²Π° влияниС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈ послСдващи стартирания. ВсСки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅.

8. ΠŸΠ°Ρ€ΠΈΡ‚Π΅Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ β€” всичкитС Π½ΠΈ срСди са Π΅Π΄Π½Π°ΠΊΠ²ΠΈ. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΠΊΠΈ систСмата Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π² продукция, няма Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° промСнятС Π½ΠΈΡ‰ΠΎ Π² Π²Π°ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Всичко Ρ‰Π΅ бъдС Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ°, Π±Π°Π·ΠΈΡ€Π°Π½ΠΎ Π½Π° Docker.

9. Π›ΠΎΠ³ΠΎΠ²Π΅ (Logs) β€” всички Π»ΠΎΠ³ΠΎΠ²Π΅ Π² Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈΠ·Π»ΠΈΠ·Π°Ρ‚ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ са Π²ΠΈΠ΄ΠΈΠΌΠΈ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° Docker. (Π² Ρ‚ΠΎΠ·ΠΈ случай, наистина, с Π΄Ρ€ΡƒΠ³ΠΈ самостоятСлни ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ Ρ‚Π°ΠΊΠ°, Π°ΠΊΠΎ Π½Π΅ сС ΠΏΠΎΠ³Ρ€ΠΈΠΆΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΎΠ²Π°)

 docker-compose logs -f

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Но Ρ‚ΡƒΠΊ ΠΈΠΌΠ° ΡƒΠ»ΠΎΠ²ΠΊΠ°, Ρ‡Π΅ Default стойноститС Π² PHP ΠΈ Nginx ΡΡŠΡ‰ΠΎ записват Π»ΠΎΠ³ΠΎΠ²Π΅ Π² Ρ„Π°ΠΉΠ». Π—Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ Π½Π° 12 Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ записванСто Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ Π² Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° всСки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Docker прСдоставя Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° насочванС Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π΅ само Π² stdout, Π½ΠΎ ΠΈ Π² Π½Π΅Ρ‰Π° ΠΊΠ°Ρ‚ΠΎ graylog, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ… ΠΏΠΎ-Π³ΠΎΡ€Π΅. А Π² graylog ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ искамС ΠΈ Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ няма Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Ρ‚ΠΎΠ²Π°.

10. Административни Π·Π°Π΄Π°Ρ‡ΠΈ β€” всички Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ администриранСто сС Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ ΠΎΡ‚ Laravel Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° инструмСнта Artisan, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ искат ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° 12 Ρ„Π°ΠΊΡ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ някои ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.
Π’Π»ΠΈΠ·Π°ΠΌΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

 
docker-compose exec workspace bash
php artisan list

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ всяка ΠΊΠΎΠΌΠ°Π½Π΄Π°. (ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ кСша, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ няма Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ са ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с кСша ΠΈ Π‘Π”).

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° мСтодологията Π½Π° The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

11. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ 12. БглобяванС, ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, изпълнСниС

Π’Π°Π·ΠΈ част исках Π΄Π° посвСтя Π½Π° Blue-Green Deployment, Π½ΠΎ сС ΠΎΠΊΠ°Π·Π° Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΎΠ±ΡˆΠΈΡ€Π½Π° Π·Π° Ρ‚Π°Π·ΠΈ статия. Π©Π΅ напиша ΠΎΡ‚Π΄Π΅Π»Π½Π° статия Π·Π° Ρ‚ΠΎΠ²Π°.

Накратко, концСпцията сС основава Π½Π° систСми CI/CD, ΠΊΠ°Ρ‚ΠΎ Jenkins ΠΈ Gitlab CI. И Π² Π΄Π²Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ срСда, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° срСда. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΡŠΠ² сцСнарий Ρ‰Π΅ сС изпълнява Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

А Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π° Π·Π° БглобяванС, ΠΈΠ·Π΄Π°Π²Π°Π½Π΅, изпълнСниС сС Ρ€Π΅ΡˆΠ°Π²Π° ΠΎΡ‚ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ Π² Π΄Π²Π΅Ρ‚Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Ρ‚ΠΎ Pipeline.

Pipeline позволява Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅ процСса Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΅Ρ‚Π°ΠΏΠ°, ΠΊΠ°Ρ‚ΠΎ обособитС Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π½Π° сборка, пусканС ΠΈ изпълнСниС. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π² Pipeline ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΈ копия ΠΈ наистина всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅. Π’ΠΎΠ·ΠΈ инструмСнт ΠΈΠΌΠ° Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π».

ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π° Π½Π° Github.
НС забравяйтС Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ submodule ΠΏΡ€ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

P.S.: Всички Ρ‚Π΅Π·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ с ΠΊΠ°ΠΊΠ²ΠΈΡ‚ΠΎ ΠΈ Π΄Π° Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ инструмСнти ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡ†ΠΈ. Π’Π°ΠΆΠ½ΠΎ Π΅ основната идСя Π΄Π° Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster