Files
shop-server/docs/superpowers/specs/2026-06-11-split-monorepo-design.md
T
Kirill 93b1624191 вы
2026-06-11 16:50:47 +05:00

112 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Split monorepo into shop-server & shop-client
> Дата: 2026-06-11
## Цель
Разделить монорепу `shop_deploy` на два независимых git-репозитория, размещённых на Gitea (192.168.1.110:3000), с автоматическим деплоем через Gitea CI/CD.
## Репозитории
### shop-server
**URL:** `http://192.168.1.110:3000/admin/shop-server.git`
**Содержимое:**
```
.gitignore
README.md
AGENTS.md
.gitea/workflows/deploy.yml
server/ # Fastify + Prisma backend
shared/ # Каноничное место shared/constants/
scripts/
backup-db.sh
craftshop-backup.service
craftshop-backup.timer
SERVER_SETUP.md
```
### shop-client
**URL:** `http://192.168.1.110:3000/admin/shop-client.git`
**Содержимое:**
```
.gitignore
README.md
AGENTS.md
.gitea/workflows/deploy.yml
client/ # React + Vite frontend
```
**Не переносятся** в новые репо: `.cursor/`, `.opencode/`, `.agents/`, `REFACTORING_PLAN.md`, `skills-lock.json`, `node_modules/`, `docs/`, `.superpowers/` — остаются в исторической монорепе.
## Доступ к shared/
`shared/` живёт в **shop-server** как каноничный источник.
### shop-client: alias на shared/
`client/vite.config.ts`:
```ts
'@shared': path.resolve(projectRoot, '..', 'shop-server', 'shared'),
```
`client/tsconfig.app.json`:
```json
"@shared/*": ["../../shop-server/shared/*"]
```
Это работает при условии, что оба репо клонированы рядом:
```
~/projects/
shop-server/
server/ shared/
shop-client/
client/
```
В CI Gitea делает checkout обоих репо в одной workspace.
### shop-server
Изменений не требуется — `shared/` уже внутри репо. Сервер импортирует `shared/` через относительные пути (`../../shared/...`).
## CI/CD (Gitea Actions)
Runner: self-hosted на машине, где работает приложение (192.168.1.88 или аналог). Триггер: push в `main`.
### shop-server CI (.gitea/workflows/deploy.yml)
1. `actions/checkout` shop-server
2. `npm ci``npx prisma generate``npm test`
3. Rsync `server/``/opt/craftshop/server/` (исключая node_modules, uploads, .env, *.db)
4. Rsync `shared/``/opt/craftshop/shared/`
5. `npx prisma migrate deploy` на сервере
6. `systemctl restart craftshop-api`
### shop-client CI (.gitea/workflows/deploy.yml)
1. `actions/checkout` shop-client
2. `actions/checkout` shop-server в `../shop-server/`
3. `npm ci``npm test``npm run build`
4. Rsync `client/dist/``/opt/craftshop/www/`
## Что удаляется
- `deploy-auto.sh` — заменён Gitea CI
- `.deployed-commit` — отслеживание заменено на push-триггер
- `scripts/deploy.env` — не нужен (CI конфигурируется в Gitea)
- `scripts/craftshop-netbird.conf` — nginx настраивается один раз по `SERVER_SETUP.md`
## Этапы реализации
1. Создать пустые репо в Gitea
2. Инициализировать shop-server: скопировать server/, shared/, scripts/ в чистый git-репо, сделать init-коммит, запушить
3. Инициализировать shop-client: скопировать client/ в чистый git-репо, поправить alias на shared/, сделать init-коммит, запушить
4. Настроить self-hosted runner на целевой машине
5. Создать `.gitea/workflows/deploy.yml` в каждом репо
6. Проверить деплой через push
7. Удалить deploy-скрипты из исторической монорепы (опционально)