f8730d9d099bbd01983a43e9e2c33f81fab7a7fe
Оба дефекта вскрылись сборкой образа после слияния веток. 1. public.ts: SQL выбирает content_json_en, а описание типа запроса пришло из ветки визиток и этой колонки не знало — tsc отказывался собирать. След слияния: запрос из одной ветки, тип из другой. 2. Английские колонки (sections.content_json_en, products.title_en/subtitle_en/ description_en) существуют на боевой базе, но их не создаёт ни одна миграция — когда-то добавили руками. На бою работало, на любой ЧИСТОЙ базе приложение упало бы на первом запросе /api/content. Заведена 005 с IF NOT EXISTS: на бою пусто, на чистой базе создаст. Проверено на живом сайте: образ собран, контейнер healthy, миграции 004 и 005 применились сами, /api/content отдаёт 4 раздела на двух языках, 2 продукта, полные реквизиты; страница визитки отвечает 200.
Умный Байт — лендинг компании
Сайт компании ООО «Умный Байт» (umbyte.ru) с админ-панелью для управления контентом.
Стек
- Frontend: Vite + React + TypeScript + Tailwind CSS
- Backend: Node.js + Express + TypeScript
- БД: PostgreSQL 16
- Auth: JWT
- Deploy: Docker + Coolify на fortress.zeroday.su
Структура
umbyte-landing/
├── frontend/ # Публичный лендинг + админка
├── backend/ # REST API
├── db/ # SQL миграции
├── Dockerfile # production билд (multi-stage)
└── docker-compose.yml # для локальной разработки
Production deploy
Push в main → Coolify автоматически собирает Dockerfile и деплоит.
Переменные окружения (в Coolify):
DB_HOST=postgres-<UUID>— полное имя контейнера БДDB_USER,DB_PASSWORD,DB_NAMEJWT_SECRET— случайная строкаADMIN_INITIAL_PASSWORD— пароль первого админа при инициализации
Description
Languages
TypeScript
82.7%
CSS
5.9%
JavaScript
5%
HTML
4.7%
Dockerfile
1.7%