вы
This commit is contained in:
@@ -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-скрипты из исторической монорепы (опционально)
|
||||
Reference in New Issue
Block a user