Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ 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 deployment – это способ доставки прилоТСния Π½Π° production Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ со своСй стороны. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ прилоТСния с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ downtime.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ схСма BG Deploy выглядит Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Blue-Green deployment, ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡŽ The Twelve-Factor App с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π½Π° php ΠΈ docker

  • На стартС Π΅ΡΡ‚ΡŒ 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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ 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 Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ Π½Π° production β€” я Π±Ρ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΠ·-Π·Π° Π΅Π³ΠΎ избыточности. Π›ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² 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 [email protected]: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-fom, nignx, 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

Но, Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Default значСния Π² PHP ΠΈ Nginx Ρ‚Π°ΠΊ ΠΆΠ΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π»ΠΎΠ³ΠΈ Π² Ρ„Π°ΠΉΠ». Для соотвСтствия 12 Ρ„Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ запись Π»ΠΎΠ³ΠΎΠ² Π² Ρ„Π°ΠΉΠ» Π² конфигурациях ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Π’Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠΊΠ΅Ρ€ прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈ Π½Π΅ просто Π² 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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ