← Back to Table of Contents

Deployment Guide

This guide covers various deployment options for the Open Source Site Tracking platform, from development to production environments.

Prerequisites Docker Deployment Manual Deployment Production Deployment Cloud Deployment Monitoring Troubleshooting

Prerequisites

Before deploying the Open Source Site Tracking platform, ensure you have the following:

Docker Deployment

Docker Compose Setup

docker-compose.yml

version: '3.8'
services:
  backend:
    build: ./backend
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://postgres:password@db:5432/site_tracking
      - SECRET_KEY=your-secret-key
      - JWT_SECRET_KEY=your-jwt-secret
    depends_on:
      - db
      - redis
    volumes:
      - ./backend:/app
      - ./logs:/app/logs
    restart: unless-stopped
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    environment:
      - NEXT_PUBLIC_API_URL=http://localhost:8000
    depends_on:
      - backend
    restart: unless-stopped
  db:
    image: postgres:13
    environment:
      - POSTGRES_DB=site_tracking
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
    restart: unless-stopped
  redis:
    image: redis:6-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    restart: unless-stopped
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/ssl:/etc/nginx/ssl
    depends_on:
      - frontend
      - backend
    restart: unless-stopped
volumes:
  postgres_data:
  redis_data:

Deployment Commands

# Clone the repository
git clone https://github.com/AutoBotSolutions/Opensource-Site-Tracking.git
cd opensource-site-tracking
# Build and start services
docker-compose up -d --build
# Check status
docker-compose ps
# View logs
docker-compose logs -f
# Stop services
docker-compose down

Environment Configuration

# Create .env file
cat > .env << EOF
# Database Configuration
DATABASE_URL=postgresql://postgres:password@db:5432/site_tracking
# Security Configuration
SECRET_KEY=your-production-secret-key
JWT_SECRET_KEY=your-production-jwt-secret
# Application Configuration
ENVIRONMENT=production
DEBUG=false
# Email Configuration
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# SSL Configuration
SSL_CERT_PATH=/etc/nginx/ssl/cert.pem
SSL_KEY_PATH=/etc/nginx/ssl/key.pem
EOF

Manual Deployment

Backend Deployment

Setup Steps

  1. Install Dependencies
    # Install Python dependencies
    pip install -r requirements.txt
    # Install system dependencies
    sudo apt-get update
    sudo apt-get install python3-dev python3-pip postgresql-server-dev-all
  2. Configure Database
    # Create database
    sudo -u postgres createdb site_tracking
    # Initialize database
    python init_db.py
  3. Start Backend
    # Using Gunicorn
    gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8000
    # Using systemd service
    sudo systemctl start site-tracking-backend

Frontend Deployment

Setup Steps

  1. Install Dependencies
    # Install Node.js dependencies
    npm install
    # Build for production
    npm run build
  2. Start Frontend
    # Using PM2
    pm2 start npm --name "frontend" -- start
    # Using systemd service
    sudo systemctl start site-tracking-frontend

Production Deployment

Nginx Configuration

nginx.conf

events {
    worker_connections 1024;
}
http {
    upstream backend {
        server backend:8000;
    }
    upstream frontend {
        server frontend:3000;
    }
    # HTTP redirect to HTTPS
    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$server_name$request_uri;
    }
    # HTTPS server
    server {
        listen 443 ssl http2;
        server_name your-domain.com;
        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/key.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
        ssl_prefer_server_ciphers off;
        # Frontend
        location / {
            proxy_pass http://frontend;
            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;
        }
        # Backend API
        location /api/ {
            proxy_pass http://backend;
            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;
        }
        # Static files
        location /static/ {
            alias /app/static/;
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
        # WebSocket support
        location /ws/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    }
}

SSL Certificate Setup

# Install Certbot
sudo apt-get install certbot python3-certbot-nginx
# Get SSL certificate
sudo certbot --nginx -d your-domain.com
# Auto-renewal
sudo crontab -e
# Add: 0 12 * * * /usr/bin/certbot renew --quiet

Systemd Services

Backend Service

[Unit]
Description=Open Source Site Tracking Backend
After=network.target
[Service]
Type=exec
User=www-data
Group=www-data
WorkingDirectory=/opt/site-tracking/backend
Environment=PATH=/opt/site-tracking/venv/bin
ExecStart=/opt/site-tracking/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8000
Restart=always
[Install]
WantedBy=multi-user.target

Frontend Service

[Unit]
Description=Open Source Site Tracking Frontend
After=network.target
[Service]
Type=exec
User=www-data
Group=www-data
WorkingDirectory=/opt/site-tracking/frontend
Environment=PATH=/usr/bin
ExecStart=/usr/bin/npm start
Restart=always
[Install]
WantedBy=multi-user.target

Cloud Deployment

AWS Deployment

Infrastructure Components

  • EC2: Application servers
  • RDS: PostgreSQL database
  • ElastiCache: Redis cache
  • ELB: Load balancer
  • EFS: Shared file storage
  • CloudWatch: Monitoring and logging

Deployment Script

#!/bin/bash
# AWS deployment script
# Create VPC
aws ec2 create-vpc --cidr-block 10.0.0.0/16
# Create subnets
aws ec2 create-subnet --vpc-id vpc-id --cidr-block 10.0.1.0/24 --availability-zone us-west-2a
aws ec2 create-subnet --vpc-id vpc-id --cidr-block 10.0.2.0/24 --availability-zone us-west-2b
# Create security group
aws ec2 create-security-group --group-name site-tracking-sg --description "Site Tracking SG"
# Create RDS instance
aws rds create-db-instance --db-instance-identifier site-tracking-db --db-instance-class db.t3.micro --engine postgres --master-username postgres --master-user-password password --allocated-storage 20
# Create EC2 instances
aws ec2 run-instances --image-id ami-xxxxx --instance-type t3.micro --security-group-ids sg-id --subnet-id subnet-id --user-data file://user-data.sh

DigitalOcean Deployment

Droplet Setup

# Create droplet
doctl compute droplet create site-tracking \
  --region nyc3 \
  --size s-2vcpu-4gb \
  --image ubuntu-20-04 \
  --enable-monitoring \
  --enable-backups \
  --ssh-keys my-ssh-key

1-Click App

  • Pre-configured Docker environment
  • Automatic SSL setup
  • Integrated monitoring
  • Simplified deployment

Google Cloud Platform

GKE Deployment

# Kubernetes deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: site-tracking-backend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: site-tracking-backend
  template:
    metadata:
      labels:
        app: site-tracking-backend
    spec:
      containers:
      - name: backend
        image: gcr.io/project-id/site-tracking-backend:latest
        ports:
        - containerPort: 8000
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: url

Monitoring

Application Monitoring

Infrastructure Monitoring

Alerting

Alert Configuration

# Alert rules
alerts:
  - name: High CPU Usage
    condition: cpu_usage > 80%
    duration: 5m
    action: email
    
  - name: Database Connection Error
    condition: database_error_count > 0
    duration: 1m
    action: slack
    
  - name: Application Error Rate
    condition: error_rate > 5%
    duration: 10m
    action: email, slack

Troubleshooting

Common Issues

Database Connection Issues

# Check database connectivity
psql -h localhost -U postgres -d site_tracking
# Check connection pool
SELECT * FROM pg_stat_activity;
# Check slow queries
SELECT query, mean_time, calls 
FROM pg_stat_statements 
ORDER BY mean_time DESC 
LIMIT 10;

Performance Issues

# Check system resources
top
htop
df -h
free -m
# Check application logs
docker-compose logs backend
journalctl -u site-tracking-backend -f

SSL Certificate Issues

# Check certificate validity
openssl x509 -in cert.pem -text -noout
# Test SSL configuration
openssl s_client -connect your-domain.com:443
# Renew certificate
certbot renew --dry-run

Deployment Checklist

  • ✅ Environment variables configured
  • ✅ Database initialized
  • ✅ SSL certificates installed
  • ✅ Firewall configured
  • ✅ Monitoring enabled
  • ✅ Backup strategy implemented
  • ✅ Log rotation configured
  • ✅ Health checks working
  • ✅ Load balancer configured

Security Considerations

  • Firewall Rules: Only expose necessary ports
  • SSH Security: Use key-based authentication
  • Regular Updates: Keep system and dependencies updated
  • Access Control: Implement least privilege access
  • Backup Encryption: Encrypt backup data