Skip to content

Masamune21-dev/InvenTrack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏭 InvenTrack β€” Sistem Inventaris Aset

Aplikasi web untuk manajemen inventaris perangkat dengan fitur barcode scanner, check-in/check-out, dashboard interaktif, dan role-based access control.


πŸ“Έ Screenshot

Dashboard

Dashboard

Manajemen Aset

Daftar Aset

Tambah Aset Baru

Tambah Aset

Label Barcode

Label Barcode

Scan Aset (Kamera + Hasil)

Scan Aset

Transaksi β€” Check-out (Ambil)

Check-out

Transaksi β€” Check-in (Kembali)

Check-in

Riwayat Transaksi

Riwayat

Kelola User (Admin)

Kelola User

Backup & Restore (Admin)

Backup


πŸ“‹ Fitur

  • Dashboard β€” Statistik stok, grafik pergerakan barang, alert stok menipis
  • Manajemen Aset β€” CRUD, search, filter, generate & cetak barcode
  • Scanner Barcode β€” Dukungan kamera webcam & scanner USB/Bluetooth
  • Check-in / Check-out β€” Catat pengambilan & pengembalian barang
  • Riwayat Transaksi β€” Log lengkap semua pergerakan
  • Manajemen User β€” Kelola akun pengguna (admin only)
  • Export Data β€” Export PDF & Excel untuk daftar aset dan riwayat transaksi dengan filter tanggal
  • Backup & Restore β€” Download database, export JSON, kirim via email, dan restore dari file backup
  • RBAC β€” Admin (akses penuh) vs Staff (scan & transaksi)
  • Security β€” Rate limiting, security headers, JWT authentication

βš™οΈ Prasyarat

  • Node.js versi 18 atau lebih baru
  • Windows 10/11 atau Ubuntu 20.04+

πŸͺŸ Instalasi di Windows

1. Install Node.js

  1. Buka https://nodejs.org β†’ download versi LTS
  2. Jalankan installer, centang semua opsi default
  3. Buka Command Prompt baru, verifikasi:
    node --version

2. Setup Project

cd C:\path\ke\inventory-app
copy .env.example .env

Generate JWT Secret:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Buka file .env, paste hasilnya ke JWT_SECRET=.

3. Install & Jalankan

npm install
npm start

4. Buka Browser

http://localhost:3000

Login: admin / admin123 β†’ segera ubah password di menu Kelola User.


οΏ½ Instalasi di Ubuntu Server (Production + Domain)

Panduan lengkap untuk deploy di VPS/server Ubuntu dengan domain dan HTTPS.

1. Update Sistem & Install Node.js

sudo apt update && sudo apt upgrade -y

# Install Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Verifikasi
node --version
npm --version

2. Install MariaDB (Opsional - untuk skala besar)

Catatan: Aplikasi ini menggunakan SQLite secara default, sudah cukup untuk 1-50 user. MariaDB direkomendasikan jika:

  • Data aset > 10.000 item
  • User aktif > 50 orang bersamaan
  • Butuh backup & replikasi database tingkat enterprise
# Install MariaDB
sudo apt install -y mariadb-server

# Amankan instalasi
sudo mysql_secure_installation
# Jawab: Set root password? Y β†’ masukkan password
# Remove anonymous users? Y
# Disallow root login remotely? Y
# Remove test database? Y
# Reload privilege tables? Y

# Buat database & user untuk InvenTrack
sudo mysql -u root -p
CREATE DATABASE inventrack CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'inventrack'@'localhost' IDENTIFIED BY 'password_anda_disini';
GRANT ALL PRIVILEGES ON inventrack.* TO 'inventrack'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Mengaktifkan MariaDB di InvenTrack

Setelah database MariaDB siap, ikuti 3 langkah ini:

1. Install dependency MySQL:

npm install mysql2

2. Edit server.js, ubah 1 baris:

- const { initDb, saveDb } = require('./backend/db');
+ const { initDb, saveDb } = require('./backend/db-mysql');

3. Tambahkan config MySQL di .env:

DB_HOST=localhost
DB_PORT=3306
DB_USER=inventrack
DB_PASSWORD=password_anda_disini
DB_NAME=inventrack

Restart aplikasi β€” selesai! Tidak perlu ubah file lain.

3. Upload & Setup Project

# Buat direktori aplikasi
sudo mkdir -p /var/www/inventrack
cd /var/www/inventrack

# Upload file project (dari komputer lokal via SCP)
# Jalankan ini di komputer lokal:
# scp -r inventory-app/* user@ip-server:/var/www/inventrack/

# Setup environment
cp .env.example .env
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# Edit .env, paste JWT_SECRET
nano .env

Isi .env:

PORT=3000
JWT_SECRET=paste_hasil_generate_disini
JWT_EXPIRES=24h
# Install dependencies
npm install

# Test jalankan
node server.js
# Kalau muncul banner InvenTrack, tekan Ctrl+C untuk lanjut setup

4. Setup PM2 (Auto-start & Keep Alive)

# Install PM2
sudo npm install -g pm2

# Jalankan aplikasi
pm2 start server.js --name inventrack

# Auto-start saat server reboot
pm2 startup
pm2 save

Perintah PM2:

pm2 status              # Cek status
pm2 logs inventrack     # Lihat log
pm2 restart inventrack  # Restart
pm2 stop inventrack     # Stop

5. Setup Nginx (Reverse Proxy + Domain)

sudo apt install -y nginx

# Buat konfigurasi
sudo nano /etc/nginx/sites-available/inventrack

Paste konfigurasi berikut (ganti inventaris.domain.com dengan domain Anda):

server {
    listen 80;
    server_name inventaris.domain.com;

    # Redirect ke HTTPS (aktifkan setelah setup SSL)
    # return 301 https://$host$request_uri;

    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_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;

        # Upload limit
        client_max_body_size 10M;
    }
}
# Aktifkan site
sudo ln -s /etc/nginx/sites-available/inventrack /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

6. Setup SSL/HTTPS (Gratis via Let's Encrypt)

# Install Certbot
sudo apt install -y certbot python3-certbot-nginx

# Generate sertifikat SSL (pastikan domain sudah pointing ke IP server)
sudo certbot --nginx -d inventaris.domain.com

# Certbot akan otomatis:
# - Generate sertifikat SSL
# - Update konfigurasi Nginx
# - Setup auto-renewal

# Test auto-renewal
sudo certbot renew --dry-run

7. Setup Firewall

sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

8. Setup Domain (di Panel DNS)

Di panel domain Anda (Cloudflare / Niagahoster / dll), tambahkan:

Type Name Value
A inventaris IP address server Anda

Tunggu 5-30 menit propagasi DNS, lalu akses:

https://inventaris.domain.com

🌐 Akses dari Komputer Lain (Jaringan Lokal)

Untuk akses tanpa domain (jaringan lokal):

ipconfig                    # Windows - catat IPv4
ip addr show                # Ubuntu - catat inet

Dari komputer lain, buka: http://IP-SERVER:3000


πŸ’Ύ Data & Backup

Item Lokasi Windows Lokasi Ubuntu
Database data\inventrack.db /var/www/inventrack/data/inventrack.db
Config .env /var/www/inventrack/.env

Backup Otomatis (Ubuntu)

# Buat script backup harian
sudo nano /etc/cron.daily/backup-inventrack
#!/bin/bash
BACKUP_DIR="/home/backup/inventrack"
mkdir -p $BACKUP_DIR
cp /var/www/inventrack/data/inventrack.db $BACKUP_DIR/inventrack_$(date +%Y%m%d).db
# Hapus backup lebih dari 30 hari
find $BACKUP_DIR -name "*.db" -mtime +30 -delete
sudo chmod +x /etc/cron.daily/backup-inventrack

πŸ”’ Keamanan

Fitur Detail
Password Hashed dengan bcrypt
Login token JWT dengan secret dari .env
Rate limiting login Maks 10 percobaan / 15 menit per IP
Rate limiting API Maks 120 request / menit per IP
Security headers X-Frame-Options, X-Content-Type-Options, X-XSS-Protection
Graceful shutdown Ctrl+C / SIGTERM otomatis save database

πŸ”§ Troubleshooting

Masalah Solusi
'node' is not recognized Restart CMD / terminal setelah install Node.js
EADDRINUSE: port 3000 Port sudah dipakai. Ganti PORT=4000 di .env
npm install error Pastikan internet aktif, jalankan sebagai Administrator / sudo
Kamera scanner tidak bisa Kamera hanya via localhost atau https
Halaman blank Buka Developer Tools (F12) β†’ Console
Terlalu banyak percobaan login Tunggu 15 menit, atau restart server
502 Bad Gateway (Nginx) Pastikan PM2 berjalan: pm2 status
SSL tidak bisa Pastikan domain sudah pointing ke IP server dan port 80/443 terbuka

πŸ“ Struktur Project

inventory-app/
β”œβ”€β”€ .env                 # Konfigurasi (PORT, JWT_SECRET)
β”œβ”€β”€ .env.example         # Template konfigurasi
β”œβ”€β”€ .gitignore           # File yang diabaikan Git
β”œβ”€β”€ package.json         # Dependencies
β”œβ”€β”€ server.js            # Entry point server
β”œβ”€β”€ data/
β”‚   └── inventrack.db    # Database SQLite (auto-generated)
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ db.js            # Database SQLite (default)
β”‚   β”œβ”€β”€ db-mysql.js      # Database MariaDB/MySQL (alternatif)
β”‚   └── routes/
β”‚       β”œβ”€β”€ auth.js      # Login & JWT middleware
β”‚       β”œβ”€β”€ assets.js    # CRUD aset
β”‚       β”œβ”€β”€ transactions.js  # Check-in/out
β”‚       └── users.js     # Manajemen user
└── src/
    β”œβ”€β”€ index.css        # Stylesheet
    β”œβ”€β”€ app.js           # Router & layout
    β”œβ”€β”€ main.js          # Entry point frontend
    β”œβ”€β”€ modules/
    β”‚   β”œβ”€β”€ store.js     # API client
    β”‚   β”œβ”€β”€ auth.js      # Auth helper
    β”‚   └── barcode.js   # Barcode helper
    └── pages/
        β”œβ”€β”€ login.js
        β”œβ”€β”€ dashboard.js
        β”œβ”€β”€ assets.js
        β”œβ”€β”€ scanner.js
        β”œβ”€β”€ transactions.js
        β”œβ”€β”€ history.js
        └── users.js

πŸ“ Tech Stack

Komponen Teknologi
Backend Node.js + Express.js
Database SQLite (default) / MariaDB / MySQL
Auth JWT + bcrypt
Frontend HTML5 + Vanilla JS + CSS
Charts Chart.js
Barcode JsBarcode + html5-qrcode
Icons Font Awesome 6
Font Inter (Google Fonts)
Reverse Proxy Nginx (production)
SSL Let's Encrypt / Certbot
Process Manager PM2

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors