Установка Node.js
Установка последней версии Node.js различными способами с настройкой для разработки.
Официальная установка через NodeSource
Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version
CentOS/RHEL/Rocky Linux
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo dnf install -y nodejs
node --version
npm --version
Установка через Node Version Manager (NVM)
Установка NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc
nvm --version
Установка и использование Node.js
nvm list-remote
nvm install node
nvm install --lts
nvm install 18.19.0
nvm use node
nvm use --lts
nvm alias default node
nvm ls
Установка конкретной версии
nvm install 20.10.0
nvm use 20.10.0
nvm alias default 20.10.0
Установка через FNM (Fast Node Manager)
Установка FNM
curl -fsSL https://fnm.vercel.app/install | bash
source ~/.bashrc
fnm --version
Использование FNM
fnm list-remote
fnm install --lts
fnm install 20.10.0
fnm use lts-latest
fnm default lts-latest
fnm ls
Установка из исходного кода
Зависимости для сборки
sudo apt-get install build-essential libssl-dev
sudo dnf groupinstall "Development Tools"
sudo dnf install openssl-devel
Загрузка и компиляция
wget https://nodejs.org/dist/v20.10.0/node-v20.10.0.tar.gz
tar -xzf node-v20.10.0.tar.gz
cd node-v20.10.0
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install
node --version
Настройка npm
Глобальная конфигурация npm
npm config set prefix ~/.npm-global
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
npm config list
npm config set registry https://registry.npmjs.org/
npm config set save-exact true
npm config set init-author-name "Your Name"
npm config set init-author-email "you@example.com"
npm config set init-license "MIT"
Настройка .npmrc
nano ~/.npmrc
Содержимое:
prefix=${HOME}/.npm-global
save-exact=true
fund=false
audit=false
init-author-name=Your Name
init-author-email=you@example.com
init-license=MIT
Альтернативные пакетные менеджеры
Установка Yarn
npm install -g yarn
yarn --version
yarn config set prefix ~/.yarn
echo 'export PATH="$HOME/.yarn/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Установка pnpm
npm install -g pnpm
pnpm --version
pnpm setup
source ~/.bashrc
Установка глобальных пакетов
Полезные глобальные пакеты
npm install -g \
typescript \
ts-node \
nodemon \
pm2 \
http-server \
live-server \
json-server \
concurrently \
cross-env \
dotenv-cli \
eslint \
prettier
С использованием Yarn
yarn global add \
typescript \
ts-node \
nodemon \
pm2
С использованием pnpm
pnpm add -g \
typescript \
ts-node \
nodemon \
pm2
Настройка PM2 для продакшена
Установка и базовая настройка
npm install -g pm2
pm2 startup
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u $USER --hp $HOME
Конфигурация ecosystem
pm2 init
nano ecosystem.config.js
Содержимое:
module.exports = {
apps: [
{
name: 'my-app',
script: './app.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'development',
PORT: 3000
},
env_production: {
NODE_ENV: 'production',
PORT: 3000
},
log_file: './logs/combined.log',
out_file: './logs/out.log',
error_file: './logs/error.log',
log_date_format: 'YYYY-MM-DD HH:mm Z',
merge_logs: true,
max_memory_restart: '1G'
}
]
};
Запуск приложений
pm2 start ecosystem.config.js
pm2 start ecosystem.config.js --env production
pm2 list
pm2 monit
pm2 save
Настройка для разработки
Базовый package.json
{
"name": "my-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest",
"build": "npm run clean && npm run compile",
"clean": "rimraf dist",
"compile": "tsc",
"lint": "eslint src/**/*.ts",
"lint:fix": "eslint src/**/*.ts --fix",
"format": "prettier --write src/**/*.ts"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"@types/node": "^20.10.0",
"nodemon": "^3.0.2",
"typescript": "^5.3.3",
"ts-node": "^10.9.1",
"eslint": "^8.55.0",
"prettier": "^3.1.0",
"jest": "^29.7.0",
"rimraf": "^5.0.5"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.3.1"
}
}
TypeScript конфигурация
npx tsc --init
nano tsconfig.json
Содержимое:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"lib": ["ES2020"],
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"removeComments": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist", "**/*.test.ts"]
}
Оптимизация производительности
Настройка Node.js для продакшена
export NODE_ENV=production
export NODE_OPTIONS="--max-old-space-size=4096"
node --max-old-space-size=4096 app.js
Системный файл для PM2
sudo nano /etc/systemd/system/node-app.service
Содержимое:
[Unit]
Description=Node.js Application
After=network.target
[Service]
Type=forking
User=nodeuser
WorkingDirectory=/opt/myapp
Environment=NODE_ENV=production
Environment=PORT=3000
ExecStart=/usr/local/bin/pm2 start ecosystem.config.js --no-daemon
ExecReload=/usr/local/bin/pm2 reload ecosystem.config.js
ExecStop=/usr/local/bin/pm2 kill
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl enable node-app
sudo systemctl start node-app
sudo systemctl status node-app
Мониторинг и отладка
Установка инструментов мониторинга
npm install -g clinic
npm install -g autocannon
clinic doctor -- node app.js
autocannon http://localhost:3000
Профилирование памяти
node --inspect app.js
node --inspect-brk app.js
npm install -g @mapbox/node-pre-gyp
Обновление Node.js
Через NVM
nvm install node --reinstall-packages-from=node
nvm install --lts --reinstall-packages-from=node
Через системный пакетный менеджер
sudo apt update && sudo apt upgrade nodejs
sudo dnf update nodejs
Версии
Используйте LTS версии Node.js для продакшена и последние версии для разработки новых функций.
Безопасность
Регулярно обновляйте Node.js и зависимости, используйте npm audit для проверки уязвимостей.