Browse Source

docs: обновлена проектная документация по деплою на Vercel

- TZ.md: хостинг (Vercel), стек (актуальные версии Next.js 16/NestJS 11/Prisma 7/pnpm 10/Tailwind 4),
  раздел 12.2 с командой деплоя, закрыты ОВ-02 и ОВ-06
- SPRINTS.md: в Sprint 2 — ссылка на production URL; Sprint 12 — уточнены задачи деплоя
- docs/DEPLOY.md: новый файл — инструкция по деплою фронтенда, локальной разработке,
  план автодеплоя через Gitea Actions, варианты хостинга бэкенда

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sprint/3
AR 15 M4 1 week ago
parent
commit
a715503ca5
  1. 156
      docs/DEPLOY.md
  2. 18
      docs/SPRINTS.md
  3. 53
      docs/TZ.md

156
docs/DEPLOY.md

@ -0,0 +1,156 @@
# Деплой — oclinica-brandbook
## Текущее состояние
| Сервис | Статус | URL | Платформа |
|------------|-------------|----------------------------------------|---------------|
| Фронтенд | ✅ Активен | https://web-oclinica.vercel.app | Vercel Hobby |
| Бэкенд | локально | http://localhost:3001 | Docker Compose |
| База данных | локально | localhost:5433 | PostgreSQL 16 |
---
## Фронтенд — Vercel
### Первоначальная настройка (уже выполнена)
```bash
# 1. Установить Vercel CLI
npm install -g vercel
# 2. Войти в аккаунт (однократно, открывает браузер)
vercel login
# 3. Первый деплой из директории apps/web
cd apps/web
vercel --yes
```
### Деплой обновлений
```bash
cd apps/web
vercel --prod --yes
```
Деплой занимает ~30 секунд. После завершения изменения сразу доступны по адресу:
**https://web-oclinica.vercel.app**
### Как это работает
- Vercel автоматически определяет Next.js и использует pnpm для сборки
- Каждый `vercel --prod` создаёт новый immutable deployment и привязывает его к production URL
- Предыдущие деплои остаются доступны по уникальным preview URL
- Логи билда: https://vercel.com/oclinica/web
### Ограничения Vercel Hobby (бесплатный план)
| Параметр | Лимит |
|-----------------------|-------------------------|
| Bandwidth | 100 GB / месяц |
| Builds | 6000 минут / месяц |
| Serverless Functions | 100 GB-hours / месяц |
| Тип использования | Только некоммерческие |
Для брендбука (внутренний инструмент) лимитов более чем достаточно.
---
## Локальная разработка
### Запуск фронтенда
```bash
# Из корня monorepo
pnpm dev
# Или только фронтенд
cd apps/web && pnpm dev
```
Доступен на: http://localhost:3001
### Запуск бэкенда + БД
```bash
# Запустить PostgreSQL
docker compose up -d
# Запустить NestJS
cd apps/api && pnpm dev
```
### .env файлы
```bash
# Скопировать и заполнить
cp .env.example .env
```
Содержимое `.env.example`:
```
DATABASE_URL="postgresql://brandbook:brandbook@localhost:5433/brandbook"
API_PORT=3001
NEXT_PUBLIC_API_URL=http://localhost:3001
```
---
## Автодеплой через Gitea Actions (планируется в Sprint 12)
Для автоматического деплоя при пуше в ветку `main` создать файл
`.gitea/workflows/deploy-frontend.yml`:
```yaml
name: Deploy Frontend to Vercel
on:
push:
branches: [main]
paths:
- 'apps/web/**'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
cache-dependency-path: apps/web/pnpm-lock.yaml
- name: Install Vercel CLI
run: npm install -g vercel
- name: Deploy to Vercel
run: cd apps/web && vercel --prod --yes --token ${{ secrets.VERCEL_TOKEN }}
```
**Настройка:**
1. Получить Vercel Token: https://vercel.com/account/tokens
2. Добавить в Gitea: Settings → Secrets → `VERCEL_TOKEN`
---
## Хостинг бэкенда (планируется к Sprint 11)
Бэкенд (NestJS + PostgreSQL) потребуется для экспериментальной секции (Sprint 11).
Варианты для рассмотрения:
| Платформа | PostgreSQL | Бесплатно | Карта |
|-----------|-----------|-----------|-------|
| Railway | ✅ | $5 кредит / месяц | нужна |
| Supabase | ✅ | ✅ (PostgreSQL managed) | нет |
| Fly.io | ✅ | ✅ ограниченно | нет |
| VPS клиники | ✅ | ✅ (если есть) | нет |
Рекомендация: **Supabase** для БД (бесплатно, managed PostgreSQL) + **Railway** или VPS для NestJS.

18
docs/SPRINTS.md

@ -88,6 +88,7 @@
- Страница `/offline/print` — макеты визитки (лицо/оборот) и листовки А5, Telegram-бот - Страница `/offline/print` — макеты визитки (лицо/оборот) и листовки А5, Telegram-бот
- Sidebar: убраны «скоро» для Цветов, Типографики и всех 5 страниц Оффлайн - Sidebar: убраны «скоро» для Цветов, Типографики и всех 5 страниц Оффлайн
- Версия обновлена до **Sprint 2 · v0.2.0** - Версия обновлена до **Sprint 2 · v0.2.0**
- **Деплой на Vercel:** https://web-oclinica.vercel.app (production, бесплатно)
### Технические решения Sprint 2 ### Технические решения Sprint 2
- Страница «Цвета» — `"use client"` для clipboard API и экспорта JSON - Страница «Цвета» — `"use client"` для clipboard API и экспорта JSON
@ -252,20 +253,25 @@
--- ---
## Sprint 12 — Деплой, полировка, документация ## Sprint 12 — Полировка, финальный деплой и документация
**Цель:** Финальный релиз и публикация. **Цель:** Финальный релиз. Фронтенд уже живёт на Vercel с Sprint 2, Sprint 12 — финальная полировка и production-готовность бэкенда.
### Задачи ### Задачи
- [ ] BE + FE: Полный smoke-тест всего брендбука - [ ] BE + FE: Полный smoke-тест всего брендбука
- [ ] FE: Мобильная адаптация — финальная проверка всех страниц - [ ] FE: Мобильная адаптация — финальная проверка всех страниц
- [ ] FE: Accessibility-аудит (WCAG AA) - [ ] FE: Accessibility-аудит (WCAG AA)
- [ ] Деплой: настройка CI/CD, публикация на сервере - [ ] Деплой BE: выбрать и настроить хостинг для NestJS + PostgreSQL
- [ ] Docs: Создание `docs/deployment.md` - [ ] Деплой: настроить автоматический деплой через Gitea Actions → Vercel (при пуше в `main`)
- [ ] Docs: Обновление README.md финальными инструкциями - [ ] Docs: Обновление `docs/DEPLOY.md` финальными инструкциями
- [ ] Design: Финальный ревью брендбука - [ ] Design: Финальный ревью брендбука
**Результат спринта:** Брендбук задеплоен и доступен по URL. ### Текущий статус деплоя
- **Фронтенд:** https://web-oclinica.vercel.app (Vercel Hobby, задеплоен в Sprint 2)
- **Команда деплоя:** `cd apps/web && vercel --prod --yes`
- **Бэкенд:** локально (Docker Compose), хостинг выбирается в Sprint 12
**Результат спринта:** Брендбук полностью готов, оба сервиса задеплоены, автодеплой настроен.
--- ---

53
docs/TZ.md

@ -37,9 +37,10 @@
| Краткое название | oclinica-brandbook | | Краткое название | oclinica-brandbook |
| Сайт клиники | https://oclinica.ru | | Сайт клиники | https://oclinica.ru |
| Тип системы | Веб-приложение (Living Styleguide) | | Тип системы | Веб-приложение (Living Styleguide) |
| Режим работы | Локальная разработка + деплой на сервер | | Режим работы | Локальная разработка + Vercel (preview + production) |
| Аудитория | Внутренние дизайнеры клиники, внешние подрядчики | | Аудитория | Внутренние дизайнеры клиники, внешние подрядчики |
| Хостинг | TBD — будет прописан отдельно | | Хостинг (фронтенд) | Vercel Hobby (бесплатно) — https://web-oclinica.vercel.app |
| Хостинг (бэкенд + БД) | TBD — уточняется при переходе к Sprint 11 (экспериментальная секция) |
--- ---
@ -393,17 +394,18 @@
| Слой | Технология | Версия | Обоснование | | Слой | Технология | Версия | Обоснование |
|-------------------|-----------------------|----------|--------------------------------------------------| |-------------------|-----------------------|----------|--------------------------------------------------|
| Фронтенд | Next.js (App Router) | 15.x | SSR/SSG, оптимизация, экосистема React | | Фронтенд | Next.js (App Router) | 16.x | SSR/SSG, оптимизация, экосистема React |
| Бэкенд | NestJS | 10.x | Типизированный Node.js фреймворк, DI, модули | | Бэкенд | NestJS | 11.x | Типизированный Node.js фреймворк, DI, модули |
| База данных | PostgreSQL | 16.x | Надёжная реляционная БД, JSON-поля для атрибутов | | База данных | PostgreSQL | 16.x | Надёжная реляционная БД, JSON-поля для атрибутов |
| ORM | Prisma | 5.x | Type-safe запросы, миграции, seed | | ORM | Prisma | 7.x | Type-safe запросы, миграции, seed |
| Стилизация | CSS Modules | — | Изоляция стилей, нет рантайм-зависимостей | | Стилизация | Tailwind CSS | 4.x | Utility-first, CSS-переменные, нет рантайм-overhead |
| Дизайн-токены | CSS Custom Properties | — | Нативно поддерживается всеми браузерами | | Дизайн-токены | CSS Custom Properties | — | Нативно поддерживается всеми браузерами |
| Шрифт (бренд) | DINPro | — | Фирменный шрифт бренда, оффлайн-носители | | Шрифт (бренд) | DINPro | — | Фирменный шрифт бренда, оффлайн-носители |
| Шрифт (веб) | Fira Sans | — | Google Fonts, кириллица, веса 300 и 400, сайт | | Шрифт (веб) | Fira Sans | — | Google Fonts, кириллица, веса 300/400/500/600 |
| Авторизация | JWT + httpOnly cookie | — | Безопасное хранение токена | | Авторизация | JWT + httpOnly cookie | — | Безопасное хранение токена |
| Пакетный менеджер | pnpm | 9.x | Monorepo workspaces, скорость | | Пакетный менеджер | pnpm | 10.x | Monorepo workspaces, скорость |
| Контейнеризация | Docker + Compose | — | Единообразное окружение dev/prod | | Контейнеризация | Docker + Compose | — | Единообразное окружение локальной разработки |
| Хостинг фронтенда | Vercel | — | Нативная поддержка Next.js, бесплатный Hobby-план |
--- ---
@ -480,16 +482,29 @@ oclinica-brandbook/
| Docker | >= 24 | | Docker | >= 24 |
| Docker Compose | >= 2 | | Docker Compose | >= 2 |
### 12.2 Production-сервер ### 12.2 Деплой фронтенда (Vercel)
> TBD — параметры хостинга будут прописаны отдельно. Фронтенд (`apps/web`) деплоится на Vercel Hobby (бесплатно).
Минимальные ожидаемые требования: **Production URL:** https://web-oclinica.vercel.app
- ОС: Ubuntu 22.04+
- RAM: 2 GB **Команда деплоя** (из директории `apps/web`):
- Disk: 20 GB ```bash
- PostgreSQL 16 (или managed database) vercel --prod --yes
- Node.js 20 LTS ```
**Требования:**
- Vercel CLI установлен глобально: `npm install -g vercel`
- Выполнен `vercel login` (однократно)
**Деплой занимает ~30 секунд.** После команды изменения сразу доступны по production URL.
### 12.3 Бэкенд и база данных
> TBD — параметры хостинга бэкенда (NestJS + PostgreSQL) будут определены к Sprint 11,
> когда потребуется работающий API для экспериментальной секции.
Варианты для рассмотрения: Railway, Render, VPS клиники.
--- ---
@ -511,11 +526,11 @@ oclinica-brandbook/
| № | Вопрос | Ответственный | Срок | | № | Вопрос | Ответственный | Срок |
|----|--------------------------------------------------------------------------------------|---------------|----------| |----|--------------------------------------------------------------------------------------|---------------|----------|
| ОВ-01 | Доступен ли JSON API или REST API на oclinica.ru? Каков формат ответов? | Клиника | Sprint 1 | | ОВ-01 | Доступен ли JSON API или REST API на oclinica.ru? Каков формат ответов? | Клиника | Sprint 1 |
| ОВ-02 | Параметры хостинга для production-деплоя | Клиника | TBD | | ОВ-02 | ~~Параметры хостинга для production-деплоя~~ **Закрыт:** фронтенд — Vercel Hobby (https://web-oclinica.vercel.app); бэкенд — TBD к Sprint 11 | — | Частично закрыт |
| ОВ-03 | Нужна ли страница «Заболевание» как отдельный тип, или это подвид страницы «Услуга»? | Клиника | Sprint 9 | | ОВ-03 | Нужна ли страница «Заболевание» как отдельный тип, или это подвид страницы «Услуга»? | Клиника | Sprint 9 |
| ОВ-04 | Список иконок — какую стороннюю библиотеку утвердить? (Lucide, Heroicons, и др.) | Совместно | Sprint 2 | | ОВ-04 | Список иконок — какую стороннюю библиотеку утвердить? (Lucide, Heroicons, и др.) | Совместно | Sprint 2 |
| ОВ-05 | ~~Нужен ли раздел «Логотип» в v1.0 или ждём вектор?~~ **Закрыт:** страница логотипа реализуется в Sprint 1 с PNG-версией; вектор будет добавлен позже | — | Закрыт | | ОВ-05 | ~~Нужен ли раздел «Логотип» в v1.0 или ждём вектор?~~ **Закрыт:** страница логотипа реализуется в Sprint 1 с PNG-версией; вектор будет добавлен позже | — | Закрыт |
| ОВ-06 | HEX-эквиваленты цветов Oracal (053M, 073M, 066M, 050M, 081M, 080M) для использования в токенах | Совместно | Sprint 2 | | ОВ-06 | ~~HEX-эквиваленты цветов Oracal~~ **Закрыт:** приблизительные HEX зафиксированы в Sprint 2 и подтверждены как рабочие (053M=#7ecfca, 073M=#5b7b87, 066M=#5bb5ad, 050M=#1b4c72, 081M=#c4a882, 080M=#5c2e0e). Точная калибровка — при получении физических образцов. | — | Закрыт |
--- ---

Loading…
Cancel
Save