Files
inventory-barcode-system/docs/DEPLOYMENT.md

11 KiB

Deployment Guide

Overview

This guide covers the deployment of the Inventory Barcode System in production environments. The system supports both Docker-based containerized deployment and traditional server deployment.

Prerequisites

System Requirements

Minimum Requirements:

  • CPU: 2 cores
  • RAM: 2GB
  • Storage: 10GB free space
  • OS: Linux, Windows, or macOS

Recommended Requirements:

  • CPU: 4 cores
  • RAM: 4GB
  • Storage: 50GB free space
  • OS: Linux (Ubuntu 20.04+ or CentOS 8+)

Software Dependencies

Required:

  • Docker 20.10+
  • Docker Compose 2.0+
  • Node.js 18+ (for non-Docker deployment)

Optional:

  • Nginx (for reverse proxy)
  • SSL certificates (for HTTPS)

Quick Start

  1. Clone the repository:
git clone <repository-url>
cd inventory-barcode-system
  1. Configure environment:
cp .env.example .env
# Edit .env file with your settings
  1. Deploy with Docker Compose:
# Linux/macOS
./scripts/deploy.sh

# Windows PowerShell
.\scripts\deploy.ps1
  1. Verify deployment:
curl http://localhost:3000/health

Environment Configuration

Edit the .env file with your production settings:

# Server Configuration
NODE_ENV=production
PORT=3000
HOST=0.0.0.0

# Database Configuration
DATABASE_PATH=./data/inventory.db
DATABASE_BACKUP_PATH=./data/backups
DATABASE_BACKUP_INTERVAL=3600000

# File Upload Configuration
UPLOAD_MAX_SIZE=10485760
TEMP_DIR=./data/temp

# Logging Configuration
LOG_LEVEL=info
LOG_DIR=./logs

# Backup Configuration
BACKUP_ENABLED=true
BACKUP_SCHEDULE=0 2 * * *
BACKUP_RETENTION_DAYS=30

Docker Compose Configuration

The docker-compose.yml file includes:

  • Application container with health checks
  • Persistent volumes for data and logs
  • Environment variable configuration
  • Automatic restart policies

Deployment Commands

# Deploy application
./scripts/deploy.sh deploy

# Check status
./scripts/deploy.sh status

# View logs
./scripts/deploy.sh logs

# Restart application
./scripts/deploy.sh restart

# Stop application
./scripts/deploy.sh stop

# Rollback deployment
./scripts/deploy.sh rollback

Manual Deployment

Server Setup

  1. Install Node.js:
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# CentOS/RHEL
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs
  1. Install system dependencies:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y build-essential python3 sqlite3

# CentOS/RHEL
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python3 sqlite
  1. Create application user:
sudo useradd -m -s /bin/bash inventory
sudo usermod -aG sudo inventory

Application Deployment

  1. Deploy application files:
# Copy files to server
scp -r . inventory@server:/opt/inventory-barcode-system/

# Set permissions
sudo chown -R inventory:inventory /opt/inventory-barcode-system
  1. Install dependencies:
cd /opt/inventory-barcode-system
npm ci --only=production
  1. Configure environment:
cp .env.example .env
# Edit .env with production settings
  1. Create systemd service:
sudo tee /etc/systemd/system/inventory-barcode.service > /dev/null <<EOF
[Unit]
Description=Inventory Barcode System
After=network.target

[Service]
Type=simple
User=inventory
WorkingDirectory=/opt/inventory-barcode-system
ExecStart=/usr/bin/node server.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
EOF
  1. Start service:
sudo systemctl daemon-reload
sudo systemctl enable inventory-barcode
sudo systemctl start inventory-barcode

Reverse Proxy Setup

Nginx Configuration

  1. Install Nginx:
# Ubuntu/Debian
sudo apt-get install nginx

# CentOS/RHEL
sudo yum install nginx
  1. Configure virtual host:
sudo tee /etc/nginx/sites-available/inventory-barcode > /dev/null <<EOF
server {
    listen 80;
    server_name your-domain.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;
    }

    # Static file serving
    location /static/ {
        alias /opt/inventory-barcode-system/public/;
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
EOF
  1. Enable site:
sudo ln -s /etc/nginx/sites-available/inventory-barcode /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

SSL Configuration

  1. Install Certbot:
sudo apt-get install certbot python3-certbot-nginx
  1. Obtain SSL certificate:
sudo certbot --nginx -d your-domain.com
  1. Auto-renewal:
sudo crontab -e
# Add: 0 12 * * * /usr/bin/certbot renew --quiet

Database Management

Backup Configuration

The system includes automated backup functionality:

// Backup settings in .env
BACKUP_ENABLED=true
BACKUP_SCHEDULE=0 2 * * *  // Daily at 2 AM
BACKUP_RETENTION_DAYS=30

Manual Backup

# Create backup
node -e "
const BackupManager = require('./utils/backup');
const backup = new BackupManager();
backup.createBackup().then(console.log).catch(console.error);
"

# List backups
ls -la data/backups/

# Restore from backup
node -e "
const BackupManager = require('./utils/backup');
const backup = new BackupManager();
backup.restoreBackup('data/backups/backup-file.db').then(console.log).catch(console.error);
"

Database Migration

For schema updates:

# Backup current database
cp inventory.db inventory.db.backup

# Run migration script (if available)
node scripts/migrate.js

# Verify migration
node -e "
const db = require('./models/database');
console.log('Database schema version:', db.getSchemaVersion());
"

Monitoring and Logging

Log Management

Logs are stored in the logs/ directory:

  • application.log - General application logs
  • error.log - Error logs
  • http.log - HTTP request logs

Log Rotation

Configure log rotation with logrotate:

sudo tee /etc/logrotate.d/inventory-barcode > /dev/null <<EOF
/opt/inventory-barcode-system/logs/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 644 inventory inventory
    postrotate
        systemctl reload inventory-barcode
    endscript
}
EOF

Health Monitoring

The system provides a health check endpoint:

# Check application health
curl http://localhost:3000/health

# Response format:
{
  "status": "OK",
  "timestamp": "2024-01-01T00:00:00.000Z",
  "uptime": 3600,
  "memory": {...},
  "version": "v18.17.0"
}

Performance Monitoring

Monitor key metrics:

  • Response time: Average API response time
  • Memory usage: Node.js heap usage
  • Database size: SQLite file size growth
  • Error rate: Application error frequency

Security Considerations

Network Security

  • Use HTTPS in production
  • Configure firewall rules
  • Limit database access
  • Use reverse proxy for SSL termination

Application Security

  • Keep dependencies updated
  • Use environment variables for secrets
  • Implement rate limiting
  • Enable security headers (Helmet.js)

Data Security

  • Regular database backups
  • Encrypt sensitive data
  • Implement access controls
  • Monitor for unauthorized access

Scaling Considerations

Horizontal Scaling

For high-traffic deployments:

  1. Load Balancer Setup:
upstream inventory_backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
}

server {
    location / {
        proxy_pass http://inventory_backend;
    }
}
  1. Database Considerations:
  • SQLite limitations for concurrent writes
  • Consider PostgreSQL for high concurrency
  • Implement database connection pooling

Vertical Scaling

  • Increase server resources (CPU, RAM)
  • Optimize Node.js memory settings
  • Configure PM2 for process management

Troubleshooting

Common Issues

Application won't start:

# Check logs
docker-compose logs inventory-app
# or
journalctl -u inventory-barcode -f

# Check port availability
netstat -tlnp | grep :3000

# Check file permissions
ls -la /opt/inventory-barcode-system

Database errors:

# Check database file
sqlite3 inventory.db ".schema"

# Check disk space
df -h

# Check file permissions
ls -la inventory.db

Performance issues:

# Check system resources
top
htop
free -h

# Check application metrics
curl http://localhost:3000/health

Log Analysis

# View recent errors
tail -f logs/error.log

# Search for specific errors
grep "ERROR" logs/application.log

# Monitor HTTP requests
tail -f logs/http.log

Maintenance

Regular Tasks

Daily:

  • Check application health
  • Monitor error logs
  • Verify backup completion

Weekly:

  • Review performance metrics
  • Update system packages
  • Clean temporary files

Monthly:

  • Update Node.js dependencies
  • Review security patches
  • Optimize database

Update Procedure

  1. Backup current deployment:
./scripts/deploy.sh rollback  # Creates backup
  1. Deploy new version:
git pull origin main
./scripts/deploy.sh deploy
  1. Verify deployment:
./scripts/deploy.sh status
curl http://localhost:3000/health
  1. Rollback if needed:
./scripts/deploy.sh rollback

Support

For deployment issues:

  1. Check this documentation
  2. Review application logs
  3. Verify system requirements
  4. Contact system administrator
  5. Refer to troubleshooting section

Appendix

Environment Variables Reference

Variable Default Description
NODE_ENV production Application environment
PORT 3000 Server port
HOST 0.0.0.0 Server host
DATABASE_PATH ./inventory.db Database file path
LOG_LEVEL info Logging level
BACKUP_ENABLED true Enable automatic backups

Port Requirements

Port Service Description
3000 Application Main application port
80 HTTP Web server (if using reverse proxy)
443 HTTPS Secure web server

File Permissions

# Application files
chown -R inventory:inventory /opt/inventory-barcode-system
chmod -R 755 /opt/inventory-barcode-system
chmod 644 /opt/inventory-barcode-system/.env

# Database files
chmod 660 /opt/inventory-barcode-system/inventory.db
chmod 755 /opt/inventory-barcode-system/data

# Log files
chmod 644 /opt/inventory-barcode-system/logs/*.log