Backup: 2025-06-07 19:48 - Script test
[Restore from backup: vip-coordinator-backup-2025-06-07-19-48-script-test]
This commit is contained in:
374
setup.ps1
Normal file
374
setup.ps1
Normal file
@@ -0,0 +1,374 @@
|
||||
# VIP Coordinator - Interactive Setup Script (Windows PowerShell)
|
||||
# This script collects configuration details and sets up everything for deployment
|
||||
|
||||
param(
|
||||
[switch]$Help
|
||||
)
|
||||
|
||||
if ($Help) {
|
||||
Write-Host "VIP Coordinator Setup Script" -ForegroundColor Green
|
||||
Write-Host "Usage: .\setup.ps1" -ForegroundColor Yellow
|
||||
Write-Host "This script will interactively set up VIP Coordinator for deployment."
|
||||
exit
|
||||
}
|
||||
|
||||
Clear-Host
|
||||
Write-Host "🚀 VIP Coordinator - Interactive Setup" -ForegroundColor Green
|
||||
Write-Host "======================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "This script will help you set up VIP Coordinator by:" -ForegroundColor Cyan
|
||||
Write-Host " ✅ Collecting your configuration details" -ForegroundColor Green
|
||||
Write-Host " ✅ Generating .env file" -ForegroundColor Green
|
||||
Write-Host " ✅ Creating docker-compose.yml" -ForegroundColor Green
|
||||
Write-Host " ✅ Setting up deployment files" -ForegroundColor Green
|
||||
Write-Host " ✅ Providing Google OAuth setup instructions" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Function to prompt for input with default value
|
||||
function Get-UserInput {
|
||||
param(
|
||||
[string]$Prompt,
|
||||
[string]$Default = "",
|
||||
[bool]$Required = $false
|
||||
)
|
||||
|
||||
do {
|
||||
if ($Default) {
|
||||
$input = Read-Host "$Prompt [$Default]"
|
||||
if ([string]::IsNullOrEmpty($input)) {
|
||||
$input = $Default
|
||||
}
|
||||
} else {
|
||||
$input = Read-Host $Prompt
|
||||
}
|
||||
|
||||
if ($Required -and [string]::IsNullOrEmpty($input)) {
|
||||
Write-Host "This field is required. Please enter a value." -ForegroundColor Red
|
||||
}
|
||||
} while ($Required -and [string]::IsNullOrEmpty($input))
|
||||
|
||||
return $input
|
||||
}
|
||||
|
||||
# Function to generate random password
|
||||
function New-RandomPassword {
|
||||
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
||||
$password = ""
|
||||
for ($i = 0; $i -lt 25; $i++) {
|
||||
$password += $chars[(Get-Random -Maximum $chars.Length)]
|
||||
}
|
||||
return $password
|
||||
}
|
||||
|
||||
Write-Host "📋 Configuration Setup" -ForegroundColor Yellow
|
||||
Write-Host "=====================" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
# Deployment type
|
||||
Write-Host "1. Deployment Type" -ForegroundColor Cyan
|
||||
Write-Host "------------------" -ForegroundColor Cyan
|
||||
Write-Host "Choose your deployment type:"
|
||||
Write-Host " 1) Local development (localhost)"
|
||||
Write-Host " 2) Production with custom domain"
|
||||
Write-Host ""
|
||||
$deploymentType = Get-UserInput "Select option [1-2]" "1" $true
|
||||
|
||||
if ($deploymentType -eq "2") {
|
||||
Write-Host ""
|
||||
Write-Host "2. Domain Configuration" -ForegroundColor Cyan
|
||||
Write-Host "----------------------" -ForegroundColor Cyan
|
||||
$domain = Get-UserInput "Enter your main domain (e.g., mycompany.com)" "" $true
|
||||
$apiDomain = Get-UserInput "Enter your API subdomain (e.g., api.mycompany.com)" "api.$domain"
|
||||
|
||||
$frontendUrl = "https://$domain"
|
||||
$viteApiUrl = "https://$apiDomain"
|
||||
$googleRedirectUri = "https://$apiDomain/auth/google/callback"
|
||||
} else {
|
||||
$domain = "localhost"
|
||||
$apiDomain = "localhost:3000"
|
||||
$frontendUrl = "http://localhost"
|
||||
$viteApiUrl = "http://localhost:3000"
|
||||
$googleRedirectUri = "http://localhost:3000/auth/google/callback"
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "3. Security Configuration" -ForegroundColor Cyan
|
||||
Write-Host "-------------------------" -ForegroundColor Cyan
|
||||
$dbPassword = New-RandomPassword
|
||||
$adminPassword = New-RandomPassword
|
||||
|
||||
Write-Host "Generated secure passwords:" -ForegroundColor Green
|
||||
Write-Host " Database Password: $dbPassword" -ForegroundColor Yellow
|
||||
Write-Host " Admin Password: $adminPassword" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
$useGenerated = Get-UserInput "Use these generated passwords? [Y/n]" "Y"
|
||||
if ($useGenerated -match "^[Nn]$") {
|
||||
$dbPassword = Get-UserInput "Enter database password" "" $true
|
||||
$adminPassword = Get-UserInput "Enter admin password" "" $true
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "4. Google OAuth Setup" -ForegroundColor Cyan
|
||||
Write-Host "--------------------" -ForegroundColor Cyan
|
||||
Write-Host "To set up Google OAuth:" -ForegroundColor Yellow
|
||||
Write-Host " 1. Go to https://console.cloud.google.com/"
|
||||
Write-Host " 2. Create a new project or select existing"
|
||||
Write-Host " 3. Enable Google+ API"
|
||||
Write-Host " 4. Go to Credentials → Create Credentials → OAuth 2.0 Client IDs"
|
||||
Write-Host " 5. Set application type to 'Web application'"
|
||||
Write-Host " 6. Add authorized redirect URI: $googleRedirectUri" -ForegroundColor Green
|
||||
Write-Host " 7. Copy the Client ID and Client Secret"
|
||||
Write-Host ""
|
||||
|
||||
$googleClientId = Get-UserInput "Enter Google OAuth Client ID" "" $true
|
||||
$googleClientSecret = Get-UserInput "Enter Google OAuth Client Secret" "" $true
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "5. Optional Configuration" -ForegroundColor Cyan
|
||||
Write-Host "------------------------" -ForegroundColor Cyan
|
||||
$aviationStackApiKey = Get-UserInput "Enter AviationStack API Key (optional, for flight data)" "optional"
|
||||
if ($aviationStackApiKey -eq "optional") {
|
||||
$aviationStackApiKey = ""
|
||||
}
|
||||
|
||||
# Generate .env file
|
||||
Write-Host ""
|
||||
Write-Host "📝 Generating configuration files..." -ForegroundColor Green
|
||||
|
||||
$envContent = @"
|
||||
# VIP Coordinator Environment Configuration
|
||||
# Generated by setup script on $(Get-Date)
|
||||
|
||||
# Database Configuration
|
||||
DB_PASSWORD=$dbPassword
|
||||
|
||||
# Domain Configuration
|
||||
DOMAIN=$domain
|
||||
VITE_API_URL=$viteApiUrl
|
||||
|
||||
# Google OAuth Configuration
|
||||
GOOGLE_CLIENT_ID=$googleClientId
|
||||
GOOGLE_CLIENT_SECRET=$googleClientSecret
|
||||
GOOGLE_REDIRECT_URI=$googleRedirectUri
|
||||
|
||||
# Frontend URL
|
||||
FRONTEND_URL=$frontendUrl
|
||||
|
||||
# Admin Configuration
|
||||
ADMIN_PASSWORD=$adminPassword
|
||||
|
||||
# Flight API Configuration
|
||||
AVIATIONSTACK_API_KEY=$aviationStackApiKey
|
||||
|
||||
# Port Configuration
|
||||
PORT=3000
|
||||
"@
|
||||
|
||||
$envContent | Out-File -FilePath ".env" -Encoding UTF8
|
||||
|
||||
# Generate docker-compose.yml
|
||||
$dockerComposeContent = @'
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
|
||||
db:
|
||||
image: postgres:15
|
||||
environment:
|
||||
POSTGRES_DB: vip_coordinator
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
redis:
|
||||
image: redis:7
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
backend:
|
||||
image: t72chevy/vip-coordinator:backend-latest
|
||||
environment:
|
||||
DATABASE_URL: postgresql://postgres:${DB_PASSWORD}@db:5432/vip_coordinator
|
||||
REDIS_URL: redis://redis:6379
|
||||
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
|
||||
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET}
|
||||
GOOGLE_REDIRECT_URI: ${GOOGLE_REDIRECT_URI}
|
||||
FRONTEND_URL: ${FRONTEND_URL}
|
||||
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
|
||||
PORT: 3000
|
||||
ports:
|
||||
- "3000:3000"
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
restart: unless-stopped
|
||||
|
||||
frontend:
|
||||
image: t72chevy/vip-coordinator:frontend-latest
|
||||
ports:
|
||||
- "80:80"
|
||||
depends_on:
|
||||
- backend
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
'@
|
||||
|
||||
$dockerComposeContent | Out-File -FilePath "docker-compose.yml" -Encoding UTF8
|
||||
|
||||
# Generate start script
|
||||
$startScriptContent = @"
|
||||
Write-Host "🚀 Starting VIP Coordinator..." -ForegroundColor Green
|
||||
|
||||
# Pull latest images
|
||||
Write-Host "📥 Pulling latest images..." -ForegroundColor Cyan
|
||||
docker-compose pull
|
||||
|
||||
# Start services
|
||||
Write-Host "🔄 Starting services..." -ForegroundColor Cyan
|
||||
docker-compose up -d
|
||||
|
||||
# Wait for services
|
||||
Write-Host "⏳ Waiting for services to start..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 15
|
||||
|
||||
# Check status
|
||||
Write-Host "📊 Service Status:" -ForegroundColor Cyan
|
||||
docker-compose ps
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "🎉 VIP Coordinator is starting!" -ForegroundColor Green
|
||||
Write-Host "================================" -ForegroundColor Green
|
||||
Write-Host "Frontend: $frontendUrl" -ForegroundColor Yellow
|
||||
Write-Host "Backend API: $viteApiUrl" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host "The first user to log in will become the administrator." -ForegroundColor Cyan
|
||||
"@
|
||||
|
||||
$startScriptContent | Out-File -FilePath "start.ps1" -Encoding UTF8
|
||||
|
||||
# Generate stop script
|
||||
$stopScriptContent = @'
|
||||
Write-Host "🛑 Stopping VIP Coordinator..." -ForegroundColor Yellow
|
||||
docker-compose down
|
||||
Write-Host "✅ VIP Coordinator stopped." -ForegroundColor Green
|
||||
'@
|
||||
|
||||
$stopScriptContent | Out-File -FilePath "stop.ps1" -Encoding UTF8
|
||||
|
||||
# Generate update script
|
||||
$updateScriptContent = @'
|
||||
Write-Host "🔄 Updating VIP Coordinator..." -ForegroundColor Cyan
|
||||
|
||||
# Pull latest images
|
||||
Write-Host "📥 Pulling latest images..." -ForegroundColor Yellow
|
||||
docker-compose pull
|
||||
|
||||
# Restart with new images
|
||||
Write-Host "🔄 Restarting services..." -ForegroundColor Yellow
|
||||
docker-compose up -d
|
||||
|
||||
Write-Host "✅ VIP Coordinator updated!" -ForegroundColor Green
|
||||
'@
|
||||
|
||||
$updateScriptContent | Out-File -FilePath "update.ps1" -Encoding UTF8
|
||||
|
||||
# Generate README
|
||||
$readmeContent = @"
|
||||
# VIP Coordinator Deployment
|
||||
|
||||
This directory contains your configured VIP Coordinator deployment.
|
||||
|
||||
## Quick Start (Windows)
|
||||
|
||||
``````powershell
|
||||
# Start the application
|
||||
.\start.ps1
|
||||
|
||||
# Stop the application
|
||||
.\stop.ps1
|
||||
|
||||
# Update to latest version
|
||||
.\update.ps1
|
||||
``````
|
||||
|
||||
## Quick Start (Linux/Mac)
|
||||
|
||||
``````bash
|
||||
# Start the application
|
||||
docker-compose up -d
|
||||
|
||||
# Stop the application
|
||||
docker-compose down
|
||||
|
||||
# Update to latest version
|
||||
docker-compose pull && docker-compose up -d
|
||||
``````
|
||||
|
||||
## Configuration
|
||||
|
||||
Your configuration is stored in `.env`. Key details:
|
||||
|
||||
- **Frontend URL**: $frontendUrl
|
||||
- **Backend API**: $viteApiUrl
|
||||
- **Admin Password**: $adminPassword
|
||||
- **Database Password**: $dbPassword
|
||||
|
||||
## First Time Setup
|
||||
|
||||
1. Run `.\start.ps1` (Windows) or `docker-compose up -d` (Linux/Mac)
|
||||
2. Open $frontendUrl in your browser
|
||||
3. Click "Continue with Google" to set up your admin account
|
||||
4. The first user to log in becomes the administrator
|
||||
|
||||
## Management
|
||||
|
||||
- **View logs**: `docker-compose logs`
|
||||
- **View specific service logs**: `docker-compose logs backend`
|
||||
- **Check status**: `docker-compose ps`
|
||||
- **Access database**: `docker-compose exec db psql -U postgres vip_coordinator`
|
||||
|
||||
## Support
|
||||
|
||||
If you encounter issues, check the logs and ensure all required ports are available.
|
||||
"@
|
||||
|
||||
$readmeContent | Out-File -FilePath "README.md" -Encoding UTF8
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "✅ Setup completed successfully!" -ForegroundColor Green
|
||||
Write-Host "===============================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "Generated files:" -ForegroundColor Cyan
|
||||
Write-Host " 📄 .env - Environment configuration" -ForegroundColor Yellow
|
||||
Write-Host " 📄 docker-compose.yml - Docker services" -ForegroundColor Yellow
|
||||
Write-Host " 📄 start.ps1 - Start the application" -ForegroundColor Yellow
|
||||
Write-Host " 📄 stop.ps1 - Stop the application" -ForegroundColor Yellow
|
||||
Write-Host " 📄 update.ps1 - Update to latest version" -ForegroundColor Yellow
|
||||
Write-Host " 📄 README.md - Documentation" -ForegroundColor Yellow
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "🚀 Next steps:" -ForegroundColor Green
|
||||
Write-Host " 1. Run: .\start.ps1" -ForegroundColor Cyan
|
||||
Write-Host " 2. Open: $frontendUrl" -ForegroundColor Cyan
|
||||
Write-Host " 3. Login with Google to set up your admin account" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "💡 Important notes:" -ForegroundColor Yellow
|
||||
Write-Host " - Admin password: $adminPassword" -ForegroundColor Red
|
||||
Write-Host " - Database password: $dbPassword" -ForegroundColor Red
|
||||
Write-Host " - Keep these passwords secure!" -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "🎉 VIP Coordinator is ready to deploy!" -ForegroundColor Green
|
||||
Reference in New Issue
Block a user