Files
Laravel-Docker-Dev-Template/setup.bat
theRADcozaDEV 2ff7a24736 Add frontend asset build to setup scripts
Added Step 11 to both setup.bat and setup.sh:
- Run npm install to install dependencies
- Run npm run build to compile Vite assets
- Creates public/build/manifest.json

This fixes the 'Vite manifest not found' error that occurred
when trying to login after fresh setup.

The node container is used for npm commands since the app
container doesn't have Node.js installed.
2026-03-11 06:25:03 +02:00

256 lines
7.0 KiB
Batchfile

@echo off
REM Laravel Docker Development Template - Quick Setup (Windows)
REM Everything is pre-installed! This just starts Docker and sets up the database.
REM Usage: setup.bat [mysql|pgsql|sqlite]
setlocal enabledelayedexpansion
set DB=%1
if "%DB%"=="" set DB=mysql
REM Validate database choice
if not "%DB%"=="mysql" if not "%DB%"=="pgsql" if not "%DB%"=="sqlite" (
echo Error: Invalid database '%DB%'
echo Usage: setup.bat [mysql^|pgsql^|sqlite]
echo Example: setup.bat mysql
exit /b 1
)
echo ========================================================
echo Laravel Docker Development Template
echo Quick Setup - Everything Pre-Installed!
echo ========================================================
echo.
echo Setting up with %DB%...
echo.
REM Step 1: Check port availability and auto-assign alternatives
echo Checking port availability...
REM Function to find next available port
REM Usage: call :find_port <start_port> <result_var>
goto :skip_functions
:find_port
set /a port=%~1
:find_port_loop
netstat -ano | findstr ":%port% " >nul 2>&1
if %errorlevel% equ 0 (
set /a port+=1
goto :find_port_loop
)
set %~2=%port%
exit /b 0
:skip_functions
REM Check and assign APP_PORT (Web Server)
netstat -ano | findstr ":8080" >nul 2>&1
if %errorlevel% equ 0 (
call :find_port 8081 APP_PORT
echo [!] Port 8080 in use - using !APP_PORT! for Web Server
) else (
set APP_PORT=8080
echo [OK] Port 8080 ^(Web Server^) - Available
)
REM Check and assign MAIL_DASHBOARD_PORT (Mailpit Dashboard)
netstat -ano | findstr ":8025" >nul 2>&1
if %errorlevel% equ 0 (
call :find_port 8026 MAIL_DASHBOARD_PORT
echo [!] Port 8025 in use - using !MAIL_DASHBOARD_PORT! for Mailpit Dashboard
) else (
set MAIL_DASHBOARD_PORT=8025
echo [OK] Port 8025 ^(Mailpit Dashboard^) - Available
)
REM Check and assign MAIL_PORT (Mailpit SMTP)
netstat -ano | findstr ":1025" >nul 2>&1
if %errorlevel% equ 0 (
call :find_port 1026 MAIL_PORT
echo [!] Port 1025 in use - using !MAIL_PORT! for Mailpit SMTP
) else (
set MAIL_PORT=1025
echo [OK] Port 1025 ^(Mailpit SMTP^) - Available
)
REM Check and assign REDIS_PORT
netstat -ano | findstr ":6379" >nul 2>&1
if %errorlevel% equ 0 (
call :find_port 6380 REDIS_PORT
echo [!] Port 6379 in use - using !REDIS_PORT! for Redis
) else (
set REDIS_PORT=6379
echo [OK] Port 6379 ^(Redis^) - Available
)
REM Check and assign DB_PORT based on database selection
if "%DB%"=="mysql" (
netstat -ano | findstr ":3306" >nul 2>&1
if !errorlevel! equ 0 (
call :find_port 3307 DB_PORT
echo [!] Port 3306 in use - using !DB_PORT! for MySQL
) else (
set DB_PORT=3306
echo [OK] Port 3306 ^(MySQL^) - Available
)
)
if "%DB%"=="pgsql" (
netstat -ano | findstr ":5432" >nul 2>&1
if !errorlevel! equ 0 (
call :find_port 5433 DB_PORT
echo [!] Port 5432 in use - using !DB_PORT! for PostgreSQL
) else (
set DB_PORT=5432
echo [OK] Port 5432 ^(PostgreSQL^) - Available
)
)
echo.
REM Step 2: Configure environment
echo Configuring environment...
if exist "src\.env.%DB%" (
copy /y "src\.env.%DB%" "src\.env" >nul
REM Append port configurations to .env (for reference only, not used by Laravel)
REM Note: DB_PORT is NOT appended - Laravel uses internal Docker port (3306/5432)
REM These are for docker-compose external port mapping only
echo. >> src\.env
echo # Port Configuration ^(auto-assigned by setup^) >> src\.env
echo # APP_PORT=%APP_PORT% >> src\.env
echo # MAIL_DASHBOARD_PORT=%MAIL_DASHBOARD_PORT% >> src\.env
echo # MAIL_PORT=%MAIL_PORT% >> src\.env
echo # REDIS_PORT=%REDIS_PORT% >> src\.env
echo Environment configured for %DB%
) else (
echo ERROR: Template file src\.env.%DB% not found
exit /b 1
)
REM Step 3: Build containers
echo Building Docker containers...
docker-compose build
echo Containers built
echo.
REM Step 4: Start containers
echo Starting Docker containers...
docker-compose --profile %DB% up -d
echo Containers started
echo.
REM Step 5: Wait for app container to be ready
echo Waiting for app container...
timeout /t 3 /nobreak >nul
echo App container ready
echo.
REM Step 6: Wait for database
if "%DB%"=="mysql" (
echo Waiting for MySQL to be ready...
set DB_READY=0
for /L %%i in (1,1,30) do (
docker-compose exec -T app php -r "new PDO('mysql:host=mysql;dbname=laravel', 'laravel', 'secret');" >nul 2>&1
if !errorlevel! equ 0 (
set DB_READY=1
goto :mysql_ready
)
timeout /t 1 /nobreak >nul
)
:mysql_ready
if !DB_READY! equ 1 (
echo MySQL ready
) else (
echo WARNING: MySQL may not be fully ready yet
)
echo.
)
if "%DB%"=="pgsql" (
echo Waiting for PostgreSQL to be ready...
set DB_READY=0
for /L %%i in (1,1,30) do (
docker-compose exec -T app php -r "new PDO('pgsql:host=pgsql;dbname=laravel', 'laravel', 'secret');" >nul 2>&1
if !errorlevel! equ 0 (
set DB_READY=1
goto :pgsql_ready
)
timeout /t 1 /nobreak >nul
)
:pgsql_ready
if !DB_READY! equ 1 (
echo PostgreSQL ready
) else (
echo WARNING: PostgreSQL may not be fully ready yet
)
echo.
)
REM Step 7: Generate app key
echo Generating application key...
docker-compose exec -T app php artisan key:generate --force
echo App key generated
echo.
REM Step 8: Run migrations
echo Running database migrations...
docker-compose exec -T app php artisan migrate --force
echo Migrations completed
echo.
REM Step 9: Seed database
echo Seeding database (roles, permissions, admin user)...
docker-compose exec -T app php artisan db:seed --force
echo Database seeded
echo.
REM Step 10: Create storage link
echo Creating storage symlink...
docker-compose exec -T app php artisan storage:link
echo Storage linked
echo.
REM Step 11: Build frontend assets
echo Building frontend assets...
docker-compose run --rm node npm install >nul 2>&1
docker-compose run --rm node npm run build >nul 2>&1
echo Frontend assets built
echo.
REM Done
echo.
echo ========================================================
echo Setup Complete!
echo ========================================================
echo.
echo Your Laravel application is ready!
echo.
echo Laravel App: http://localhost:%APP_PORT%
echo Admin Panel: http://localhost:%APP_PORT%/admin
echo Mailpit: http://localhost:%MAIL_DASHBOARD_PORT%
echo.
echo Admin Login:
echo Email: admin@example.com
echo Password: password
echo.
echo What's Included:
echo - Laravel 11 with Breeze authentication
echo - Filament admin panel with user management
echo - Pest testing framework
echo - Laravel Pint code style
echo - Queue workers ^& scheduler (optional profiles)
echo.
echo Common Commands:
echo docker-compose exec app php artisan [command]
echo docker-compose exec app composer [command]
echo docker-compose exec app ./vendor/bin/pest
echo docker-compose logs -f app
echo.
echo Stop containers:
echo docker-compose down
echo.
endlocal