mirror of
https://github.com/A6-9V/MQL5-Google-Onedrive.git
synced 2026-04-10 22:30:56 +00:00
227 lines
6.3 KiB
PowerShell
227 lines
6.3 KiB
PowerShell
|
|
# Deploy Web Dashboard to Cloud Platforms
|
||
|
|
# Supports: Fly.io, Render.com, GitHub Pages, and local preview
|
||
|
|
|
||
|
|
param(
|
||
|
|
[Parameter(Mandatory=$false)]
|
||
|
|
[ValidateSet("flyio", "render", "github", "local", "all")]
|
||
|
|
[string]$Platform = "all",
|
||
|
|
|
||
|
|
[switch]$OpenBrowser = $false
|
||
|
|
)
|
||
|
|
|
||
|
|
$ErrorActionPreference = "Stop"
|
||
|
|
|
||
|
|
# Repository paths
|
||
|
|
$repoRoot = Split-Path -Parent $PSScriptRoot
|
||
|
|
$dashboardDir = Join-Path $repoRoot "dashboard"
|
||
|
|
$docsDir = Join-Path $repoRoot "docs"
|
||
|
|
|
||
|
|
Write-Host "=========================================="
|
||
|
|
Write-Host "Web Dashboard Deployment Script"
|
||
|
|
Write-Host "=========================================="
|
||
|
|
Write-Host ""
|
||
|
|
|
||
|
|
# Create dashboard directory if it doesn't exist
|
||
|
|
if (-not (Test-Path $dashboardDir)) {
|
||
|
|
Write-Host "📁 Creating dashboard directory..." -ForegroundColor Cyan
|
||
|
|
New-Item -ItemType Directory -Path $dashboardDir -Force | Out-Null
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host "✅ Dashboard directory: $dashboardDir" -ForegroundColor Green
|
||
|
|
Write-Host ""
|
||
|
|
|
||
|
|
# Deployment functions
|
||
|
|
function Deploy-FlyIO {
|
||
|
|
Write-Host "🚀 Deploying dashboard to Fly.io..." -ForegroundColor Cyan
|
||
|
|
|
||
|
|
$flyToml = Join-Path $dashboardDir "fly.toml"
|
||
|
|
|
||
|
|
# Create fly.toml for dashboard
|
||
|
|
$flyConfig = @"
|
||
|
|
app = "mql5-dashboard"
|
||
|
|
primary_region = "iad"
|
||
|
|
|
||
|
|
[build]
|
||
|
|
command = ""
|
||
|
|
|
||
|
|
[http_service]
|
||
|
|
internal_port = 8080
|
||
|
|
force_https = true
|
||
|
|
auto_stop_machines = true
|
||
|
|
auto_start_machines = true
|
||
|
|
min_machines_running = 0
|
||
|
|
processes = ["app"]
|
||
|
|
|
||
|
|
[[http_service.checks]]
|
||
|
|
grace_period = "10s"
|
||
|
|
interval = "30s"
|
||
|
|
timeout = "5s"
|
||
|
|
method = "GET"
|
||
|
|
path = "/"
|
||
|
|
|
||
|
|
[env]
|
||
|
|
PORT = "8080"
|
||
|
|
"@
|
||
|
|
|
||
|
|
Set-Content -Path $flyToml -Value $flyConfig
|
||
|
|
Write-Host "✅ Created fly.toml" -ForegroundColor Green
|
||
|
|
|
||
|
|
# Check for Dockerfile or create simple one
|
||
|
|
$dockerfile = Join-Path $dashboardDir "Dockerfile"
|
||
|
|
if (-not (Test-Path $dockerfile)) {
|
||
|
|
$dockerfileContent = @"
|
||
|
|
FROM nginx:alpine
|
||
|
|
COPY . /usr/share/nginx/html
|
||
|
|
EXPOSE 80
|
||
|
|
CMD ["nginx", "-g", "daemon off;"]
|
||
|
|
"@
|
||
|
|
Set-Content -Path $dockerfile -Value $dockerfileContent
|
||
|
|
Write-Host "✅ Created Dockerfile for static hosting" -ForegroundColor Green
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "To deploy:" -ForegroundColor Yellow
|
||
|
|
Write-Host " cd dashboard" -ForegroundColor Yellow
|
||
|
|
Write-Host " flyctl launch" -ForegroundColor Yellow
|
||
|
|
Write-Host " flyctl deploy" -ForegroundColor Yellow
|
||
|
|
}
|
||
|
|
|
||
|
|
function Deploy-Render {
|
||
|
|
Write-Host "🚀 Setting up Render.com deployment..." -ForegroundColor Cyan
|
||
|
|
|
||
|
|
$renderYaml = Join-Path $dashboardDir "render.yaml"
|
||
|
|
|
||
|
|
$renderConfig = @"
|
||
|
|
services:
|
||
|
|
- type: web
|
||
|
|
name: mql5-dashboard
|
||
|
|
env: static
|
||
|
|
buildCommand: ""
|
||
|
|
staticPublishPath: .
|
||
|
|
routes:
|
||
|
|
- type: rewrite
|
||
|
|
source: /*
|
||
|
|
destination: /index.html
|
||
|
|
"@
|
||
|
|
|
||
|
|
Set-Content -Path $renderYaml -Value $renderConfig
|
||
|
|
Write-Host "✅ Created render.yaml" -ForegroundColor Green
|
||
|
|
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "To deploy:" -ForegroundColor Yellow
|
||
|
|
Write-Host "1. Push dashboard folder to GitHub" -ForegroundColor Yellow
|
||
|
|
Write-Host "2. Go to https://render.com" -ForegroundColor Yellow
|
||
|
|
Write-Host "3. Create new Static Site" -ForegroundColor Yellow
|
||
|
|
Write-Host "4. Connect GitHub repository" -ForegroundColor Yellow
|
||
|
|
}
|
||
|
|
|
||
|
|
function Deploy-GitHubPages {
|
||
|
|
Write-Host "🚀 Setting up GitHub Pages deployment..." -ForegroundColor Cyan
|
||
|
|
|
||
|
|
$workflowDir = Join-Path $repoRoot ".github\workflows"
|
||
|
|
if (-not (Test-Path $workflowDir)) {
|
||
|
|
New-Item -ItemType Directory -Path $workflowDir -Force | Out-Null
|
||
|
|
}
|
||
|
|
|
||
|
|
$workflowFile = Join-Path $workflowDir "deploy-dashboard.yml"
|
||
|
|
|
||
|
|
$workflowContent = @"
|
||
|
|
name: Deploy Dashboard to GitHub Pages
|
||
|
|
|
||
|
|
on:
|
||
|
|
push:
|
||
|
|
branches:
|
||
|
|
- main
|
||
|
|
paths:
|
||
|
|
- 'dashboard/**'
|
||
|
|
workflow_dispatch:
|
||
|
|
|
||
|
|
permissions:
|
||
|
|
contents: read
|
||
|
|
pages: write
|
||
|
|
id-token: write
|
||
|
|
|
||
|
|
concurrency:
|
||
|
|
group: "pages"
|
||
|
|
cancel-in-progress: false
|
||
|
|
|
||
|
|
jobs:
|
||
|
|
deploy:
|
||
|
|
environment:
|
||
|
|
name: github-pages
|
||
|
|
url: `${{ steps.deployment.outputs.page_url }}
|
||
|
|
runs-on: ubuntu-latest
|
||
|
|
steps:
|
||
|
|
- name: Checkout
|
||
|
|
uses: actions/checkout@v4
|
||
|
|
|
||
|
|
- name: Setup Pages
|
||
|
|
uses: actions/configure-pages@v4
|
||
|
|
|
||
|
|
- name: Upload artifact
|
||
|
|
uses: actions/upload-pages-artifact@v3
|
||
|
|
with:
|
||
|
|
path: './dashboard'
|
||
|
|
|
||
|
|
- name: Deploy to GitHub Pages
|
||
|
|
id: deployment
|
||
|
|
uses: actions/deploy-pages@v4
|
||
|
|
"@
|
||
|
|
|
||
|
|
Set-Content -Path $workflowFile -Value $workflowContent
|
||
|
|
Write-Host "✅ Created GitHub Pages workflow" -ForegroundColor Green
|
||
|
|
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "To deploy:" -ForegroundColor Yellow
|
||
|
|
Write-Host "1. Push to GitHub" -ForegroundColor Yellow
|
||
|
|
Write-Host "2. Go to repository Settings → Pages" -ForegroundColor Yellow
|
||
|
|
Write-Host "3. Select GitHub Actions as source" -ForegroundColor Yellow
|
||
|
|
Write-Host "4. Dashboard will auto-deploy on push" -ForegroundColor Yellow
|
||
|
|
}
|
||
|
|
|
||
|
|
function Start-LocalServer {
|
||
|
|
Write-Host "🌐 Starting local dashboard server..." -ForegroundColor Cyan
|
||
|
|
|
||
|
|
$port = 8000
|
||
|
|
$url = "http://localhost:$port"
|
||
|
|
|
||
|
|
# Check if Python is available
|
||
|
|
$pythonCmd = Get-Command python -ErrorAction SilentlyContinue
|
||
|
|
if ($pythonCmd) {
|
||
|
|
Write-Host "Starting Python HTTP server on port $port..." -ForegroundColor Green
|
||
|
|
Write-Host "Dashboard URL: $url" -ForegroundColor Green
|
||
|
|
Write-Host "Press Ctrl+C to stop" -ForegroundColor Yellow
|
||
|
|
Write-Host ""
|
||
|
|
|
||
|
|
Set-Location $dashboardDir
|
||
|
|
Start-Process python -ArgumentList "-m", "http.server", $port -NoNewWindow
|
||
|
|
|
||
|
|
if ($OpenBrowser) {
|
||
|
|
Start-Sleep -Seconds 2
|
||
|
|
Start-Process $url
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
Write-Host "❌ Python not found. Install Python to run local server." -ForegroundColor Red
|
||
|
|
Write-Host "Alternatively, use a simple HTTP server like 'npx serve' or 'live-server'" -ForegroundColor Yellow
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Execute based on platform
|
||
|
|
switch ($Platform) {
|
||
|
|
"flyio" { Deploy-FlyIO }
|
||
|
|
"render" { Deploy-Render }
|
||
|
|
"github" { Deploy-GitHubPages }
|
||
|
|
"local" { Start-LocalServer }
|
||
|
|
"all" {
|
||
|
|
Deploy-FlyIO
|
||
|
|
Write-Host ""
|
||
|
|
Deploy-Render
|
||
|
|
Write-Host ""
|
||
|
|
Deploy-GitHubPages
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "=========================================="
|
||
|
|
Write-Host "✅ Dashboard deployment setup complete!" -ForegroundColor Green
|
||
|
|
Write-Host "=========================================="
|