Table of Contents

Node.js — посібник для початку роботи

Node.js — середовище виконання JavaScript для серверних застосунків. Сервер постачається з встановленими Node.js 22 LTS, npm, менеджером процесів PM2, git і build-essential. Жодних майстрів налаштування й конфігурації — просто підключіться через SSH і розгортайте застосунки.


Крок 1 — перевірте, що Node.js працює

IP-адресу сервера й пароль root показано на сторінці Server Details у клієнтській панелі. Підключіться до сервера через SSH:

ssh root@your.server.ip

Перевірте, що Node.js і PM2 встановлено:

node --version
npm --version
pm2 --version

Якщо ви розмістили сервер за маршрутизатором VyOS у приватній мережі, налаштуйте переадресацію портів (22, 80 і 443), щоб застосунок був доступний з інтернету, або підключайтеся через VPN до сервера за приватною IP.


Крок 2 — розгорніть перший застосунок

Створіть простий HTTP-сервер, щоб перевірити, що все працює:

mkdir ~/myapp && cd ~/myapp

cat > app.js << 'EOF'
const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello from Node.js ' + process.version + '\n');
});
server.listen(3000, () => console.log('Server running on port 3000'));
EOF

node app.js

Відкрийте http://your.server.ip:3000 у браузері. Ви маєте побачити вітальне повідомлення. Натисніть Ctrl+C , щоб зупинити сервер.

Розгортання з Git

cd /root
git clone https://github.com/your-username/your-project.git
cd your-project
npm install

Крок 3 — налаштуйте зворотний проксі та SSL (необовʼязково)

Щоб обслуговувати застосунок на портах 80/443 із доменним імʼям, встановіть Nginx як зворотний проксі:

apt update && apt install -y nginx

cat > /etc/nginx/sites-available/myapp << 'EOF'
server {
    listen 80;
    server_name your-domain.com;

    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_set_header X-Real-IP $remote_addr;
        proxy_cache_bypass $http_upgrade;
    }
}
EOF

ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx

Потім увімкніть безкоштовний HTTPS від Let’s Encrypt:

apt install -y certbot python3-certbot-nginx
certbot --nginx -d your-domain.com

Certbot автоматично налаштує SSL і автоматичне поновлення.


PM2 — менеджер процесів

Запуск node app.js напряму зупиняє застосунок, коли ви закриваєте термінал або якщо він аварійно завершується. PM2 тримає застосунок запущеним у фоні, перезапускає його після збою та автоматично запускає після перезавантаження сервера.

Базові команди:

# Start your application
pm2 start app.js --name myapp

# View running applications
pm2 list

# View logs
pm2 logs myapp

# Restart / stop / remove
pm2 restart myapp
pm2 stop myapp
pm2 delete myapp

Автозапуск після перезавантаження

PM2 попередньо налаштовано на запуск під час завантаження. Після запуску застосунків збережіть список процесів, щоб вони автоматично перезапускалися після перезавантаження сервера:

pm2 save

Виконуйте pm2 save знову щоразу, коли додаєте чи видаляєте застосунки.

Кластерний режим

Запускайте кілька екземплярів застосунку, щоб використовувати всі доступні ядра CPU:

# Start with one instance per CPU core
pm2 start app.js -i max --name myapp

# Or specify the number of instances
pm2 start app.js -i 2 --name myapp

Моніторинг

Перегляд використання CPU і памʼяті в реальному часі:

pm2 monit

Після встановлення

Fail2Ban — захист від підбору паролів

Сервер постачається з Fail2Ban , попередньо налаштованим для захисту SSH від підбору паролів.

Правило Макс. спроб Тривалість блокування
SSH5 невдалих входів10 хвилин

Корисні команди:

# Check banned IPs
fail2ban-client status sshd

# Unban an IP
fail2ban-client set sshd unbanip 1.2.3.4

Якщо ви випадково заблокували себе, підключіться через VNC-консоль у клієнтській панелі й розблокуйте свою IP.

Керування сервісами

PM2 керує вашими застосунками Node.js. Nginx (якщо встановлено як зворотний проксі) працює через systemd:

# PM2 daemon
pm2 resurrect              # restore saved process list
pm2 status                 # overview

# Nginx reverse proxy
systemctl status nginx
systemctl reload nginx
journalctl -u nginx -n 100

Нативні модулі

build-essential (gcc, g++, make) встановлено заздалегідь, тож npm-пакети з нативними C/C++-доповненнями компілюються без проблем:

npm install bcrypt
npm install sharp
npm install sqlite3

Оновлення

# Update Node.js
apt update && apt install -y nodejs

# Update PM2
npm install -g pm2
pm2 update

# Update OS packages
apt update && apt upgrade -y

Встановлене ПЗ

Компонент Версія
Ubuntu24.04 LTS
Node.js22.x LTS
npm10.x
PM26.x
git2.43
build-essentialgcc 13.3
Fail2Ban1.0.2

Усунення проблем

Проблема Рішення
Застосунок падає й не перезапускається Використовуйте PM2 замість node app.js: pm2 start app.js
Застосунок не працює після перезавантаження Виконуйте pm2 save після запуску застосунків, щоб увімкнути автозапуск
Порт уже використовується Перевірте, що його займає: ss -tlnp | grep :3000
npm install завершується з помилками збірки build-essential встановлено заздалегідь. Перевірте помилку — для деяких пакетів може знадобитися apt install python3
No space left on device (закінчилося місце на диску) Перевірте диск: df -h /. Очистіть кеш npm: npm cache clean --force
Заблоковано Fail2Ban Розблокуйте свою IP через VNC-консоль у клієнтській панелі
Забули пароль root Скиньте його через VNC-консоль у клієнтській панелі