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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green deployment, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° мСтодологията 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 внСдряванС Π΅ Π½Π°Ρ‡ΠΈΠ½ Π·Π° доставка Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° производството ΠΏΠΎ Π½Π°Ρ‡ΠΈΠ½, ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Π½Π΅ забСлязва Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΎΡ‚ своя страна. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с Π½ΡƒΠ»Π΅Π² Π²Ρ€Π΅ΠΌΠ΅ Π½Π° нСработоспособност.

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

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

  • Π’ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ ΠΈΠΌΠ° 2 физичСски ΡΡŠΡ€Π²ΡŠΡ€Π° с Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΈ ΠΈΠΌΠ° Ρ€ΡƒΡ‚Π΅Ρ€ (Π±Π°Π»Π°Π½ΡΡŒΠΎΡ€).
  • Π ΡƒΡ‚Π΅Ρ€ΡŠΡ‚ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ насочва всички заявки към Π΅Π΄ΠΈΠ½ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ (Π·Π΅Π»Π΅Π½).
  • Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ вСрсия, цСлият ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ сС обновява Π½Π° другия ΡΡŠΡ€Π²ΡŠΡ€ (син), ΠΊΠΎΠΉΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ заявки.
  • Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π½Π° синия ΡΡŠΡ€Π²ΡŠΡ€ Π΅ напълно ΠΎΠ±Π½ΠΎΠ²Π΅Π½, Π½Π° Ρ€ΡƒΡ‚Π΅Ρ€Π° сС Π΄Π°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ‡Π΅ трябва Π΄Π° сС ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΠΎΡ‚ Π·Π΅Π»Π΅Π½ Π½Π° син ΡΡŠΡ€Π²ΡŠΡ€.
  • Π‘Π΅Π³Π° всички ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π²ΠΈΠΆΠ΄Π°Ρ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ΄Π° ΠΎΡ‚ синия ΡΡŠΡ€Π²ΡŠΡ€.
  • Някакво Π²Ρ€Π΅ΠΌΠ΅, Π·Π΅Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ слуТи ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½Π° копия Π² случай Π½Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ внСдряванС Π½Π° син ΡΡŠΡ€Π²ΡŠΡ€ ΠΈ Π² случай Π½Π° ΠΏΡ€ΠΎΠ²Π°Π» ΠΈ бъговС, Ρ€ΡƒΡ‚Π΅Ρ€ΡŠΡ‚ прСнасочва ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ към Π·Π΅Π»Π΅Π½ със старата стабилна вСрсия, Π° новият ΠΊΠΎΠ΄ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π·Π° Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ тСстванС.
  • И Π² края Π½Π° процСса, ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½ сС обновява Π·Π΅Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€. И слСд Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Ρ€ΡƒΡ‚Π΅Ρ€ΡŠΡ‚ прСнасочва ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‚ заявки ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° Π·Π΅Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€.

ИзглСТда всичко Ρ‚ΠΎΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅ ΠΈ Π½Π° ΠΏΡ€ΡŠΠ² ΠΏΠΎΠ³Π»Π΅Π΄ Π½Π΅ Π±ΠΈ трябвало Π΄Π° ΠΈΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ.
Но Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΆΠΈΠ²Π΅Π΅ΠΌ Π² ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ свят, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΡŠΡ‚ с физичСско ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² класичСската схСма, Π½Π΅ Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π°. Π—Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ информацията Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ към нСя ΠΏΠΎ-късно.

Π’Ρ€Π΅Π΄Π½ΠΈ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΡŠΠ²Π΅Ρ‚ΠΈ

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ отговорност: Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ са посочСни инструмСнти/ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всякакви Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΈ с ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Ρ‰Π΅ сС прСсичат Ρ‚Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ с ΡƒΠ΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° (ΠΈΠ·Π½Π΅Π½Π°Π΄Π°!), с PHP ΠΈ Docker.

Π’ Ρ‚ΠΎΡ‡ΠΊΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ ΠΈΠΌΠ° просто практичСско описаниС Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ, Π°ΠΊΠΎ искатС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ тСория ΠΏΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ сС към Π»ΠΈΠ½ΠΊΠΎΠ²Π΅Ρ‚Π΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅ към оригиналния ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ.

1. Кодова база

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ FTP ΠΈ FileZilla, Π·Π° Π΄Π° ΠΊΠ°Ρ‡Π²Π°Ρ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ ΠΏΠΎ Π΅Π΄ΠΈΠ½, Π½Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄Π° никъдС, освСн Π½Π° производствСния ΡΡŠΡ€Π²ΡŠΡ€.

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²ΠΈΠ½Π°Π³ΠΈ трябва Π΄Π° ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½Π½Π° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°, тоСст, цСлият ΠΊΠΎΠ΄ ΠΈΠ΄Π²Π° ΠΎΡ‚ Π΅Π΄Π½ΠΎ Git Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅. Π‘ΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ (production, staging, test1, test2 ...) ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠΎΠ΄Π° ΠΎΡ‚ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΠ±Ρ‰ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ постигамС консистСнтност Π½Π° ΠΊΠΎΠ΄Π°.

2. Зависимости

БваляйтС всички Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. АктуализациитС сС правят просто Ρ‡Ρ€Π΅Π· ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° новия ΠΊΠΎΠ΄ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° с Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° вСрсия Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ инструмСнти Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π½Π° хостинг ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ работят ΠΎΡ‰Π΅ 20 услуги.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π²ΠΈΠ½Π°Π³ΠΈ трябва Π΄Π° ΠΈΠΌΠ° ясно Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ списък с зависимости (ΠΏΠΎΠ΄ зависимости Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ ΠΈ срСдата). Всички зависимости трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ.
ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ Composer ΠΈ Docker.

Composer β€” ΠΏΠ°ΠΊΠ΅Ρ‚Π΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€, позволяващ инсталиранС Π½Π° PHP Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Composer Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС Π·Π°Π΄Π°Π²Π°Ρ‚ вСрсии строго ΠΈΠ»ΠΈ Π½Π΅ строго ΠΈ Π΄Π° сС опрСдСлят ясно. На ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ 20 Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ всСки Ρ‰Π΅ ΠΈΠΌΠ° собствСн списък с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, нСзависСщ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅.

Docker β€” инструмСнт, позволяващ Π΄Π° сС опрСдСля ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π° срСдата, Π² която Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ с composer, Π½ΠΎ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ с ΠΊΠ°ΠΊΠ²ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π”Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° вСрсия Π½Π° PHP, Π΄Π° инсталирамС само Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π±Π΅Π· Π΄Π° добавямС Π½ΠΈΡ‰ΠΎ излишно. А Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ, Π±Π΅Π· Π΄Π° сС прСсичамС с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ ΠΈ срСдата Π½Π° хост ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. ВоСст всички ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° ΡΡŠΡ€Π²Π΅Ρ€Π°, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Ρ‡Ρ€Π΅Π· Docker, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всякакъв Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° срСда.

3. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

Π—Π°ΠΏΠ°Π·Π²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΊΠ°Ρ‚ΠΎ константи Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² ΠΊΠΎΠ΄Π°. ΠžΡ‚Π΄Π΅Π»Π½ΠΈ константи Π·Π° тСстовия ΡΡŠΡ€Π²ΡŠΡ€, ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π·Π° продукцията. ΠŸΡ€ΠΈΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² зависимост ΠΎΡ‚ срСдата Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ конструкции if else.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ β€” Ρ‚ΠΎΠ²Π° Π΅ СдинствСното, с ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡΡ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (deployment). Π’ идСалния случай ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ трябва Π΄Π° сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата (env vars).

ВоСст, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ няколко ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»Π° .config.prod .config.local ΠΈ Π³ΠΈ ΠΏΡ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Ρ‚Π΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Π² .config (основната конфигурация, ΠΎΡ‚ която ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ) β€” Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΡŠΠ² случай информацията ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Ρ‰Π΅ Π΅ ΠΎΠ±Ρ‰ΠΎΠ΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π·Π° всички Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ продукционния ΡΡŠΡ€Π²ΡŠΡ€ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€Π°Π½ΠΈ. Всички ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² систСмата Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚ (CI/CD) ΠΈ Π΄Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСди с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ стойности, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° срСда ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚Π°.

4. Π’ΡŠΠ½ΡˆΠ½ΠΈ услуги (Backing Services)

Π‘Ρ‚Ρ€ΠΈΠΊΡ‚Π½ΠΎ сС ΡΠ²ΡŠΡ€Π·Π²Π°ΠΉΡ‚Π΅ с ΠΎΠΊΠΎΠ»Π½Π°Ρ‚Π° срСда, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ Π·Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ услуги Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ срСди.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ силно сС ΠΏΡ€ΠΈΠΏΠΎΠΊΡ€ΠΈΠ²Π° с ΠΏΡƒΠ½ΠΊΡ‚Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π±Π΅Π· Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡƒΠ½ΠΊΡ‚ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС направят Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ ΠΎΡ‚ΠΏΠ°Π΄Π½Π΅.

Всички Π²Ρ€ΡŠΠ·ΠΊΠΈ към външни услуги, ΠΊΠ°Ρ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° опашки, Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠ΅ΡˆΠΈΡ€Π°Ρ‰ΠΈ услуги, трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° срСда, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° Π²ΡŠΠ½ΡˆΠ½Π°Ρ‚Π° / ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° срСда. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΌΠΎΠ³Π° ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅, промСняйки Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°, Π΄Π° замСня обращСнията към Π±Π°Π·Π° #1 с Π±Π°Π·Π° #2 Π±Π΅Π· промяна Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Или забСлязвайки Π½Π°ΠΏΡ€Π΅Π΄, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° подходящ Π΅, Ρ‡Π΅ ΠΏΡ€ΠΈ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ Π½Π° услугата, няма Π΄Π° трябва Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° кСш Π΄Π° ΡƒΠΊΠ°Π·Π²Π°Ρ‚Π΅ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΏΠΎ някакъв спСциалСн Π½Π°Ρ‡ΠΈΠ½.

5. Π‘Π±ΠΎΡ€ΠΊΠ°, Ρ€Π΅Π»ΠΈΠ·, изпълнСниС

Π˜ΠΌΠ°ΠΉΡ‚Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° само Ρ„ΠΈΠ½Π°Π»Π½Π°Ρ‚Π° вСрсия Π½Π° ΠΊΠΎΠ΄Π°, Π±Π΅Π· шансовС Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° Ρ€Π΅Π»ΠΈΠ·Π° Π½Π°Π·Π°Π΄. НС Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° Π·Π°ΠΏΡŠΠ»Π²Π°Ρ‚Π΅ дисковото пространство. ΠšΠΎΠΉΡ‚ΠΎ си мисли, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° пуснС ΠΊΠΎΠ΄ Π½Π° продукцията с Π³Ρ€Π΅ΡˆΠΊΠ°, Π΅ лош програмист!

Всички Π΅Ρ‚Π°ΠΏΠΈ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ‚Π° трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си.

Π˜ΠΌΠ°ΠΉΡ‚Π΅ шанс Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠŸΡ€Π°Π²Π΅Ρ‚Π΅ Ρ€Π΅Π»ΠΈΠ·ΠΈ, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΠΊΠΈ Π² Π±ΡŠΡ€Π· Π΄ΠΎΡΡ‚ΡŠΠΏ стари копия Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Π²Π΅Ρ‡Π΅ ΡΡŠΠ±Ρ€Π°Π½ΠΈ ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π² случай Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ стара вСрсия. ВоСст условно ΠΈΠΌΠ° ΠΏΠ°ΠΏΠΊΠ° releases ΠΈ ΠΏΠ°ΠΏΠΊΠ° current, ΠΈ слСд ΡƒΡΠΏΠ΅ΡˆΠ΅Π½ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈ сборка ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° current сС ΡΠ²ΡŠΡ€Π·Π²Π° с новия Ρ€Π΅Π»ΠΈΠ·, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π²ΡŠΡ‚Ρ€Π΅ releases с условно Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° Ρ€Π΅Π»ΠΈΠ·Π°.

Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сС спомним Π·Π° Blue-Green deployment, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π΅ само Π΄Π° сС ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ всички рСсурси ΠΈ Π΄ΠΎΡ€ΠΈ срСди с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π°Π·Π°Π΄.

6. ΠŸΡ€ΠΎΡ†Π΅ΡΠΈ

Π‘ΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ нСпосрСдствСно Π² самото ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ сСсии Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ възмоТно Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ сподСлСни ΠΌΠ΅ΠΆΠ΄Ρƒ външни услуги. ΠžΡΠ½ΠΎΠ²Π°Π²Π°ΠΉΡ‚Π΅ сС Π½Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° само Π΅Π΄ΠΈΠ½ процСс ΠΈ Π½Π΅ допускайтС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅.

ΠžΡ‚Π½ΠΎΡΠ½ΠΎ сСсиитС, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ само Π² кСша, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ ΠΎΡ‚ външни услуги (memcached, redis), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ стартирани 20 процСса Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, всСки ΠΎΡ‚ тях, ΠΊΠ°Ρ‚ΠΎ сС ΡΠ²ΡŠΡ€ΠΆΠ΅ с кСша, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ потрСбитСлят Π΅ Π±ΠΈΠ», Ρ€Π°Π±ΠΎΡ‚Π΅ΠΉΠΊΠΈ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ процСс. Π‘ Ρ‚Π°ΠΊΡŠΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, нСзависимо ΠΊΠΎΠ»ΠΊΠΎ копия Π½Π° външни услуги ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, всичко Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΠΈ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ Π΄Π°Π½Π½ΠΈ.

7. ΠŸΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ (Port binding)

Π‘Π°ΠΌΠΎ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ трябва Π΄Π° Π·Π½Π°Π΅ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с външни услуги. А Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сС стартират външни услуги Π½Π°ΠΏΡ€Π°Π²ΠΎ Π²ΡŠΡ‚Ρ€Π΅ Π² ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€Π°. НапримСр, ΠΊΠ°Ρ‚ΠΎ PHP ΠΌΠΎΠ΄ΡƒΠ» Π² Apache.
Всички ваши услуги трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π΅Π΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³Π° Ρ‡Ρ€Π΅Π· ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ към някакъв адрСс ΠΈ ΠΏΠΎΡ€Ρ‚ (localhost:5432, localhost:3000, nginx:80, php-fpm:9000), Ρ‚.Π΅. ΠΎΡ‚ nginx ΠΌΠΎΠ³Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΈ Π΄ΠΎ php-fpm, ΠΈ Π΄ΠΎ postgres, Π° ΠΎΡ‚ php-fpm Π΄ΠΎ postgres ΠΈ nginx, ΠΈ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΎΡ‚ всяка услуга ΠΌΠΎΠ³Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Π΄Ρ€ΡƒΠ³Π° услуга. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ ТизнСспособността Π½Π° услугата Π½Π΅ зависи ΠΎΡ‚ ТизнСспособността Π½Π° Π΄Ρ€ΡƒΠ³Π° услуга.

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

Π Π°Π±ΠΎΡ‚Π΅Ρ‚Π΅ с Π΅Π΄ΠΈΠ½ процСс, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ успСят Π΄Π° ΡΡŠΠΆΠΈΡ‚Π΅Π»ΡΡ‚Π²Π°Ρ‚ няколко процСса!

ΠžΡΡ‚Π°Π²ΡΠΉΡ‚Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅. Docker Swarm Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ Π·Π° Ρ‚ΠΎΠ²Π°.
Docker Swarm Π΅ инструмСнт Π·Π° създаванС ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ машини, Ρ‚Π°ΠΊΠ° ΠΈ мноТСство ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π½Π° Π΅Π΄Π½Π° машина.

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° swarm ΠΌΠΎΠ³Π° Π΄Π° опрСдСля ΠΊΠΎΠ»ΠΊΠΎ рСсурси Ρ‰Π΅ отдСля Π·Π° всСки процСс ΠΈ ΠΊΠΎΠ»ΠΊΠΎ процСса ΠΎΡ‚ Π΅Π΄Π½Π° ΠΈ ΡΡŠΡ‰Π° услуга Ρ‰Π΅ стартирам, Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡΡ‚ балансировчик, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠΎΡ€Ρ‚, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ Π³ΠΈ проксира към процСситС. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π°ΠΊΠΎ видя, Ρ‡Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π΅ нараснало, ΠΌΠΎΠ³Π° Π΄Π° добавя ΠΏΠΎΠ²Π΅Ρ‡Π΅ процСси, Π·Π° Π΄Π° намаля Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ процСси.

9. Утилизация (Disposability)

НС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ опашки Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с процСси ΠΈ Π΄Π°Π½Π½ΠΈ. Убийството Π½Π° Π΅Π΄ΠΈΠ½ процСс трябва Π΄Π° влияС Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° цялото ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Ако Π΅Π΄Π½Π° услуга ΠΏΠ°Π΄Π½Π΅ β€” всичко ΠΏΠ°Π΄Π°.

ВсСки процСс ΠΈ услуга ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ трябва Π΄Π° засяга Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ услуги (Π½Π΅ става Π΄ΡƒΠΌΠ° Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ услугата няма Π΄Π° бъдС Π½Π°Π»ΠΈΡ‡Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³Π° услуга, Π° Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ Π΄Ρ€ΡƒΠ³Π° услуга няма Π΄Π° сС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈ слСд Ρ‚Π°Π·ΠΈ). Всички процСси трябва Π΄Π° Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ ΠΏΠ»Π°Π²Π½ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€ΠΈ тяхното Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π΄Π° Π½Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΈ ΠΏΡ€ΠΈ слСдващото Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ систСмата Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. ВоСст Π΄ΠΎΡ€ΠΈ Π² случай Π½Π° Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ спиранС, Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π΅ трябва Π΄Π° пострадат (Ρ‚ΡƒΠΊ Π±ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Π» ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, заявкитС Π² Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ работят само Π½Π° Π³Ρ€ΡƒΠΏΠΈ, ΠΈ Π°ΠΊΠΎ ΠΏΠΎΠ½Π΅ Π΅Π΄Π½Π° заявка ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π΅ Π΅ Π±ΠΈΠ»Π° изпълнСна ΠΈΠ»ΠΈ Π΅ Π±ΠΈΠ»Π° изпълнСна с Π³Ρ€Π΅ΡˆΠΊΠ°, Ρ‚ΠΎ Π½ΠΈΡ‚ΠΎ Π΅Π΄Π½Π° Π΄Ρ€ΡƒΠ³Π° заявка ΠΎΡ‚ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π΅ сС изпълнява Ρ€Π΅Π°Π»Π½ΠΎ).

10. ΠŸΠ°Ρ€ΠΈΡ‚Π΅Ρ‚ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°/Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ

ΠŸΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½, стСйдТинг ΠΈ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° вСрсия Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ. На ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ΠΈΠΌΠ°ΠΌΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΡƒΡŠΡ€ΠΊ Yii Lite, Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ Yii, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΄Π΅!

Π’ дСйствитСлност всички Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½ΠΈΡ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ΄Π° трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° срСда (Π½Π΅ става Π΄ΡƒΠΌΠ° Π·Π° физичСско ТСлязо). Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ΠΏΡ€ΠΈ нСобходимост трябва Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ всСки слуТитСл ΠΎΡ‚ Π΅ΠΊΠΈΠΏΠ° Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Π° Π½Π΅ само спСциално ΠΎΠ±ΡƒΡ‡Π΅Π½ devops ΠΎΡ‚Π΄Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ само Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° спСциална сила ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π΄ΠΈΠ³Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°.

Π’ΡƒΠΊ ΡΡŠΡ‰ΠΎ Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Docker. ΠŸΡ€ΠΈ спазванС Π½Π° всички ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° docker Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ процСса Π½Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° срСда ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° продукцията, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° машина Π΄ΠΎ въвСТданС Π½Π° Π΅Π΄Π½Π°-Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.

11. Π–ΡƒΡ€Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ (Logs)

Π›ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ записвамС във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ! Π€Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ Π±Π°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ Π½Π΅ сС почистват. ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ‰Π΅ ΠΊΡƒΠΏΠΈΠΌ Π΅Π΄ΠΈΠ½ Ρ‚Π²ΡŠΡ€Π΄ диск Π½Π° 9000 ΠŸΠ΅Ρ‚Π° Π±Π°ΠΉΡ‚Π° ΠΈ всичко Π΅ Π½Π°Ρ€Π΅Π΄.

Всички Π»ΠΎΠ³ΠΎΠ²Π΅ трябва Π΄Π° сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ. Π‘Π°ΠΌΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ трябва Π΄Π° сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅. Π›ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅ трябва Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ Π»ΠΈΠ±ΠΎ Π² stdout, Π»ΠΈΠ±ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΊΠ°Ρ‚ΠΎ udp, Π·Π° Π΄Π° Π½Π΅ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π—Π° Ρ‚Π°Π·ΠΈ Ρ†Π΅Π» graylog Π΅ ΠΌΠ½ΠΎΠ³ΠΎ подходящ. Graylog, ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΉΠΊΠΈ всички Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΏΠΎ udp (ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Ρ‡Π°ΠΊΠ° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π·Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°), Π½Π΅ ΠΏΡ€Π΅Ρ‡ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½ ΠΈ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° само със структуриранС ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅Ρ‚Π΅. Π›ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ сС промСня Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈ.

12. Π—Π°Π΄Π°Ρ‡ΠΈ Π½Π° администриранСто

Π—Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ Ρ‚.Π½. ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ създадСн Π΅Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚ Π² API, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ ΠΏΠΎΠ΄Ρ€Π΅Π΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅ Π½Π° всичко. Но Π²ΠΈΠ΅ Π½Π΅ стС Π³Π»ΡƒΠΏΠ°Ρ†ΠΈ Π΄Π° натиснСтС 2 ΠΏΡŠΡ‚ΠΈ, Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π΅ Π½ΠΈ трябват.

Всички Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π° администриранС трябва Π΄Π° сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ Π² ΡΡŠΡ‰Π°Ρ‚Π° срСда, Π² която Π΅ цСлият ΠΊΠΎΠ΄, Π½Π° Π½ΠΈΠ²ΠΎ вСрсии. ВоСст, Π°ΠΊΠΎ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ структурата Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ, няма Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π° Ρ€ΡŠΠΊΠ°, промСняйки ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈΡ‚Π΅ ΠΈ добавяйки Π½ΠΎΠ²ΠΈ Ρ‡Ρ€Π΅Π· някакви Π²ΠΈΠ·ΡƒΠ°Π»Π½ΠΈ инструмСнти Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. Π—Π° Ρ‚Π°ΠΊΠΈΠ²Π° Π½Π΅Ρ‰Π° създавамС ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ скриптовС β€” ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ навсякъдС ΠΈ Π½Π° всички срСди с Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΈ ясСн Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚. Π—Π° всички останали Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°Ρ‚ΠΎ попълванС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с Π΄Π°Π½Π½ΠΈ, трябва Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° рСализация Π½Π° PHP, Laravel, Laradock, Docker-Compose

P.S Всички ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ бяха ΠΏΡ€Π°Π²Π΅Π½ΠΈ Π½Π° MacOS. Голямата част ΠΎΡ‚ тях Ρ‰Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π°Ρ‚ ΠΈ Π·Π° Linux. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π½Π° Windows, извинявайтС, Π½ΠΎ ΠΎΡ‚Π΄Π°Π²Π½Π° Π½Π΅ съм Ρ€Π°Π±ΠΎΡ‚ΠΈΠ» с Windows.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡΠΌΠ΅ си ситуация, Π² която Π½Π° нашия PC Π½Π΅ Π΅ инсталирана Π½ΠΈΠΊΠ°ΠΊΠ²Π° вСрсия Π½Π° PHP ΠΈ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½ΠΈΡ‰ΠΎ Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ.
Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΌΠ΅ послСднитС вСрсии Π½Π° docker ΠΈ docker-compose. (Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚)

docker -v && 
docker-compose -v

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

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

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

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

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

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

cd laradock && 
cp env-example .env

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

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

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ само ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

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

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

ΠŸΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π°

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

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

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

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

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

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

ls
exit
docker-compose down

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

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

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

3. ДобавямС цСлия ΠΊΠΎΠ΄ Π² Git.

Π—Π° Ρ†Π΅Π»Ρ‚Π° създавамС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° Github (ΠΈΠ»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎ място). ΠŸΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ сС Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π² дирСкторията habr ΠΈ изпълнявамС слСдния ΠΊΠΎΠ΄.

echo "# habr-12factor" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:nzulfigarov/habr-12factor.git # Ρ‚ΡƒΠΊ Ρ‰Π΅ бъдС Π»ΠΈΠ½ΠΊΡŠΡ‚ към Π²Π°ΡˆΠ΅Ρ‚ΠΎ Ρ€Π΅ΠΏΠΎ
git push -u origin master
git status

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

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

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

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

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

docker-compose up -d nginx php-fpm

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green deployment, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° мСтодологията 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, nginx, workspace) ΠΆΠΈΠ²Π΅Π΅ собствСния си ΠΆΠΈΠ²ΠΎΡ‚ ΠΈ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½Π° ΠΎΡ‚Π²ΡŠΠ½ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π΅Π΄Π½Π° услуга, Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° Π½Π΅ Ρ‰Π΅ бъдС засСгната.

4. ΠŸΡ€ΠΎΡ†Π΅ΡΠΈ β€” всяка услуга Π΅ Π΅Π΄ΠΈΠ½ процСс. Всяка ΠΎΡ‚ слуТбитС Π½Π΅ Π·Π°ΠΏΠ°Π·Π²Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.

5. Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅ (Port binding)

docker ps

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green deployment, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° мСтодологията 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 deployment, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° мСтодологията The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° php ΠΈ docker

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

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

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

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

 docker-compose logs -f

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

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

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

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

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

 
docker-compose exec workspace bash
php artisan list

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

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния ΠΈ Blue-Green deployment, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° мСтодологията 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