Skip to main content

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.