This commit is contained in:
Kirill
2026-06-11 16:50:47 +05:00
parent fdffc9bdf6
commit 93b1624191
8 changed files with 1267 additions and 635 deletions
@@ -0,0 +1,111 @@
# 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-скрипты из исторической монорепы (опционально)