Node.js на сервере
Проверка установки
# Версия Node.js
node --version
# v18.x.x или выше
# Версия npm
npm --version
# Альтернативные менеджеры
npx --version
yarn --version
Пакетные менеджеры
npm (Node Package Manager) — стандартный
# Инициализация проекта
npm init
npm init -y # без вопросов
# Установка пакетов
npm install package-name # в dependencies
npm install -D package-name # в devDependencies
npm install -g package-name # глобально
# Установка из package.json
npm install
npm ci # чистая установка (для CI/CD)
# Обновление
npm update
npm outdated # показать устаревшие пакеты
# Удаление
npm uninstall package-name
yarn (альтернативный)
# Инициализация
yarn init
# Установка
yarn add package-name
yarn add -D package-name
yarn global add package-name
# Установка зависимостей
yarn install
# Обновление
yarn upgrade
pnpm (быстрый, экономит место)
# Установка
npm install -g pnpm
# Использование
pnpm install
pnpm add package-name
Структура проекта
project/
├── package.json # Конфигурация и зависимости
├── package-lock.json # Точные версии (npm)
├── node_modules/ # Установленные пакеты
├── src/
│ ├── index.js # Точка входа
│ └── modules/
├── public/ # Статические файлы
└── .env # Переменные окружения
Фреймворки
Express (минималистичный)
// Установка
npm install express
// Базовое приложение
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server running on http://192.168.0.103:${port}`);
});
NestJS (архитектурный, TypeScript)
# Установка CLI
npm install -g @nestjs/cli
# Создание проекта
nest new project-name
# Запуск
npm run start
npm run start:dev # с hot-reload
Fastify (быстрый)
npm install fastify
const fastify = require('fastify')();
fastify.get('/', async (request, reply) => {
return { hello: 'world' };
});
const start = async () => {
try {
await fastify.listen({ port: 3000, host: '0.0.0.0' });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
Koa (современный, от создателей Express)
npm install koa koa-router
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
router.get('/', (ctx) => {
ctx.body = 'Hello Koa';
});
app.use(router.routes());
app.listen(3000);
Инструменты разработки
nodemon (автоперезагрузка)
npm install -D nodemon
# В package.json
"scripts": {
"dev": "nodemon src/index.js"
}
# Запуск
npm run dev
PM2 (продакшн менеджер процессов)
# Глобальная установка
npm install -g pm2
# Запуск приложения
pm2 start app.js
pm2 start app.js --name "my-app"
# Управление
pm2 list
pm2 stop my-app
pm2 restart my-app
pm2 delete my-app
# Мониторинг
pm2 monit
pm2 logs
# Сохранение процессов
pm2 save
pm2 startup # автозагрузка при старте системы
dotenv (переменные окружения)
npm install dotenv
# .env файл
DB_HOST=192.168.0.103
DB_PORT=5432
PORT=3000
# В коде
require('dotenv').config();
console.log(process.env.DB_HOST);
Типичные проекты
REST API сервер
npm install express cors helmet morgan
# Структура
src/
├── controllers/
├── routes/
├── middleware/
├── models/
└── index.js
Веб-приложение (SPA)
# React
npx create-react-app my-app
# Vue
npm init vue@latest
# Angular
npm install -g @angular/cli
ng new my-app
CLI утилита
npm install commander chalk figlet
# package.json
"bin": {
"my-cli": "./src/cli.js"
}
Конфигурация для сервера
Запуск на 192.168.0.103
// Привязка ко всем интерфейсам
app.listen(3000, '0.0.0.0', () => {
console.log('Server доступен по http://192.168.0.103:3000');
});
Nginx прокси для Node.js
# /etc/nginx/sites-available/node-app
server {
listen 80;
server_name app.local;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Управление версиями Node.js
nvm (Node Version Manager)
# Установка nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Использование
nvm install 18 # Установить Node.js 18
nvm use 18 # Использовать версию 18
nvm alias default 18 # Установить по умолчанию
Прямая установка на сервер
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
Туториалы и документация
Официальные
Практические
Видеокурсы
Скрипты для package.json
{
"scripts": {
"start": "node src/index.js",
"dev": "nodemon src/index.js",
"test": "jest",
"lint": "eslint src/",
"build": "webpack --mode production",
"deploy": "pm2 restart all"
}
}
Полезные пакеты для сервера
# Безопасность
npm install helmet cors bcrypt jsonwebtoken
# Валидация
npm install joi validator
# Логирование
npm install winston morgan
# Базы данных
npm install mongoose sequelize pg mysql2
# Тестирование
npm install -D jest supertest
# Типизация (TypeScript)
npm install -D typescript @types/node ts-node
Решение проблем
"Error: listen EADDRINUSE: address already in use"
# Поиск процесса использующего порт
sudo lsof -i :3000
# Убить процесс
kill -9 PID
# или
pkill node
"npm ERR! Cannot find module"
# Удалить node_modules и переустановить
rm -rf node_modules package-lock.json
npm install
Не хватает памяти
# Увеличить лимит памяти для Node.js
node --max-old-space-size=4096 app.js
Используй Node.js для: веб-приложений, API, инструментов сборки и автоматизации на сервере 192.168.0.103.