Подробное руководство по созданию и настройке .deb пакета для Node.js сервера
Введение
Создание .deb пакета для Node.js приложения позволяет удобно распространять и устанавливать ваше приложение в Debian-based системах (Ubuntu, Debian и др.). Это обеспечивает:
- Простую установку и удаление
- Управление зависимостями
- Автоматическую конфигурацию системы
- Интеграцию с системой инициализации
Предварительные требования
Установка необходимых инструментов
sudo apt update sudo apt install build-essential devscripts debhelper dh-make
Подготовка Node.js приложения
Убедитесь, что ваше приложение имеет:
- package.json с корректными метаданными
- Прописанные зависимости в dependencies
- Указанную точку входа (main или bin)
Пошаговое создание .deb пакета
Шаг 1: Создание структуры проекта
mkdir my-nodejs-app cd my-nodejs-app mkdir -p debian/source mkdir -p usr/lib/my-nodejs-app
Шаг 2: Копирование файлов приложения
# Скопируйте все файлы вашего Node.js приложения cp -r /path/to/your/app/* usr/lib/my-nodejs-app/
Шаг 3: Создание файлов конфигурации Debian
debian/control
Source: my-nodejs-app Section: web Priority: optional Maintainer: Your Name <your.email@example.com> Build-Depends: debhelper (>= 9), nodejs, npm Standards-Version: 3.9.8 Homepage: https://example.com Package: my-nodejs-app Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, nodejs, npm Description: My Node.js Application A detailed description of your Node.js application.
debian/rules
#!/usr/bin/make -f %: dh $@ override_dh_auto_install: # Копируем файлы приложения mkdir -p debian/my-nodejs-app/usr/lib/my-nodejs-app cp -r usr/lib/my-nodejs-app/* debian/my-nodejs-app/usr/lib/my-nodejs-app/ # Создаем символические ссылки или скрипты запуска mkdir -p debian/my-nodejs-app/usr/bin echo '#!/bin/bash' > debian/my-nodejs-app/usr/bin/my-nodejs-app echo 'cd /usr/lib/my-nodejs-app && node index.js' >> debian/my-nodejs-app/usr/bin/my-nodejs-app chmod +x debian/my-nodejs-app/usr/bin/my-nodejs-app override_dh_auto_build: # Устанавливаем npm зависимости cd usr/lib/my-nodejs-app && npm install --production
debian/changelog
my-nodejs-app (1.0.0-1) unstable; urgency=medium * Initial release. -- Your Name <your.email@example.com> Mon, 01 Jan 2023 12:00:00 +0000
debian/install
usr/lib/my-nodejs-app /usr/lib usr/bin/my-nodejs-app /usr/bin
debian/postinst (скрипт post-installation)
#!/bin/bash # Активация сервиса systemctl daemon-reload systemctl enable my-nodejs-app.service echo "My Node.js Application installed successfully!"
debian/prerm (скрипт pre-removal)
#!/bin/bash # Остановка сервиса перед удалением systemctl stop my-nodejs-app.service || true
Шаг 4: Создание systemd сервиса
debian/my-nodejs-app.service
[Unit] Description=My Node.js Application After=network.target [Service] Type=simple User=myappuser Group=myappgroup WorkingDirectory=/usr/lib/my-nodejs-app ExecStart=/usr/bin/node index.js Restart=always Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
Добавьте в debian/rules:
override_dh_systemd_enable: # Копируем service файл mkdir -p debian/my-nodejs-app/lib/systemd/system cp debian/my-nodejs-app.service debian/my-nodejs-app/lib/systemd/system/
Шаг 5: Создание пользователя и группы для приложения
debian/my-nodejs-app.postinst
#!/bin/bash # Создание пользователя и группы if ! getent group myappgroup >/dev/null; then addgroup --system myappgroup fi if ! getent passwd myappuser >/dev/null; then adduser --system --ingroup myappgroup --home /usr/lib/my-nodejs-app myappuser fi # Установка прав на файлы chown -R myappuser:myappgroup /usr/lib/my-nodejs-app chmod 755 /usr/lib/my-nodejs-app
Шаг 6: Сборка пакета
# Установка прав на исполняемые файлы chmod +x debian/rules # Сборка пакета dpkg-buildpackage -us -uc # Или с подписью dpkg-buildpackage -us -uc -rfakeroot
Шаг 7: Установка и тестирование
# Установка sudo dpkg -i ../my-nodejs-app_1.0.0-1_amd64.deb # Проверка установки sudo systemctl status my-nodejs-app sudo journalctl -u my-nodejs-app -f
Расширенная конфигурация
Настройка переменных окружения
Создайте файл конфигурации в /etc/default:
debian/my-nodejs-app.default
# Конфигурация My Node.js Application NODE_ENV=production PORT=3000 DATABASE_URL=your_database_url
Логирование
Настройте ротацию логов:
debian/my-nodejs-app.logrotate
/var/log/my-nodejs-app/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 myappuser myappgroup sharedscripts postrotate systemctl reload my-nodejs-app > /dev/null 2>&1 || true endscript }
Автоматизация с помощью инструментов
Использование electron-builder (для Electron приложений)
{ "build": { "appId": "com.example.myapp", "linux": { "target": "deb", "category": "Development" } } }
Использование node-deb
npm install -g node-deb node-deb -- index.js package.json
Отладка и устранение проблем
Проверка содержимого пакета
dpkg -c my-nodejs-app_1.0.0-1_amd64.deb
Проверка зависимостей
dpkg -I my-nodejs-app_1.0.0-1_amd64.deb
Просмотр логов установки
sudo apt install -f sudo dpkg -i package.deb 2>&1 | tee install.log
Best Practices
- Версионирование: Следуйте семантическому версионированию
- Зависимости: Четко указывайте все зависимости
- Безопасность: Создавайте отдельного пользователя для сервиса
- Логирование: Настройте корректное логирование
- Конфигурация: Используйте файлы в /etc для конфигурации
- Тестирование: Тестируйте пакет на чистой системе
Заключение
Создание .deb пакета для Node.js приложения требует внимания к деталям, но обеспечивает профессиональный способ распространения вашего приложения. Используйте этот гайд как основу и адаптируйте его под конкретные потребности вашего проекта.
Для более сложных сценариев рассмотрите использование специализированных инструментов вроде fpm
(Effing Package Management) или интеграцию с CI/CD системами для автоматической сборки пакетов.