Files
vip-coordinator/deploy/setup-droplet.sh
kyle 5ded039793 feat: add GPS tracking with Traccar integration
- Add GPS module with Traccar client service for device management
- Add driver enrollment flow with QR code generation
- Add real-time location tracking on driver profiles
- Add GPS settings configuration in admin tools
- Add Auth0 OpenID Connect setup script for Traccar
- Add deployment configs for production server
- Update nginx configs for SSL on GPS port 5055
- Add timezone setting support
- Various UI improvements and bug fixes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:13:17 +01:00

254 lines
6.8 KiB
Bash

#!/bin/bash
# VIP Coordinator Droplet Setup Script
# Run this on a fresh Ubuntu 24.04 droplet
set -e
echo "=== VIP Coordinator Droplet Setup ==="
echo ""
# Update system
echo ">>> Updating system packages..."
apt-get update && apt-get upgrade -y
# Install Docker
echo ">>> Installing Docker..."
apt-get install -y ca-certificates curl gnupg
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Enable Docker to start on boot
systemctl enable docker
systemctl start docker
echo ">>> Docker installed: $(docker --version)"
# Install Nginx and Certbot for SSL
echo ">>> Installing Nginx and Certbot..."
apt-get install -y nginx certbot python3-certbot-nginx
# Create app directory
echo ">>> Setting up application directory..."
mkdir -p /opt/vip-coordinator
cd /opt/vip-coordinator
# Create docker-compose.yml
echo ">>> Creating docker-compose.yml..."
cat > docker-compose.yml << 'COMPOSE'
services:
# PostgreSQL Database
postgres:
image: postgres:15-alpine
container_name: vip-postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
POSTGRES_DB: vip_coordinator
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- vip-network
# Redis (for caching/sessions)
redis:
image: redis:7-alpine
container_name: vip-redis
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
restart: unless-stopped
networks:
- vip-network
# Signal CLI REST API for messaging
signal-api:
image: bbernhard/signal-cli-rest-api:latest
container_name: vip-signal
environment:
- MODE=native
volumes:
- signal_data:/home/.local/share/signal-cli
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/v1/about"]
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
networks:
- vip-network
# Backend API
backend:
image: t72chevy/vip-coordinator-backend:latest
container_name: vip-backend
environment:
NODE_ENV: production
PORT: 3000
DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD:-changeme}@postgres:5432/vip_coordinator
REDIS_URL: redis://redis:6379
SIGNAL_API_URL: http://signal-api:8080
AUTH0_DOMAIN: ${AUTH0_DOMAIN}
AUTH0_AUDIENCE: ${AUTH0_AUDIENCE}
AUTH0_ISSUER: ${AUTH0_ISSUER}
FRONTEND_URL: https://${DOMAIN_NAME}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
ports:
- "127.0.0.1:3000:3000"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/v1/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
restart: unless-stopped
networks:
- vip-network
# Frontend
frontend:
image: t72chevy/vip-coordinator-frontend:latest
container_name: vip-frontend
ports:
- "127.0.0.1:5173:80"
depends_on:
- backend
restart: unless-stopped
networks:
- vip-network
volumes:
postgres_data:
name: vip_postgres_data
redis_data:
name: vip_redis_data
signal_data:
name: vip_signal_data
networks:
vip-network:
driver: bridge
COMPOSE
# Create .env file template
echo ">>> Creating .env file..."
cat > .env << 'ENVFILE'
# Database
POSTGRES_PASSWORD=CHANGE_THIS_TO_SECURE_PASSWORD
# Domain
DOMAIN_NAME=vip.madeamess.online
# Auth0
AUTH0_DOMAIN=dev-s855cy3bvjjbkljt.us.auth0.com
AUTH0_AUDIENCE=https://vip-coordinator-api
AUTH0_ISSUER=https://dev-s855cy3bvjjbkljt.us.auth0.com/
# Anthropic API (for AI Copilot)
ANTHROPIC_API_KEY=PASTE_YOUR_API_KEY_HERE
ENVFILE
echo ">>> IMPORTANT: Edit /opt/vip-coordinator/.env with your actual values!"
echo ""
# Configure Nginx as reverse proxy
echo ">>> Configuring Nginx..."
cat > /etc/nginx/sites-available/vip-coordinator << 'NGINX'
server {
listen 80;
server_name vip.madeamess.online;
# Redirect HTTP to HTTPS (will be enabled after certbot)
# location / {
# return 301 https://$host$request_uri;
# }
# API proxy - forward /api requests to backend
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Frontend
location / {
proxy_pass http://127.0.0.1:5173;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
}
}
NGINX
# Enable the site
ln -sf /etc/nginx/sites-available/vip-coordinator /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
# Test and reload nginx
nginx -t && systemctl reload nginx
# Configure firewall
echo ">>> Configuring UFW firewall..."
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw --force enable
echo ""
echo "=== Setup Complete ==="
echo ""
echo "Next steps:"
echo "1. Edit /opt/vip-coordinator/.env with your actual values:"
echo " - Set POSTGRES_PASSWORD to a secure password"
echo " - Set ANTHROPIC_API_KEY to your API key"
echo ""
echo "2. Start the stack:"
echo " cd /opt/vip-coordinator"
echo " docker compose pull"
echo " docker compose up -d"
echo ""
echo "3. Wait for backend to start, then run database migration:"
echo " docker exec vip-backend npx prisma migrate deploy"
echo ""
echo "4. Get SSL certificate:"
echo " certbot --nginx -d vip.madeamess.online"
echo ""
echo "5. Update Auth0 callback URLs to:"
echo " https://vip.madeamess.online/callback"
echo ""
echo "Droplet IP: $(curl -s ifconfig.me)"
echo ""