3.9 KiB
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:
'@shared': path.resolve(projectRoot, '..', 'shop-server', 'shared'),
client/tsconfig.app.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)
actions/checkoutshop-servernpm ci→npx prisma generate→npm test- Rsync
server/→/opt/craftshop/server/(исключая node_modules, uploads, .env, *.db) - Rsync
shared/→/opt/craftshop/shared/ npx prisma migrate deployна сервереsystemctl restart craftshop-api
shop-client CI (.gitea/workflows/deploy.yml)
actions/checkoutshop-clientactions/checkoutshop-server в../shop-server/npm ci→npm test→npm run build- 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
Этапы реализации
- Создать пустые репо в Gitea
- Инициализировать shop-server: скопировать server/, shared/, scripts/ в чистый git-репо, сделать init-коммит, запушить
- Инициализировать shop-client: скопировать client/ в чистый git-репо, поправить alias на shared/, сделать init-коммит, запушить
- Настроить self-hosted runner на целевой машине
- Создать
.gitea/workflows/deploy.ymlв каждом репо - Проверить деплой через push
- Удалить deploy-скрипты из исторической монорепы (опционально)