This guide covers various deployment options for the Open Source Site Tracking platform, from development to production environments.
Before deploying the Open Source Site Tracking platform, ensure you have the following:
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:
# 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
# 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
# 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
# Create database
sudo -u postgres createdb site_tracking
# Initialize database
python init_db.py
# 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
# Install Node.js dependencies
npm install
# Build for production
npm run build
# Using PM2
pm2 start npm --name "frontend" -- start
# Using systemd service
sudo systemctl start site-tracking-frontend
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;
}
}
}
# 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
[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
[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
#!/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
# 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
# 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
# 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
# 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;
# Check system resources
top
htop
df -h
free -m
# Check application logs
docker-compose logs backend
journalctl -u site-tracking-backend -f
# 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