Panduan lengkap untuk mengkonfigurasi Kasapro sesuai kebutuhan Anda.
File: .env atau environment variables
Database:
DATABASE_URL=postgres://pos_user:pos_pass@postgres:5432/pos_db?sslmode=disable
Redis:
REDIS_URL=redis://redis:6379/0
JWT Configuration:
JWT_ACCESS_SECRET=your-access-secret-min-32-chars
JWT_REFRESH_SECRET=your-refresh-secret-min-32-chars
JWT_ACCESS_TTL=15m
JWT_REFRESH_TTL=168h
JWT_ISSUER=kasapro-backend
JWT_AUDIENCE=kasapro-frontend
CORS:
CORS_ALLOW_ORIGIN=https://localhost
Deployment Model:
DEPLOYMENT_MODEL=self-hosted
⚠️ Security Note: Generate secure secrets untuk production:
openssl rand -base64 32
API URL:
NEXT_PUBLIC_API_URL=https://localhost:9443/api
Telemetry:
NEXT_TELEMETRY_DISABLED=1
| Service | Default Port | Description |
|---|---|---|
| Backend API | 8100 | Go backend API server |
| Frontend Web | 3100 | Next.js frontend server |
| Nginx HTTPS | 9443 | Reverse proxy with SSL |
| PostgreSQL | 5544 | Database server (external) |
| Redis | 6381 | Cache server (external) |
Edit file .env:
BACKEND_PORT=8101 # Jika 8100 sudah digunakan
FRONTEND_PORT=3101 # Jika 3100 sudah digunakan
NGINX_PORT=9444 # Jika 9443 sudah digunakan
POSTGRES_PORT=5545 # Jika 5544 sudah digunakan
REDIS_PORT=6382 # Jika 6381 sudah digunakan
Jangan lupa update API URL jika mengubah NGINX_PORT:
NEXT_PUBLIC_API_URL=https://localhost:9444/api
Restart services setelah mengubah port:
docker compose -f docker-compose.prod.yml restart
Linux/Mac:
./scripts/check-ports.sh
Windows:
.\scripts\check-ports.ps1
Manual Check:
Linux/Mac:
# Check port 9443
netstat -tuln | grep :9443
lsof -i :9443
# Check port 8100
netstat -tuln | grep :8100
lsof -i :8100
Windows (PowerShell):
# Check port 9443
netstat -an | findstr :9443
Get-NetTCPConnection -LocalPort 9443
# Check port 8100
netstat -an | findstr :8100
Get-NetTCPConnection -LocalPort 8100
Problem: Port Already in Use
Jika port sudah digunakan aplikasi lain:
Identifikasi aplikasi yang menggunakan port:
Linux/Mac:
lsof -i :9443
# Output akan menunjukkan PID dan aplikasi
Windows:
Get-NetTCPConnection -LocalPort 9443 | Select-Object OwningProcess
Get-Process -Id <PID> | Select-Object ProcessName
Solusi:
Option 1: Stop aplikasi yang menggunakan port
Option 2: Gunakan port lain (Recommended)
.env dengan port yang berbedaProblem: Cannot Access Application After Changing Port
# Jika NGINX_PORT diubah ke 9444
NEXT_PUBLIC_API_URL=https://localhost:9444/api
docker compose -f docker-compose.prod.yml down
docker compose -f docker-compose.prod.yml --env-file .env up -d
Problem: Port Changed But Still Using Old Port
.env yang benar:
# Verify environment file
cat .env | grep PORT
# Check if variables are loaded
docker compose -f docker-compose.prod.yml config | grep -i port
docker compose -f docker-compose.prod.yml --env-file .env up -d
Di aplikasi:
Informasi ini akan muncul di:
Coming Soon:
PostgreSQL Configuration:
Edit docker-compose.prod.yml untuk postgres service:
postgres:
environment:
- POSTGRES_SHARED_BUFFERS=256MB
- POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
- POSTGRES_MAINTENANCE_WORK_MEM=64MB
Index Optimization:
Redis Configuration:
Redis digunakan untuk:
Default Redis:
Custom Redis Config:
Edit docker-compose.prod.yml untuk redis service:
redis:
command: redis-server --maxmemory 512mb --maxmemory-policy allkeys-lru
Manual Backup:
1. Database Backup:
# Backup database
docker compose -f docker-compose.prod.yml exec postgres pg_dump -U pos_user pos_db > backup_$(date +%Y%m%d_%H%M%S).sql
# Restore database
docker compose -f docker-compose.prod.yml exec -T postgres psql -U pos_user pos_db < backup_20250101_120000.sql
2. Volume Backup:
# Backup volumes
docker run --rm -v kasapro_postgres_data:/data -v $(pwd):/backup alpine tar czf /backup/postgres_data_backup.tar.gz /data
Setup cron job untuk automated backup:
Linux/Mac:
# Edit crontab
crontab -e
# Add daily backup at 2 AM
0 2 * * * cd /path/to/kasapro && docker compose -f docker-compose.prod.yml exec -T postgres pg_dump -U pos_user pos_db > backups/backup_$(date +\%Y\%m\%d).sql
Windows:
1. Restore Database:
# Stop services
docker compose -f docker-compose.prod.yml down
# Restore database
docker compose -f docker-compose.prod.yml up -d postgres
docker compose -f docker-compose.prod.yml exec -T postgres psql -U pos_user pos_db < backup_file.sql
# Start services
docker compose -f docker-compose.prod.yml up -d
2. Restore Volumes:
# Stop services
docker compose -f docker-compose.prod.yml down
# Restore volumes
docker run --rm -v kasapro_postgres_data:/data -v $(pwd):/backup alpine tar xzf /backup/postgres_data_backup.tar.gz -C /
# Start services
docker compose -f docker-compose.prod.yml up -d
Self-Signed Certificate (Default):
./infra/nginx/ssl/Custom Certificate:
./infra/nginx/ssl/:
cert.pem - Certificate filekey.pem - Private key fileTrust Self-Signed Certificate:
https://localhost:9443/ca.crtGenerate Secure Secrets:
# Linux/Mac
openssl rand -base64 32
# Windows PowerShell
[Convert]::ToBase64String((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 }))
Update di .env:
JWT_ACCESS_SECRET=generated-secret-here
JWT_REFRESH_SECRET=generated-secret-here
Change Default Credentials:
.env:
POSTGRES_USER=your_secure_username
POSTGRES_PASSWORD=your_secure_password
DATABASE_URL=postgres://your_secure_username:your_secure_password@postgres:5432/pos_db?sslmode=disable
docker compose -f docker-compose.prod.yml down -v
docker compose -f docker-compose.prod.yml up -d
Feature flags akan tersedia di future versions untuk enable/disable fitur tertentu.
View Logs:
# All services
docker compose -f docker-compose.prod.yml logs -f
# Specific service
docker compose -f docker-compose.prod.yml logs -f backend
docker compose -f docker-compose.prod.yml logs -f frontend
docker compose -f docker-compose.prod.yml logs -f postgres
Backend:
LOG_LEVEL environment variable (DEBUG, INFO, WARN, ERROR)Frontend:
Required Ports:
Internal Ports (tidak perlu expose):
Jika menggunakan reverse proxy eksternal (Nginx, Apache):
https://localhost:9443CORS_ALLOW_ORIGIN di backend environmentMonitoring features akan tersedia di future versions:
Edit nginx config:
./infra/nginx/nginx.confEdit PostgreSQL config:
postgresql.conf (via volume mount)Next Steps: