Один образ - кілька процесів. Той самий образ запускається як вебсервер, воркер черги й планувальник - різними командами. Код у всіх однаковий, масштабуються вони окремо.
services:
app: { image: app:1.4.2, command: frankenphp run }
worker: { image: app:1.4.2, command: php artisan queue:work --max-time=3600 }
scheduler: { image: app:1.4.2, command: php artisan schedule:work }
Що робити під час збирання образу: composer install --no-dev --optimize-autoloader, збирання ассетів, view:cache, event:cache, route:cache.
Що НЕ робити під час збирання: config:cache. У кеш потрапить оточення збирання, а не продакшену - конфігурацію кешують на старті контейнера, коли змінні оточення вже є.
Стан - назовні:
- сесії, кеш, черги - Redis чи база, а не файли контейнера;
- завантаження - S3-сумісне сховище чи том;
- журнали - у stdout/stderr (канал
stderr), їх збирає платформа.
Інше:
- права на
storageіbootstrap/cacheдля користувача PHP-процесу; - міграції - окремим кроком деплою, не в старті кожного контейнера;
- пінити версію базового образу: плаваючий тег може принести нову версію PHP чи бібліотек без вашого відома;
/up- для перевірки стану контейнера.