@echo off setlocal EnableDelayedExpansion set "SCRIPTS=%~dp0" set "SCRIPTS=!SCRIPTS:~0,-1!" for %%F in ("!SCRIPTS!\..") do set "PROJECT_DIR=%%~fF" set "WINSW=!SCRIPTS!\WinSW-x64.exe" net session >nul 2>&1 if %errorlevel% neq 0 ( echo [ERROR] Run as Administrator! pause & exit /b 1 ) echo ============================================= echo MatabPanel - Install Services echo ============================================= echo. echo Scripts : !SCRIPTS! echo Project : !PROJECT_DIR! echo. if not exist "!WINSW!" ( echo [ERROR] WinSW-x64.exe not found in scripts folder. pause & exit /b 1 ) if not exist "!SCRIPTS!\nginx\nginx.exe" ( echo [ERROR] nginx not found in scripts\nginx\ pause & exit /b 1 ) if not exist "!SCRIPTS!\php\php-cgi.exe" ( echo [ERROR] php-cgi.exe not found in scripts\php\ pause & exit /b 1 ) REM --- [1/6] storage:link --- echo [1/6] Creating storage link... cd /d "!PROJECT_DIR!" "!SCRIPTS!\php\php.exe" artisan storage:link >nul 2>&1 echo [OK] Done. echo. REM --- [2/6] Optimize Laravel --- echo [2/6] Optimizing Laravel... "!SCRIPTS!\php\php.exe" artisan optimize --quiet 2>nul "!SCRIPTS!\php\php.exe" artisan filament:optimize --quiet 2>nul echo [OK] Done. echo. REM --- [3/6] Configure OPcache --- echo [3/6] Configuring OPcache... if not exist "C:\tmp\php-opcache" mkdir "C:\tmp\php-opcache" set "SCRIPTS_BAK=!SCRIPTS!" powershell -NoProfile -Command ^ "$s='!SCRIPTS_BAK!'; $action=New-ScheduledTaskAction -Execute 'cmd.exe' -Argument ('/c \"\"' + $s + '\warmup.bat\"\"'); $trigger=New-ScheduledTaskTrigger -AtStartup; $settings=New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Minutes 5) -MultipleInstances IgnoreNew; Unregister-ScheduledTask -TaskName 'MatabWarmup' -Confirm:$false -ErrorAction SilentlyContinue; Register-ScheduledTask -TaskName 'MatabWarmup' -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -User 'SYSTEM' -Force | Out-Null; Write-Host ' Warmup task registered.'" echo [OK] Done. echo. REM --- [4/6] Generate nginx.conf from template --- echo [4/6] Writing nginx.conf... set "PUBLIC_DIR=!PROJECT_DIR:\=/!/public" if not exist "!SCRIPTS!\nginx\conf\nginx.conf.template" ( echo [ERROR] nginx.conf.template not found in scripts\nginx\conf\ pause & exit /b 1 ) powershell -NoProfile -Command ^ "(Get-Content '!SCRIPTS!\nginx\conf\nginx.conf.template') -replace '\{\{PUBLIC_DIR\}\}', '!PUBLIC_DIR!' | Set-Content '!SCRIPTS!\nginx\conf\nginx.conf'" echo [OK] nginx.conf written. echo. REM --- [5/6] Firewall --- echo [5/6] Firewall rules... netsh advfirewall firewall delete rule name="Matab Web 8000" >nul 2>&1 netsh advfirewall firewall delete rule name="Matab FTP 2121" >nul 2>&1 netsh advfirewall firewall add rule name="Matab Web 8000" dir=in action=allow protocol=TCP localport=8000 >nul netsh advfirewall firewall add rule name="Matab FTP 2121" dir=in action=allow protocol=TCP localport=2121 >nul echo [OK] Done. echo. REM --- [6/6] Windows Services --- echo [6/6] Installing Windows services... echo Stopping old services... "!WINSW!" stop "!SCRIPTS!\matab-autostart.xml" >nul 2>&1 "!WINSW!" stop "!SCRIPTS!\matab-phpcgi.xml" >nul 2>&1 "!WINSW!" stop "!SCRIPTS!\matab-ftp.xml" >nul 2>&1 "!WINSW!" uninstall "!SCRIPTS!\matab-autostart.xml" >nul 2>&1 "!WINSW!" uninstall "!SCRIPTS!\matab-phpcgi.xml" >nul 2>&1 "!WINSW!" uninstall "!SCRIPTS!\matab-ftp.xml" >nul 2>&1 taskkill /f /im nginx.exe >nul 2>&1 taskkill /f /im php-cgi.exe >nul 2>&1 taskkill /f /im php.exe >nul 2>&1 echo Installing FTP service... "!WINSW!" install "!SCRIPTS!\matab-ftp.xml" "!WINSW!" start "!SCRIPTS!\matab-ftp.xml" echo. echo Installing PHP FastCGI service... "!WINSW!" install "!SCRIPTS!\matab-phpcgi.xml" "!WINSW!" start "!SCRIPTS!\matab-phpcgi.xml" echo. echo Installing nginx service... "!WINSW!" install "!SCRIPTS!\matab-autostart.xml" "!WINSW!" start "!SCRIPTS!\matab-autostart.xml" echo. echo Waiting for web server on port 8000... powershell -NoProfile -Command ^ "$ok=0; for($i=0;$i -lt 60;$i++){try{$t=New-Object Net.Sockets.TcpClient;$t.Connect('127.0.0.1',8000);$t.Close();$ok=1;break}catch{Start-Sleep -Milliseconds 500}}; if($ok){Write-Host '[OK] Server is ready.'}else{Write-Host '[WARN] Server did not respond in 30s.'}" echo. echo ============================================= echo Services installed (auto-start with Windows): echo MatabFTP - FTP server (port 2121) echo MatabPHPCgi - PHP FastCGI (port 9001) echo MatabAutostart - nginx (port 8000) echo. echo Web: http://localhost:8000 echo ============================================= echo. pause