# QR Inventory Management System - Setup Guide for Debian 13 This guide will help you set up and run the QR Inventory Management System on your Debian 13 VM. ## System Requirements - **OS**: Debian 13 (Trixie) - **Node.js**: Version 18 or higher - **Memory**: Minimum 2GB RAM (4GB recommended) - **Storage**: Minimum 1GB free space - **Network**: Port 3000 accessible ## Prerequisites Installation ### 1. Update System Packages ```bash sudo apt update sudo apt upgrade -y ``` ### 2. Install Node.js and npm ```bash # Install Node.js 18 LTS using NodeSource repository curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs # Verify installation node --version npm --version ``` ### 3. Install Git (if not already installed) ```bash sudo apt install git -y ``` ### 4. Install Build Tools (required for some npm packages) ```bash sudo apt install build-essential -y ``` ## Project Setup ### 1. Clone or Copy the Project If you have the project in a git repository: ```bash git clone cd qr-inventory-system ``` If you're copying the files directly: ```bash # Copy your project files to the VM # Navigate to the project directory cd /path/to/your/project ``` ### 2. Install Dependencies ```bash # Install dependencies with legacy peer deps for React 19 compatibility npm install --legacy-peer-deps ``` ### 3. Set Up Environment Variables Create a `.env` file in the project root: ```bash cp .env.example .env 2>/dev/null || touch .env ``` Edit the `.env` file: ```bash nano .env ``` Add the following configuration: ```env # Database Configuration DATABASE_URL="file:./db/custom.db" # Application Configuration NODE_ENV="development" PORT=3000 HOSTNAME="0.0.0.0" # Optional: Add your domain if you have one # NEXTAUTH_URL="http://your-domain.com" ``` ### 4. Set Up Database ```bash # Create database directory if it doesn't exist mkdir -p db # Generate Prisma client npm run db:generate # Push database schema npm run db:push ``` ## Running the Application ### Development Mode For development with hot-reload: ```bash npm run dev ``` The application will be available at: - **Local**: `http://localhost:3000` - **Network**: `http://:3000` ### Production Mode For production deployment: ```bash # Build the application npm run build # Start the production server npm start ``` ## System Service Setup (Optional) To run the application as a system service that starts automatically: ### 1. Create a Systemd Service File ```bash sudo nano /etc/systemd/system/qr-inventory.service ``` Add the following content: ```ini [Unit] Description=QR Inventory Management System After=network.target [Service] Type=simple User=your-username WorkingDirectory=/path/to/your/project ExecStart=/usr/bin/npm start Restart=always RestartSec=10 Environment=NODE_ENV=production Environment=PORT=3000 Environment=HOSTNAME=0.0.0.0 [Install] WantedBy=multi-user.target ``` ### 2. Enable and Start the Service ```bash # Reload systemd sudo systemctl daemon-reload # Enable the service to start on boot sudo systemctl enable qr-inventory # Start the service sudo systemctl start qr-inventory # Check service status sudo systemctl status qr-inventory ``` ### 3. View Logs ```bash # View service logs sudo journalctl -u qr-inventory -f # Or view the application log tail -f server.log ``` ## Firewall Configuration If you have UFW (Uncomplicated Firewall) enabled: ```bash # Allow port 3000 sudo ufw allow 3000 # Enable firewall if not already enabled sudo ufw enable # Check firewall status sudo ufw status ``` ## Nginx Reverse Proxy (Optional) For better security and to serve the application on a domain: ### 1. Install Nginx ```bash sudo apt install nginx -y ``` ### 2. Create Nginx Configuration ```bash sudo nano /etc/nginx/sites-available/qr-inventory ``` Add the following configuration: ```nginx server { listen 80; server_name your-domain.com www.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; } } ``` ### 3. Enable the Site ```bash # Create symbolic link sudo ln -s /etc/nginx/sites-available/qr-inventory /etc/nginx/sites-enabled/ # Test Nginx configuration sudo nginx -t # Restart Nginx sudo systemctl restart nginx ``` ## SSL Certificate (Optional) For HTTPS with Let's Encrypt: ### 1. Install Certbot ```bash sudo apt install certbot python3-certbot-nginx -y ``` ### 2. Obtain SSL Certificate ```bash sudo certbot --nginx -d your-domain.com -d www.your-domain.com ``` ### 3. Auto-renewal Setup ```bash # Test auto-renewal sudo certbot renew --dry-run # Auto-renewal is already set up by certbot ``` ## Application Features Once running, the application provides: - **Inventory Management**: Add, edit, delete inventory items - **QR Code Generation**: Generate QR codes for inventory items - **QR Code Scanning**: Scan QR codes to update inventory - **Excel/CSV Import**: Import inventory data from spreadsheets - **Label Printing**: Print labels for inventory items - **Real-time Updates**: Live inventory updates via WebSocket - **Responsive Design**: Works on desktop and mobile devices ## Accessing the Application 1. **Local Access**: `http://localhost:3000` 2. **Network Access**: `http://:3000` 3. **Domain Access**: `http://your-domain.com` (if configured) ## Troubleshooting ### Common Issues #### 1. Port 3000 is already in use ```bash # Find process using port 3000 sudo lsof -i :3000 # Kill the process sudo kill -9 ``` #### 2. Permission denied errors ```bash # Fix file permissions sudo chown -R your-username:your-username /path/to/your/project chmod -R 755 /path/to/your/project ``` #### 3. Database connection issues ```bash # Check if database file exists ls -la db/custom.db # Recreate database rm -f db/custom.db npm run db:push ``` #### 4. Build errors ```bash # Clean build rm -rf .next npm run build ``` ### Log Files - **Development logs**: `dev.log` - **Production logs**: `server.log` - **System service logs**: `sudo journalctl -u qr-inventory` ### Health Check The application provides a health check endpoint: ```bash curl http://localhost:3000/api/health ``` ## Maintenance ### Database Backup ```bash # Backup database cp db/custom.db db/custom.db.backup.$(date +%Y%m%d) # Restore database cp db/custom.db.backup db/custom.db ``` ### Application Updates ```bash # Pull latest changes (if using git) git pull origin main # Install new dependencies npm install # Rebuild for production npm run build # Restart service sudo systemctl restart qr-inventory ``` ### Log Rotation To prevent log files from growing too large: ```bash # Create logrotate configuration sudo nano /etc/logrotate.d/qr-inventory ``` Add the following content: ``` /path/to/your/project/server.log { daily missingok rotate 7 compress delaycompress notifempty create 644 your-username your-username } ``` ## Security Considerations 1. **Firewall**: Only expose necessary ports (3000 or 80/443 with Nginx) 2. **Updates**: Keep system and packages updated 3. **Backups**: Regular database backups 4. **SSL**: Use HTTPS in production 5. **Authentication**: Implement user authentication (NextAuth.js is included) ## Support If you encounter any issues: 1. Check the logs for error messages 2. Verify all prerequisites are installed 3. Ensure the database is properly configured 4. Check network connectivity and firewall settings --- This setup guide should help you successfully deploy and run the QR Inventory Management System on your Debian 13 VM.