Работали ли вы с Linux в контексте Node.js разработки?

«Работали ли вы с Linux в контексте Node.js разработки?» — вопрос из категории DevOps, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, Linux — основная ОС для продакшн-серверов в моих Node.js проектах. Работаю с Ubuntu/Debian, настраиваю окружение для деплоя и мониторинга.

Типичная настройка Node.js приложения на Ubuntu:

# Установка Node.js через nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install 18
nvm use 18

# Настройка процесса через PM2
npm install -g pm2
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup systemd

# Настройка Nginx как reverse proxy
sudo nano /etc/nginx/sites-available/myapp

Конфигурация Nginx для Node.js приложения:

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }

    # Статика
    location /public/ {
        root /var/www/myapp;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

Автоматизация через bash-скрипты:

#!/bin/bash
# deploy.sh
set -e

echo "Pulling latest changes..."
git pull origin main

echo "Installing dependencies..."
npm ci --only=production

echo "Running migrations..."
npx sequelize db:migrate

echo "Restarting application..."
pm2 reload ecosystem.config.js --env production

echo "Cleaning old deployments..."
npm cache clean --force

echo "Deployment completed successfully!"

Из моего опыта:

  • Настройка firewall (ufw) и fail2ban
  • Мониторинг через htop, nmon, и логирование в journald
  • Ротация логов приложения с logrotate
  • Настройка cron jobs для периодических задач (бэкапы, очистка)
  • Использование Docker и docker-compose для контейнеризации
  • Настройка SSL через Let's Encrypt и certbot