- 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>
254 lines
6.8 KiB
Bash
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 ""
|