Node.js
Как перенести Node.js-проект в сеть без интернета
Короткий ответ: перед переносом нужно подготовить не только исходный код, но и зависимости. В изолированной сети npm install не сможет скачать пакеты из интернета, поэтому заранее сохраните package-lock.json, подготовьте архив node_modules или локальный npm-cache, а затем проверьте запуск проекта уже внутри закрытой сети
Такой запрос обычно возникает в корпоративной или учебной среде: проект работает на localhost, но целевая машина не имеет доступа к интернету. Здесь нельзя просто скопировать server.js и ждать, что Express, pg, dotenv или другие пакеты “как-то подтянутся”
Что должно быть в проекте
Минимально нужны
- исходные файлы проекта
package.jsonpackage-lock.json- понятная команда
npm start - конфигурация переменных окружения
- подготовленные зависимости
Проверьте локально
npm install
npm start
Если локально проект не запускается из чистого состояния, в закрытой сети он тоже не оживет
Вариант 1: перенести node_modules архивом
Самый прямой учебный вариант — собрать зависимости на машине с интернетом, затем перенести проект вместе с node_modules
npm ci
После этого архивируйте проект
tar -czf node-project.tar.gz project/
На целевой машине распакуйте и запустите
npm start
Минус подхода: node_modules может быть большим, а зависимости с нативными модулями могут зависеть от операционной системы и архитектуры. Архив, собранный на macOS, может не подойти для Linux-сервера
Вариант 2: подготовить зависимости под такую же систему
Если целевая машина Linux, лучше собирать зависимости тоже на Linux с похожей версией Node.js
Проверьте версии
node -v
npm -v
Соберите зависимости
npm ci
Потом переносите проект. Такой подход снижает риск, что нативные зависимости не запустятся после копирования
Вариант 3: локальный npm-cache или внутренний registry
Для серьезной инфраструктуры лучше не таскать node_modules руками, а использовать внутренний npm registry или заранее подготовленный cache. Тогда закрытая сеть получает зависимости из внутреннего источника
Это уже администраторский уровень, но принцип простой: если у npm нет интернета, у него должен быть другой источник пакетов
Не забудьте про версию Node.js
Проект может зависеть не только от пакетов, но и от версии Node.js. Зафиксируйте ее в .nvmrc или в документации проекта
20
На целевой машине проверьте
node -v
Если версия отличается, проект может упасть даже при перенесенных зависимостях
Переменные окружения
Не переносите .env с секретами без контроля. Для закрытой сети лучше подготовить шаблон
DATABASE_URL=
PORT=3000
JWT_SECRET=
А реальные значения внести уже на целевой машине
Проверка после переноса
Запустите проект
npm start
Проверьте health route
http://localhost:3000/health
Если проект должен быть доступен другим машинам в сети, убедитесь, что сервер слушает нужный интерфейс и firewall не блокирует порт
Мини-практика
Создайте маленький Express-проект, установите express, удалите интернет-подключение или временно проверьте в среде без доступа к npm, затем попробуйте запустить проект с заранее подготовленным node_modules
Так вы увидите главный риск: исходного кода недостаточно, если зависимости не подготовлены
Частые ошибки
Скопировали только server.js Express и другие пакеты не входят в Node.js. Их нужно переносить или устанавливать из доступного источника
Собрали node_modules на другой системе Нативные зависимости могут не запуститься. Старайтесь собирать под такую же ОС и архитектуру
Забыли package-lock.json Без lock-файла сложнее воспроизвести те же версии зависимостей
В закрытой сети нет нужной версии Node.js Переносите или устанавливайте Node.js заранее, а не только файлы проекта
Что почитать дальше по Node.js
Если нужен общий маршрут по теме, откройте рубрику Node.js. Для соседних задач пригодятся эти разборы:
- Как в Node.js передать POST-параметры без JSON
- Как запустить проект Node.js: npm install, package.json и команды start/dev
- Как инициализировать проект Node.js с package.json и первым запуском
- Как начать разработку на Node.js: первый проект, файл и запуск