ProviderTrack VM Deployment Guide
🎯 Quick Deployment
Your Docker setup is ready! Here's how to deploy to your VM:
1. Build and Deploy (One Command)
# Run the automated deployment script
.\deploy-to-vm.ps1
2. Manual Steps (If needed)
# Build the image
docker build -t track:latest .
# Save the image
docker save -o track-image.tar track:latest
# Copy to VM
scp track-image.tar root@core-stack:/data/core-stack/
# Load and start on VM
ssh root@core-stack "cd /data/core-stack && docker load -i track-image.tar && docker-compose restart track track-celery track-celery-beat"
🔧 Configuration Summary
VM Environment Variables (Already in your docker-compose.yml)
environment:
- DEBUG=False
- DATABASE_URL=postgresql://providertrack_user:secure_password_2025@track-db:5432/providertrack
- REDIS_URL=redis://track-redis:6379/0
- CELERY_BROKER_URL=redis://track-redis:6379/0
- CELERY_RESULT_BACKEND=redis://track-redis:6379/0
- SECRET_KEY=vahpZevB4bsf2UQN6GPpRkeCnBILIHYg
- ALLOWED_HOSTS=localhost,127.0.0.1,track.oklabs.my.id
- CEISA_BASE_URL=https://ceisa.oklabs.my.id
- DJANGO_SETTINGS_MODULE=delivery_tracker_api.settings_production
Port Mapping
- Container Port: 8000
- VM Port: 8077
- Public URL: https://track.oklabs.my.id (via Caddy reverse proxy)
Data Volumes
- Static Files:
/mnt/shared-data/track_static:/app/staticfiles - Media Files:
/mnt/shared-data/track_media:/app/media - Logs:
/mnt/shared-data/track_logs:/app/logs
🚀 Deployment Process
What the deployment script does:
- ✅ Builds optimized production Docker image
- ✅ Uses production settings (
settings_production.py) - ✅ Saves image as tar file
- ✅ Copies to VM via SCP
- ✅ Loads image on VM
- ✅ Restarts containers with zero downtime
- ✅ Runs migrations automatically
- ✅ Collects static files
- ✅ Health checks
Containers Started:
- track: Main Django application
- track-celery: Background task worker
- track-celery-beat: Task scheduler
🔍 Testing Deployment
Run the test script to verify everything is working:
.\test-deployment.ps1
Manual Health Checks:
# Check container status
ssh root@core-stack "docker-compose ps"
# View application logs
ssh root@core-stack "docker logs track -f"
# Test database connection
ssh root@core-stack "docker exec track python manage.py dbshell"
# Access Django shell
ssh root@core-stack "docker exec -it track python manage.py shell"
🌐 Access URLs
- Local VM: http://172.16.1.99:8077
- Public: https://track.oklabs.my.id
- Admin: https://track.oklabs.my.id/admin/
- API Docs: https://track.oklabs.my.id/swagger/
🔄 Common Operations
Update Application:
# Rebuild and deploy
.\deploy-to-vm.ps1
View Logs:
ssh root@core-stack "docker logs track -f"
ssh root@core-stack "docker logs track-celery -f"
Restart Services:
ssh root@core-stack "docker-compose restart track track-celery track-celery-beat"
Database Operations:
# Run migrations
ssh root@core-stack "docker exec track python manage.py migrate"
# Create superuser
ssh root@core-stack "docker exec -it track python manage.py createsuperuser"
# Backup database
ssh root@core-stack "docker exec track-db pg_dump -U providertrack_user providertrack > backup.sql"
🔒 Security Notes
✅ Production Ready Features:
- Non-root user in container
- Production Django settings
- Secure environment variables
- Health checks enabled
- Proper volume mounts
- Network isolation
- SSL via Caddy reverse proxy
✅ Database Security:
- PostgreSQL with authentication
- Network-isolated database
- Persistent data volumes
✅ Application Security:
- DEBUG=False
- Secure secret key
- HTTPS enforcement via Caddy
- CSRF protection
- XSS protection
🚨 Troubleshooting
Container Won't Start:
# Check logs
ssh root@core-stack "docker logs track"
# Check if database is ready
ssh root@core-stack "docker exec track-db pg_isready -U providertrack_user"
Database Issues:
# Reset database (CAUTION: DATA LOSS)
ssh root@core-stack "docker-compose down track-db && docker volume rm core-stack_track-db && docker-compose up -d track-db"
Redis Issues:
# Check Redis
ssh root@core-stack "docker exec track-redis redis-cli ping"
📈 Monitoring
Your setup includes monitoring via:
- Uptime Kuma: http://172.16.1.99:3001
- Netdata: http://172.16.1.99:19999
- Application logs: Persistent in
/mnt/shared-data/track_logs
🎉 You're Ready!
Your ProviderTrack application is now production-ready for VM deployment! Run .\deploy-to-vm.ps1 to get started.