@echo off title Crypto Miner Control Server cd /d "%~dp0" echo. echo ╔══════════════════════════════════════════════════╗ echo ║ Crypto Miner Control Server Builder ║ echo ╚══════════════════════════════════════════════════╝ echo. :: ============================================================ :: STEP 1: Auto-install Go if missing :: ============================================================ echo [1/5] Checking dependencies... where go >nul 2>nul if %ERRORLEVEL% neq 0 ( echo Go not found. Checking for existing installation... :: Check common install paths if exist "C:\Program Files\Go\bin\go.exe" ( echo Found Go at C:\Program Files\Go\bin set "PATH=C:\Program Files\Go\bin;%PATH%" ) else ( echo Downloading and installing Go... :: Detect architecture if "%PROCESSOR_ARCHITECTURE%"=="AMD64" ( set GO_ARCH=amd64 ) else ( set GO_ARCH=386 ) set GO_VERSION=1.22.2 set GO_URL=https://go.dev/dl/go%GO_VERSION%.windows-%GO_ARCH%.msi set GO_MSI=%TEMP%\go-installer.msi echo Downloading Go %GO_VERSION% for Windows %GO_ARCH%... echo (This may take a moment...) :: Download using PowerShell (built into Windows) powershell -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%GO_URL%' -OutFile '%GO_MSI%' }" if %ERRORLEVEL% neq 0 ( echo ERROR: Failed to download Go installer. echo Please manually download from: https://go.dev/dl/ pause exit /b 1 ) echo Installing Go (this may require administrator privileges)... msiexec /i "%GO_MSI%" /quiet /norestart if %ERRORLEVEL% neq 0 ( echo ERROR: Failed to install Go. Try running as Administrator. pause exit /b 1 ) :: Clean up installer del "%GO_MSI%" 2>nul :: Add Go to PATH for this session set "PATH=C:\Program Files\Go\bin;%PATH%" set "PATH=%USERPROFILE%\go\bin;%PATH%" echo Go installed successfully! ) ) else ( echo Go found: call go version ) :: ============================================================ :: STEP 2: Auto-install Node.js if missing (for frontend) :: ============================================================ where node >nul 2>nul if %ERRORLEVEL% neq 0 ( echo Node.js not found. Checking for existing installation... if exist "C:\Program Files\nodejs\node.exe" ( echo Found Node.js at C:\Program Files\nodejs set "PATH=C:\Program Files\nodejs;%PATH%" ) else ( echo Downloading and installing Node.js... set NODE_VERSION=20.12.2 set NODE_URL=https://nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%-x64.msi set NODE_MSI=%TEMP%\node-installer.msi echo Downloading Node.js v%NODE_VERSION%... echo (This may take a moment...) powershell -Command "& { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri '%NODE_URL%' -OutFile '%NODE_MSI%' }" if %ERRORLEVEL% neq 0 ( echo WARNING: Failed to download Node.js. Frontend will not be built. echo You can manually download from: https://nodejs.org/ set SKIP_FRONTEND=1 ) else ( echo Installing Node.js (this may require administrator privileges)... msiexec /i "%NODE_MSI%" /quiet /norestart if %ERRORLEVEL% neq 0 ( echo WARNING: Failed to install Node.js. Frontend will not be built. set SKIP_FRONTEND=1 ) else ( :: Add Node to PATH for this session set "PATH=C:\Program Files\nodejs;%PATH%" del "%NODE_MSI%" 2>nul echo Node.js installed successfully! ) ) ) ) else ( echo Node.js found: call node --version ) :: ============================================================ :: STEP 3: Create data directories :: ============================================================ echo [2/5] Creating data directories... if not exist "data\builds" mkdir "data\builds" if not exist "data\logs" mkdir "data\logs" if not exist "data\blueprints" mkdir "data\blueprints" echo Created: data\builds, data\logs, data\blueprints :: ============================================================ :: STEP 4: Build frontend :: ============================================================ if "%SKIP_FRONTEND%"=="" ( echo [3/5] Building frontend dashboard... echo Running: npm install ^&^& npm run build in server\web\ cd server\web if not exist "node_modules" ( echo Installing npm dependencies... call npm install if %ERRORLEVEL% neq 0 ( echo ERROR: npm install failed cd ..\.. pause exit /b 1 ) echo npm install completed successfully. ) echo Building frontend with Vite... call npm run build if %ERRORLEVEL% neq 0 ( echo WARNING: Frontend build failed, server will run without dashboard. ) else ( echo Frontend built successfully: server\web\dist ) cd ..\.. ) else ( echo [3/5] Skipping frontend build (Node.js not available) ) :: ============================================================ :: STEP 5: Build server :: ============================================================ echo [4/5] Building server... echo Running: go build in server\... cd server :: Download Go module dependencies echo Downloading Go dependencies... go mod download if %ERRORLEVEL% neq 0 ( echo WARNING: go mod download failed, trying build anyway... ) echo Compiling server binary... go build -ldflags="-s -w" -o "..\bin\miner-server.exe" . if %ERRORLEVEL% neq 0 ( echo ERROR: Build failed pause exit /b 1 ) cd .. echo Server built successfully: bin\miner-server.exe :: ============================================================ :: LAUNCH :: ============================================================ echo [5/5] Starting server on port 8989... echo. :: Detect LAN IP for display for /f "usebackq delims=" %%I in (`powershell -NoProfile -Command "(Get-NetIPAddress -AddressFamily IPv4 ^| Where-Object { $_.IPAddress -notlike '127.*' -and $_.PrefixOrigin -ne 'WellKnown' } ^| Select-Object -First 1 -ExpandProperty IPAddress)"`) do set LAN_IP=%%I if not defined LAN_IP set LAN_IP=localhost echo. echo ╔══════════════════════════════════════════════════════════════╗ echo ║ SERVER IS NOW LIVE ║ echo ║ ║ echo ║ Dashboard URL: http://0.0.0.0:8989 ║ echo ║ LAN Access: http://%LAN_IP%:8989 ║ echo ║ Local: http://localhost:8989 ║ echo ║ ║ echo ║ WebSocket (agents): ws://%LAN_IP%:8989/ws/agent ║ echo ║ WebSocket (dash): ws://%LAN_IP%:8989/ws/dashboard ║ echo ║ ║ echo ║ Quick Start: ║ echo ║ 1. Open Dashboard in your browser ║ echo ║ 2. Go to Settings - configure pool ^& wallet ║ echo ║ 3. Go to Builder - build your miner installer .exe ║ echo ║ 4. Run that .exe on each Windows machine ║ echo ║ ║ echo ║ Data Directory: %CD%\data\ ║ echo ║ Config File: %CD%\data\config.json ║ echo ║ Blueprints: %CD%\data\blueprints\ ║ echo ║ ║ echo ║ Press Ctrl+C in this window to stop the server ║ echo ╚══════════════════════════════════════════════════════════════╝ echo. :: Open browser start http://localhost:8989 :: Run server (this blocks until Ctrl+C) echo [Server] Starting miner-server.exe on 0.0.0.0:8989... echo [Server] Log output below (Ctrl+C to stop): echo. .\bin\miner-server.exe -port 8989 -data ".\data" echo. echo [Server] Server stopped. pause