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

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:

  1. ✅ Builds optimized production Docker image
  2. ✅ Uses production settings (settings_production.py)
  3. ✅ Saves image as tar file
  4. ✅ Copies to VM via SCP
  5. ✅ Loads image on VM
  6. ✅ Restarts containers with zero downtime
  7. ✅ Runs migrations automatically
  8. ✅ Collects static files
  9. ✅ 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

🔄 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:

🎉 You're Ready!

Your ProviderTrack application is now production-ready for VM deployment! Run .\deploy-to-vm.ps1 to get started.

results matching ""

    No results matching ""