Laravel Envoyer je placený produkt přímo od Taylora Otwela a slouží k tzv. zero downtime deploymentu pro PHP. Když Taylor poprvé uvedl Laravel Forge, náhle byl proces vytváření cloudových VPS serverů, řízení jejich prostředí a deploying stránek velmi jednoduchý a snadno dostupný.

Nicméně složitější potřeby pro deploy, jako například managing komplikovaných deploy skritpů nebo zero-downtime deploy, nebylo možné ve Forge provádět. Tedy ať už jste byli či nebyli uživateli Forge, tak jste byli nuceni spoléhat na deploy systémy jako jsou Capistrano, Chef nebo Ansible, které disponují svou efektivitou a flexibilitou, avšak současně je jejich učící křivka také velmi vysoká.

Úvod

A přesně pro tyto účely byl vytvořen Laravel Envoyer. Envoyer je zero-downtime deployer pro PHP a Laravel projekty, což znamená nástroj, který přidáte na svůj server a při deployi využívá řadu nástrojů, které zajišťují přípravu všeho, co deploy samotný potřebuje. Například klasický příkaz composer install probíhá na pozadí, zatímco předešlá verze stránek je stále plně online.

Jak funguje zero-downtime deploy?

Deploy na tradičních systémech (např. Forge) znamená, že zde existuje jediný adresář, který obsahuje veškerý obsah. Mějme například dva soubory - index.php a app složku. Klasicky je umístíte do kořenu aplikace:

/app_root/index.php
/app_root/app

Náš tradiční deploy systém pak jde do tohoto kořenu, stáhne nejnovější kód (git pull) a poté spustí deploy skript, který s velkou pravděpodobností obsahuje příkaz composer install. To znamená, že minimálně po nějakou dobu je naše stránka nefunkční.

Zero-downtime deploy systém narozdíl od toho udržuje systém releases adresářů, kdy každý adresář reprezentuje samostatný commit v naší git historii. Kdykoliv je pak potřeba, aby se deploy nahrál, vytvoří se nový adresář v releases a naklonuje do něj repozitář s jeho posledním commitem. Poté se v něm spustí kompletní deploy skript. A až poté, co je plně funkční verze aplikace připravena, se u současného adresáře změní symlink s odkazem na nejnovější adresář v releases. A to je vše, jinak řečeno, public adresář je vždy jen symlink jednoho z mnoha adresářů v releases. Laravel Envoyer vše zařídí za nás, takže výsledek pak bude vypadat takto:

/app_root/current
/app_root/releases
/app_root/releases/20210316074832
/app_root/releases/20210315041251

Co všechno obsahuje?

Bylo by velmi zdlouhavé popisovat, co všechno Envoyer obsahuje a jak to funguje, proto zde jen ve zkratce vypíšu co zahrnuje:

  • GitHub, GitLab & Bitbucket integrace
  • GitLab Self-Hosted integrace
  • Kontrola dostupnosti aplikace
  • Integrace chat notifikací (Slack, Email, Discord, Microsoft Teams)
  • Připraveno konkrétně pro Laravel aplikace
  • Možnost deploymentu jakéhokoliv PHP projektu
  • Neomezený deployment
  • Deploy na více serverů
  • Cron job monitoring
  • Možnost týmové spolupráce
  • Importování Forge serverů

Závěr

Laracast nabízí rozsáhlý neplacený video kurz o Envoyeru, který obsahuje přehled všech jeho částí. V případě zájmu tedy určitě doporučuji shlédnout.