Multi-target Dockerfile: Chromium только в worker/beat образе (-200 МБ с backend) #16

Closed
opened 2026-04-27 15:38:46 +00:00 by lekss361 · 1 comment
lekss361 commented 2026-04-27 15:38:46 +00:00 (Migrated from github.com)

Backend-image для FastAPI uvicorn не нуждается в Chromium — только worker и beat. Сейчас все три сервиса собираются из одного образа, тащат +200 МБ Chromium-binary напрасно.

План

  • В backend/Dockerfile добавить отдельный stage runner-with-chromium, наследующий от runner и запускающий playwright install chromium
  • В docker-compose.yml:
    • backend собирается с target: runner (чистый, без Chromium)
    • worker и beat — с target: runner-with-chromium
  • В .github/workflows/deploy.yml обновить build matrix на 2 target'а

Verification

  • backend image size до фикса (текущий с Chromium): ~1.6 ГБ
  • backend без Chromium: ~1.4 ГБ (-200 МБ)
  • worker+beat = 1.6 ГБ (как сейчас)

Out of scope

  • Кеширование Chromium-cache между билдами (отдельная оптимизация)
Backend-image для FastAPI uvicorn не нуждается в Chromium — только worker и beat. Сейчас все три сервиса собираются из одного образа, тащат +200 МБ Chromium-binary напрасно. ## План - В `backend/Dockerfile` добавить отдельный stage `runner-with-chromium`, наследующий от `runner` и запускающий `playwright install chromium` - В `docker-compose.yml`: - `backend` собирается с `target: runner` (чистый, без Chromium) - `worker` и `beat` — с `target: runner-with-chromium` - В `.github/workflows/deploy.yml` обновить build matrix на 2 target'а ## Verification - backend image size до фикса (текущий с Chromium): ~1.6 ГБ - backend без Chromium: ~1.4 ГБ (-200 МБ) - worker+beat = 1.6 ГБ (как сейчас) ## Out of scope - Кеширование Chromium-cache между билдами (отдельная оптимизация)
lekss361 commented 2026-04-27 16:29:45 +00:00 (Migrated from github.com)

Готово. backend/Dockerfile теперь имеет два таргета:

  • target=runner — lean (без Chromium, ~1.6 ГБ) для backend и beat
  • target=runner-with-chromium — для worker, ~2.9 ГБ

docker-compose.yml/docker-compose.prod.yml выбирают target по сервису. .github/workflows/deploy.yml пушит 2 GHCR-образа: gendesign-backend (lean) + gendesign-worker (chromium). Локальная сборка проверена: backend и beat 1.6 ГБ, worker 2.9 ГБ — экономия ~1.3 ГБ на backend против старого варианта.

Готово. backend/Dockerfile теперь имеет два таргета: - target=runner — lean (без Chromium, ~1.6 ГБ) для backend и beat - target=runner-with-chromium — для worker, ~2.9 ГБ docker-compose.yml/docker-compose.prod.yml выбирают target по сервису. .github/workflows/deploy.yml пушит 2 GHCR-образа: gendesign-backend (lean) + gendesign-worker (chromium). Локальная сборка проверена: backend и beat 1.6 ГБ, worker 2.9 ГБ — экономия ~1.3 ГБ на backend против старого варианта.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#16
No description provided.