Перейти к содержимому

Запускаем прод с AI | start:prod, PM2, фронт внутри бэкенда и e2e — Fullstack с AI — Часть 4

EndyKaufman

0:00 / 0:00

Запускаем прод с AI | start:prod, PM2, фронт внутри бэкенда и e2e — Fullstack с AI — Часть 4

64 просмотра · 3 дня назад
EndyKaufman
21 подписчик
64 просмотра · 3 дня назад
Продолжаем серию «Строим настоящий Fullstack-проект с AI с нуля до продакшена». В первой части мы создали основу проекта KaufmanBot на NestJS + Angular с Prisma, PostgreSQL, Docker Compose и другими инструментами. Во второй части перешли к тестированию: создавали E2E, Unit и API-тесты с помощью LLM, разбирали подход с HeyAPI. В третьей части настраивали CI/CD на GitHub Actions: пайплайны для бэкенда и фронтенда, линты, билды и юнит-тесты, MCP для GitHub и скилл для онбординга коммитов. В этой части доводим до ума запуск продакшена: разбираем по шагам скрипт start:prod, ловим «database environment is not set», выясняем, почему PM2 работал без логов, и кладём собранный фронтенд внутрь бэкенда через ServerStatic. Потом настраиваем end-to-end тесты в GitHub Actions: workflow с ручным запуском, где можно выбрать ветку бэкенда и ветку фронтенда, поднять инфраструктуру с базой и MinIO, прогнать e2e и забрать отчёты в чек. Отдельно показываю сам процесс работы с кодом, который генерирует AI: не пытаемся сделать всё сразу, а двигаемся постепенно — упали на environment, разобрались, починили, поехали дальше. Рутину отдаю дешёвой модели, решения принимаю сам и читаю то, что она написала. Два показательных случая: тест, который прошёл, но ничего не проверил, и упавший пайплайн, в который агент сходил сам через MCP для GitHub и починил его. Также показываю, почему дома я работаю с дешёвыми моделями, а на работе с Claude, и сколько сгенерированного кода приходится перечитывать. В видео: — как устроен скрипт start:prod и чем он отличается от start:dev — падение на environment и почему Node не должна сама читать env-файл — логи PM2 в проде: причина в кластерном режиме и IPC — фронтенд внутрь бэкенда через ServerStatic и флаг production — два фронтенда дают рассинхрон: в дев-режиме статику глушим — workflow с ручным запуском: ветка бэкенда и фронтенда на одном стенде — Playwright на фронтенде, JUnit-отчёты и разделение unit/e2e по папкам — self-hosted раннеры и пересекающийся порт 3000 — тест-симуляция: прошёл, но ничего не проверил — отладка упавшего пайплайна через MCP Это четвёртая часть серии, в которой мы постепенно развиваем KaufmanBot и приближаем его к полноценному production-проекту. 🔗 Исходный код проекта: https://github.com/kaufman-bot/kaufma... 🛠️ Используемые технологии: Qoder IDE AI / LLM NestJS Angular TypeScript Prisma PostgreSQL PM2 MinIO Docker GitHub Actions CI/CD MCP Playwright JUnit NGINX 📌 Серия: Часть 1 — создание проекта и базовая архитектура Часть 2 — тестирование проекта с AI и HeyAPI Часть 3 — CI/CD с AI, GitHub Actions и скилл онбординга Часть 4 — продакшн-запуск с AI, фронтенд внутри бэкенда и e2e в CI/CD Часть 5 — [добавим после выхода] Если интересна разработка приложений с использованием AI — подписывайся. Проект будем постепенно развивать дальше. Таймкоды: 00:00 — Привет и о чём выпуск Четвёртая часть: продакшен и e2e 01:15 — Как устроен start:prod: в проде один PM2 Контейнеры, база, миграции, сборка, PM2 04:07 — database environment is not set Первое падение при запуске прода 05:21 — dotenv или process.env: что правильнее Одна точка истины — process.env 06:58 — E2E-тесты смотрят на локальный адрес, а не на домен Base URL подтягивается из окружения 09:34 — Прод поднялся, а логи PM2 молчат Спрашиваю нейронку, где логи 12:19 — Причина: кластерный режим PM2 и IPC PM2 форкает процесс и забирает stdout 13:34 — Фронтенда в проде не видно: ServerStatic как в opwork В дев-режиме работал прокси 22:18 — Отработало: фронт подключён как статика Путь сборки зависит от флага production 24:22 — Два фронтенда — рассинхрон: в деве static глушим Собранный билд и watch-сервер расходятся 30:05 — Статику должен раздавать NGINX, а не Node Как так принято в реальном проде 34:01 — Идея: e2e поверх поднятой инфраструктуры, две ветки на стенде Run workflow с выбором двух веток 38:57 — Что добавил агент: workflow, Playwright, JUnit Playwright-конфиг, JUnit-отчёты, папки unit/e2e 46:22 — Self-hosted раннеры пересекаются на порту 3000 Два разработчика на одном порту 52:36 — Тест оказался симуляцией Прошёл, но SSE-время не сравнивал 56:56 — Чем умнее модель, тем больше перечитывать Тонны кода, и всё это надо прочитать 1:02:27 — Упало на сабмодулях: агент сам ходит в GitHub через MCP Сам открывает чек, находит причину, правит 1:06:59 — Почему я дома беру дешёвые модели Дешёвые дома, Claude на работе 1:13:47 — MinIO-образ не скачивается: bitnamilegacy Официальный образ в архиве, взяли чужой 1:17:25 — Финальный прогон: всё зелёное, отчёты в чеке Инфра поднялась, тесты зелёные 1:19:49 — Backend main + frontend part1 Стенд из двух разных веток 1:22:30 — Падение доказало: ветки подтягиваются Фронтенд упал, бэкенд прошёл 1:26:31 — Итог и что дальше Что настроили и следующий шаг #CI_CD #GitHubActions #AI #Fullstack #NestJS #Angular #DevOps #PM2 #Playwright #MCP #TypeScript #WebDevelopment #Qoder