Деплой монорепозитория на один VPS
Фронт, API и воркер в одном репозитории — удобно разрабатывать, но нужно грамотно задеплоить. Развернём монорепо на VPS: соберём затронутые пакеты, запустим сервисы и разведём их по доменам nginx.
Содержание
Почему монорепо и один VPS
['Монорепозиторий (Turborepo, Nx, pnpm workspaces) держит фронт, бэкенд и общие пакеты вместе: единые версии, общий код, атомарные изменения. Разворачивать несколько сервисов из него удобно на одном VPS с root — вы сами решаете, что и где запускать.', 'Сборка монорепо — это тяжёлый Node-процесс с кэшем. NVMe + быстрые ядра AMD EPYC у MAATRIX ускоряют install и build, а на одном сервере можно поднять сразу фронт, API и воркеры без переплат за отдельные инстансы.', 'Типичная ошибка — размазывать монорепо по нескольким платным сервисам: фронт на одном хостинге, API на другом, воркер на третьем. Это дорого и усложняет деплой, ведь версии кода на сервисах расходятся. Один VPS с root решает задачу элегантно: вы клонируете репозиторий, собираете нужные пакеты и запускаете все процессы рядом, разводя их по портам и доменам. Для команд из России удобно и то, что зарубежный сервер оплачивается картой РФ, СБП, криптой или токеном MAAT.']Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для монорепозиторияГотовим сервер
['curl -fsSL https://deb.nodesource.com/setup_20.x | bash -\napt install -y nodejs nginx git\nnpm install -g pnpm pm2\npnpm -v && pm2 -v', 'Клонируем репозиторий и ставим зависимости всего воркспейса одной командой:', 'git clone https://github.com/USER/monorepo /opt/app\ncd /opt/app\npnpm install --frozen-lockfile']
Сборка только затронутого
['Turborepo кэширует и собирает лишь изменённые пакеты — это резко ускоряет деплой:', 'pnpm turbo run build\n# или собрать конкретные пакеты\npnpm turbo run build --filter=web --filter=api', 'Кэш Turborepo лежит в node_modules/.cache/turbo; на NVMe повторные сборки почти мгновенные. Флаг --filter позволяет собирать и деплоить только реально изменившиеся приложения — если правился лишь apps/api, нет смысла пересобирать фронт. В связке с CI это сокращает время релиза в разы.']
Запуск сервисов через PM2
['Опишем все процессы монорепо в одном ecosystem-файле/opt/app/ecosystem.config.js:', "module.exports = {\n apps: [\n { name: 'web', cwd: 'apps/web', script: 'pnpm', args: 'start', env: { PORT: 3000 } },\n { name: 'api', cwd: 'apps/api', script: 'pnpm', args: 'start', env: { PORT: 4000 } },\n { name: 'worker', cwd: 'apps/worker', script: 'pnpm', args: 'start' }\n ]\n};", 'Один ecosystem-файл описывает все процессы монорепо: PM2 поднимет их разом, будет следить за падениями и рестартить. Флаги cwd и env задают рабочую директорию и порт для каждого приложения, чтобы сервисы не конфликтовали. Запускаем всё и включаем автостарт после ребута:', 'cd /opt/app\npm2 start ecosystem.config.js\npm2 save\npm2 startup systemd']
nginx-роутинг и частые ошибки
['Разводим сервисы по доменам: фронт на основном домене, API на поддомене. nginx слушает 443 и проксирует на локальные порты, которые наружу закрыты файрволом — публично торчит только сам nginx.', 'server {\n listen 443 ssl http2;\n server_name example.com;\n location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; }\n}\nserver {\n listen 443 ssl http2;\n server_name api.example.com;\n location / { proxy_pass http://127.0.0.1:4000; proxy_set_header Host $host; }\n}', 'nginx -t && systemctl reload nginx', '- pnpm install падает по памяти — добавьте swap или используйте
--frozen-lockfileи больший тариф. - Сервис не стартует после ребута — забыли
pm2 saveиpm2 startup. - Конфликты портов — задавайте PORT в env каждого приложения явно.
pm2 reload ecosystem.config.js вместо restart — PM2 перезапускает процессы по очереди, не обрывая обслуживание. Один VPS от MAATRIX держит весь монорепо-стек, а ежедневные бэкапы фиксируют состояние сервера перед каждым релизом.']
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для монорепозиторияЧастые вопросы
Turborepo или Nx?
Оба кэшируют и собирают инкрементально. Turborepo проще для JS/TS-проектов, Nx мощнее для крупных полиглот-монорепо.
PM2 или Docker для монорепо?
PM2 проще и легче на одном сервере; Docker удобнее, если нужна строгая изоляция окружений между сервисами.
Хватит ли одного VPS?
Для среднего проекта да. При росте нагрузки выносите тяжёлые сервисы на отдельный VPS — апгрейд тарифа делается без переезда.