Files
easystream-main/deploy.ps1
SamiAhmed7777 d22b3e1c0d feat: Add complete Docker deployment with web-based setup wizard
Major additions:
- Web-based setup wizard (setup.php, setup_wizard.php, setup-wizard.js)
- Production Docker configuration (docker-compose.prod.yml, .env.production)
- Database initialization SQL files (deploy/init_settings.sql)
- Template builder system with drag-and-drop UI
- Advanced features (OAuth, CDN, enhanced analytics, monetization)
- Comprehensive documentation (deployment guides, quick start, feature docs)
- Design system with accessibility and responsive layout
- Deployment automation scripts (deploy.ps1, generate-secrets.ps1)

Setup wizard allows customization of:
- Platform name and branding
- Domain configuration
- Membership tiers and pricing
- Admin credentials
- Feature toggles

Database includes 270+ tables for complete video streaming platform with
advanced features for analytics, moderation, template building, and monetization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 01:42:31 -07:00

337 lines
11 KiB
PowerShell

# ============================================================================
# EasyStream - Quick Deploy Script
# ============================================================================
# This script automates the deployment process
#
# Usage:
# .\deploy.ps1 -Mode dev # Development deployment
# .\deploy.ps1 -Mode prod # Production deployment
# .\deploy.ps1 -Mode test # Test configuration only
# ============================================================================
param(
[Parameter(Mandatory=$true)]
[ValidateSet("dev", "prod", "test")]
[string]$Mode,
[switch]$SkipSync = $false,
[switch]$SkipBuild = $false,
[switch]$Verbose = $false
)
$ErrorActionPreference = "Stop"
Write-Host ""
Write-Host "============================================================================" -ForegroundColor Cyan
Write-Host " EasyStream Deployment Script" -ForegroundColor Cyan
Write-Host " Mode: $Mode" -ForegroundColor Yellow
Write-Host "============================================================================" -ForegroundColor Cyan
Write-Host ""
# ============================================================================
# Functions
# ============================================================================
function Test-Prerequisites {
Write-Host "[1/9] Checking prerequisites..." -ForegroundColor Cyan
# Check Docker
try {
$dockerVersion = docker --version
Write-Host " ✓ Docker: $dockerVersion" -ForegroundColor Green
} catch {
Write-Host " ✗ Docker not found! Please install Docker Desktop." -ForegroundColor Red
exit 1
}
# Check Docker Compose
try {
$composeVersion = docker-compose --version
Write-Host " ✓ Docker Compose: $composeVersion" -ForegroundColor Green
} catch {
Write-Host " ✗ Docker Compose not found!" -ForegroundColor Red
exit 1
}
# Check if Docker is running
try {
docker ps | Out-Null
Write-Host " ✓ Docker daemon is running" -ForegroundColor Green
} catch {
Write-Host " ✗ Docker daemon is not running! Please start Docker Desktop." -ForegroundColor Red
exit 1
}
Write-Host ""
}
function Test-Configuration {
Write-Host "[2/9] Validating configuration..." -ForegroundColor Cyan
# Check required files
$requiredFiles = @(
"docker-compose.yml",
".env",
"__install\easystream.sql",
"__install\add_advanced_features.sql",
"deploy\init_settings.sql",
"Dockerfile.php",
"Dockerfile.cron",
"Caddyfile"
)
$missing = @()
foreach ($file in $requiredFiles) {
if (Test-Path $file) {
Write-Host "$file" -ForegroundColor Green
} else {
Write-Host "$file (MISSING)" -ForegroundColor Red
$missing += $file
}
}
if ($missing.Count -gt 0) {
Write-Host ""
Write-Host "ERROR: Missing required files!" -ForegroundColor Red
exit 1
}
Write-Host ""
}
function Sync-ToDockerProgs {
if ($SkipSync) {
Write-Host "[3/9] Skipping folder sync (--SkipSync)" -ForegroundColor Yellow
Write-Host ""
return
}
Write-Host "[3/9] Syncing to docker-progs..." -ForegroundColor Cyan
if (Test-Path "sync-to-docker-progs.ps1") {
try {
& .\sync-to-docker-progs.ps1
Write-Host " ✓ Sync completed" -ForegroundColor Green
} catch {
Write-Host " ✗ Sync failed: $($_.Exception.Message)" -ForegroundColor Red
Write-Host " Continuing anyway..." -ForegroundColor Yellow
}
} else {
Write-Host " ! Sync script not found, skipping" -ForegroundColor Yellow
}
Write-Host ""
}
function Stop-ExistingServices {
Write-Host "[4/9] Stopping existing services..." -ForegroundColor Cyan
try {
if ($Mode -eq "prod") {
docker-compose -f docker-compose.prod.yml down 2>$null
} else {
docker-compose down 2>$null
}
Write-Host " ✓ Services stopped" -ForegroundColor Green
} catch {
Write-Host " ! No services were running" -ForegroundColor Yellow
}
Write-Host ""
}
function Build-Images {
if ($SkipBuild) {
Write-Host "[5/9] Skipping image build (--SkipBuild)" -ForegroundColor Yellow
Write-Host ""
return
}
Write-Host "[5/9] Building Docker images..." -ForegroundColor Cyan
try {
if ($Mode -eq "prod") {
docker-compose -f docker-compose.prod.yml build
} else {
docker-compose build
}
Write-Host " ✓ Images built successfully" -ForegroundColor Green
} catch {
Write-Host " ✗ Build failed: $($_.Exception.Message)" -ForegroundColor Red
exit 1
}
Write-Host ""
}
function Start-Services {
Write-Host "[6/9] Starting services..." -ForegroundColor Cyan
try {
if ($Mode -eq "prod") {
docker-compose -f docker-compose.prod.yml up -d
} else {
docker-compose up -d
}
Write-Host " ✓ Services started" -ForegroundColor Green
} catch {
Write-Host " ✗ Failed to start services: $($_.Exception.Message)" -ForegroundColor Red
exit 1
}
Write-Host ""
}
function Wait-ForServices {
Write-Host "[7/9] Waiting for services to be ready..." -ForegroundColor Cyan
Write-Host " This may take 2-3 minutes for database initialization..." -ForegroundColor Yellow
Start-Sleep -Seconds 5
$maxWait = 180
$waited = 0
$healthy = $false
while ($waited -lt $maxWait) {
try {
if ($Mode -eq "prod") {
$status = docker-compose -f docker-compose.prod.yml ps --format json | ConvertFrom-Json
} else {
$status = docker-compose ps --format json | ConvertFrom-Json
}
# Check if database is healthy
$dbHealthy = $status | Where-Object { $_.Service -eq "db" -and $_.Health -eq "healthy" }
if ($dbHealthy) {
$healthy = $true
break
}
Write-Host " ⏳ Waiting... ($waited/$maxWait seconds)" -ForegroundColor Gray
Start-Sleep -Seconds 10
$waited += 10
} catch {
Start-Sleep -Seconds 10
$waited += 10
}
}
if ($healthy) {
Write-Host " ✓ Services are ready" -ForegroundColor Green
} else {
Write-Host " ! Services may not be fully ready (timeout)" -ForegroundColor Yellow
Write-Host " Check logs: docker-compose logs -f" -ForegroundColor Yellow
}
Write-Host ""
}
function Test-Deployment {
Write-Host "[8/9] Testing deployment..." -ForegroundColor Cyan
# Test database connection
try {
if ($Mode -eq "prod") {
docker-compose -f docker-compose.prod.yml exec -T php php -r "new PDO('mysql:host=db;dbname=easystream', 'easystream', getenv('DB_PASS') ?: 'easystream'); echo 'OK';" | Out-Null
} else {
docker-compose exec -T php php -r "new PDO('mysql:host=db;dbname=easystream', 'easystream', 'easystream'); echo 'OK';" | Out-Null
}
Write-Host " ✓ Database connection successful" -ForegroundColor Green
} catch {
Write-Host " ✗ Database connection failed" -ForegroundColor Red
}
# Test Redis connection
try {
if ($Mode -eq "prod") {
docker-compose -f docker-compose.prod.yml exec -T redis redis-cli ping | Out-Null
} else {
docker-compose exec -T redis redis-cli ping | Out-Null
}
Write-Host " ✓ Redis connection successful" -ForegroundColor Green
} catch {
Write-Host " ✗ Redis connection failed" -ForegroundColor Red
}
Write-Host ""
}
function Show-DeploymentInfo {
Write-Host "[9/9] Deployment complete!" -ForegroundColor Green
Write-Host ""
Write-Host "============================================================================" -ForegroundColor Cyan
Write-Host " EasyStream is now running!" -ForegroundColor Green
Write-Host "============================================================================" -ForegroundColor Cyan
Write-Host ""
if ($Mode -eq "dev") {
Write-Host "Access URLs:" -ForegroundColor Yellow
Write-Host " Frontend: http://localhost:8083" -ForegroundColor White
Write-Host " Admin Panel: http://localhost:8083/admin" -ForegroundColor White
Write-Host " RTMP Stream: rtmp://localhost:1935/live/testkey" -ForegroundColor White
Write-Host ""
Write-Host "Default Admin Credentials:" -ForegroundColor Yellow
Write-Host " Username: admin" -ForegroundColor White
Write-Host " Password: admin123" -ForegroundColor White
Write-Host " ⚠️ CHANGE THIS IMMEDIATELY!" -ForegroundColor Red
} else {
Write-Host "Production deployment complete!" -ForegroundColor Green
Write-Host " Check your MAIN_URL configuration for access" -ForegroundColor White
Write-Host " Ensure you've changed all default passwords!" -ForegroundColor Yellow
}
Write-Host ""
Write-Host "Useful Commands:" -ForegroundColor Yellow
if ($Mode -eq "prod") {
Write-Host " View logs: docker-compose -f docker-compose.prod.yml logs -f" -ForegroundColor White
Write-Host " Check status: docker-compose -f docker-compose.prod.yml ps" -ForegroundColor White
Write-Host " Stop: docker-compose -f docker-compose.prod.yml down" -ForegroundColor White
} else {
Write-Host " View logs: docker-compose logs -f" -ForegroundColor White
Write-Host " Check status: docker-compose ps" -ForegroundColor White
Write-Host " Stop: docker-compose down" -ForegroundColor White
}
Write-Host ""
Write-Host "============================================================================" -ForegroundColor Cyan
Write-Host ""
}
# ============================================================================
# Main Execution
# ============================================================================
if ($Mode -eq "test") {
Test-Prerequisites
Test-Configuration
Write-Host "Configuration test passed! Ready for deployment." -ForegroundColor Green
exit 0
}
# Production warning
if ($Mode -eq "prod") {
Write-Host "⚠️ PRODUCTION DEPLOYMENT" -ForegroundColor Red
Write-Host "Make sure you have:" -ForegroundColor Yellow
Write-Host " 1. Generated secure secrets (.\generate-secrets.ps1)" -ForegroundColor White
Write-Host " 2. Updated .env.production" -ForegroundColor White
Write-Host " 3. Configured SSL certificates" -ForegroundColor White
Write-Host ""
$confirm = Read-Host "Continue? (yes/no)"
if ($confirm -ne "yes") {
Write-Host "Deployment cancelled." -ForegroundColor Yellow
exit 0
}
Write-Host ""
}
# Run deployment steps
Test-Prerequisites
Test-Configuration
Sync-ToDockerProgs
Stop-ExistingServices
Build-Images
Start-Services
Wait-ForServices
Test-Deployment
Show-DeploymentInfo