Кэш, CDN, CI и база данных (рекомендации)
Краткий конспект для эксплуатации; не заменяет Helm/README отдельных приложений.
Статика QMWeb и QMAdmin
- Выкладывайте immutable ассеты с хэшем в имени (Vite по умолчанию) и отдавайте их с долгим
Cache-Control(напримерpublic, max-age=31536000, immutable). - Для
index.htmlиспользуйте короткий кэш илиno-cache, чтобы выкатывать новые бандлы без «залипания» старого shell. - Подключение CDN поверх nginx: те же правила разделения «долго для хэшированных файлов / коротко для HTML».
Загрузки QMServer в S3
При загрузке объектов через модуль internal/s3asset задаётся Cache-Control для ответов S3/Cloud:
- Переменная
QMSERVER_S3_UPLOAD_CACHE_CONTROL(если не задана — по умолчаниюprivate, max-age=3600для пользовательского контента). - Для публичных долгоживущих ассетов оператор может выставить, например,
public, max-age=86400— осознанно, с учётом инвалидации.
Кэш в CI (Go и npm)
- В workflow уже используются
cache-dependency-pathдляgo.sumиpackage-lock.jsonтам, где настроено — сохраняйте этот паттерн при добавлении новых модулей. - Для Docker включайте registry/build cache (
cache-from/cache-totype=gha), как в образах QM*.
Multi-stage Docker
- Собирайте бинарь/фронт в builder-стадии, в финальный слой копируйте только артефакт и минимальные зависимости (Alpine/Distroless), чтобы уменьшить поверхность атаки и размер.
Индексы MySQL и миграции
- Перед добавлением индексов снимайте медленные запросы (slow log,
EXPLAIN) для кабинета и биллинга. - Миграции GORM AutoMigrate и ручные
ALTERпрогоняйте через контролируемый процесс (staging → prod, бэкап, откат).