Установка и настройка node.js окружения в LXC на Proxmox

Настройка LXС в Proxmox с помощью веб интерфейса:

Создание контейнера:

  • В веб-интерфейсе Proxmox выберите ваш узел (node)
  • Нажмите кнопку «Create CT» в правом верхнем углу
  • Откроется мастер создания контейнера

Шаги настройки:

a) General:

  • Node: выбран автоматически
  • CT ID: уникальный номер (например, 100)
  • Hostname: имя контейнера (например, bot-server)
  • Unprivileged container: рекомендуется включить для безопасности
  • Password: надежный пароль для root
  • SSH Public key: можно добавить для безопасного доступа

b) Template:

  • Storage: local (или другое хранилище)
  • Template: выберите нужный образ (например, debian-12-standard)
  • Если нужного образа нет — нажмите Download
  • Можно выбрать версию и разрядность (обычно amd64)

c) Disks:

  • Storage: local-lvm (или другое хранилище)
  • Disk size: для бота достаточно 8GB

d) CPU:

  • Cores: 1 (для бота достаточно)
  • CPU units: 100 (по умолчанию)
  • CPU limit: можно оставить пустым

e) Memory:

  • Memory (MB): 512MB
  • Swap (MB): 512MB
  • Balloon: можно включить для динамического управления памятью

f) Network:

  • Name: eth0
  • Bridge: vmbr0 (или другой мост)
  • IPv4: DHCP (или статический IP)
  • IPv6: DHCP (можно отключить если не используется)

g) DNS:

  • DNS domain: можно оставить пустым
  • DNS servers: 8.8.8.8,8.8.4.4 (или ваши DNS)

h) Confirm:

  • Проверьте все настройки
  • Start after created: включить для автозапуска
  • Нажмите Finish

Минимальная установка:

apt update && apt upgrade -y
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs

Минимальная настройка окружения для Telegram бота:

#!/bin/bash

# Обновление системы и установка необходимых пакетов
apt update && apt upgrade -y
apt install -y curl git nano

# Установка Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs

# Создание пользователя для бота
useradd -m -s /bin/bash botuser
cd /home/botuser

# Настройка проекта
sudo -u botuser bash << EOF
mkdir bot
cd bot
npm init -y
npm install node-telegram-bot-api pm2

# Создание файла с переменными окружения
cat > .env << EOL
BOT_TOKEN=your_token_here
NODE_ENV=production
EOL

# Настройка PM2
npm install pm2 -g
pm2 startup

# Создание файла экосистемы PM2
cat > ecosystem.config.js << EOL
module.exports = {
  apps: [{
    name: 'telegram-bot',
    script: 'bot.js',
    watch: true,
    max_memory_restart: '200M',
    env: {
      NODE_ENV: 'production'
    }
  }]
}
EOL
EOF

# Настройка прав
chown -R botuser:botuser /home/botuser/bot

# Настройка системного сервиса
cat > /etc/systemd/system/bot.service << EOL
[Unit]
Description=Telegram Bot Service
After=network.target

[Service]
Type=simple
User=botuser
WorkingDirectory=/home/botuser/bot
ExecStart=/usr/bin/pm2-runtime start ecosystem.config.js
Restart=always

[Install]
WantedBy=multi-user.target
EOL

# Активация сервиса
systemctl enable bot
systemctl start bot

# Настройка базовой защиты
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw enable

# Настройка логирования
mkdir -p /var/log/bot
chown botuser:botuser /var/log/bot

Преимущества такого подхода:

  • Минимальное потребление ресурсов
  • Только необходимые компоненты
  • Простое обновление и обслуживание
  • Четкое понимание всех компонентов
  • Более безопасная конфигурация

Мониторинг и управление:

# Просмотр статуса бота
pm2 status
pm2 logs

# Перезапуск бота
pm2 restart telegram-bot

# Просмотр потребления ресурсов
pm2 monit

Обновление:

# Обновление Node.js
apt update
apt upgrade nodejs

# Обновление зависимостей бота
cd /home/botuser/bot
npm update

Автозапуск бота:

Для автозапуска бота будем использовать pm2. pm2 — это процесс-менеджер для Node.js, который позволяет запускать приложения и следить за их состоянием, включая автозапуск при перезагрузке.

# Установка pm2
npm install pm2 -g

# Запуск бота
pm2 start /home/botuser/bot/bot.js --name "my-bot"

# Автозапуск pm2 при старте системы
pm2 startup

# Сохраняем
pm2 save

Теперь при перезагрузке системы pm2 автоматически запустит ваш скрипт.