Installation
Initial Setup
Section titled “Initial Setup”1. Create Project
Section titled “1. Create Project”composer create-project northwestern-sysdev/northwestern-laravel-starter your-project-namecd your-project-nameThen initialize a fresh Git repository:
git init -b develop # or `main` depending on your branching strategygit add .git commit -m "chore: initial commit from Northwestern Laravel Starter"2. Provision Required Services
Section titled “2. Provision Required Services”The application expects specific services to exist before you can begin local development:
-
Create Databases
Create the two databases required by the application:
your_project_name_local # Primary application databaseyour_project_name_test # PHPUnit test database -
Create RustFS Bucket
Create a bucket for local object storage in the RustFS console (
http://localhost:9001in Herd, signing in asherd/secretkey):your-project-nameThen open the bucket’s settings, edit Bucket CORS, and save the default rule. Livewire uploads files directly from the browser to the bucket, and RustFS sends no CORS headers until a rule exists.
With Serve over HTTPS enabled in Herd’s RustFS service settings, the S3 API is available at
https://rustfs.herd.<tld>on macOS andhttps://rustfs-9000.herd.<tld>on Windows, where<tld>is your Herd TLD.You can also create the bucket and its CORS rule from the command line with the RustFS CLI,
rc(brew install rustfs/tap/rcon macOS):Terminal window rc alias set local https://rustfs.herd.test herd secretkeyrc bucket create local/your-project-nameecho '{"CORSRules":[{"AllowedOrigins":["*"],"AllowedMethods":["GET","PUT","POST","DELETE","HEAD"],"AllowedHeaders":["*"],"ExposeHeaders":["ETag"]}]}' \| rc bucket cors set local/your-project-name -
3. Update Configuration Files
Section titled “3. Update Configuration Files”-
.env.exampleUpdate the file by referencing the services you created in the previous step and setting other project-specific defaults:
.env.example APP_NAME="Your Project Name"APP_URL=https://your-project-name.testDB_DATABASE=your_project_name_localDB_PHPUNIT_DATABASE=your_project_name_testAWS_URL=https://rustfs.herd.test/your-project-nameAWS_ENDPOINT=https://rustfs.herd.testAWS_BUCKET=your-project-nameReplace
testinAWS_URLandAWS_ENDPOINTwith your Herd TLD (userustfs-9000.herd.<tld>on Windows).AWS_URLends with the bucket name.Commit these changes to your repository as the base configuration for other developers.
-
herd.ymlIf you’re using Laravel Herd, update the
namefield to match your folder/repository name:herd.yml name: northwestern-laravel-startername: your-project-name
4. Install Dependencies
Section titled “4. Install Dependencies”herd init # If using Laravel Herdherd secure # If using Laravel Herd
composer installcp .env.example .envphp artisan key:generate
nvm installnvm use v26npm install -g pnpm@latest-12 # If pnpm is not already installed
pnpm installpnpm build5. Environment Configuration
Section titled “5. Environment Configuration”A local environment needs no credentials. With the .env.example values, the sign-in page offers Sign In As for the seeded demo users, db:rebuild makes no network calls, and config:validate skips the SSO and Directory Search checks. See Signing In Locally.
Configure SSO and Directory Search locally only to test real NetID sign-in or to add Northwestern users from the directory. Deployed environments always need them. See the WebSSO / Entra ID documentation for full details on each provider.
If your application uses Microsoft Entra ID (the default):
AZURE_CLIENT_ID=your-client-idAZURE_CLIENT_SECRET=your-client-secretDIRECTORY_SEARCH_API_KEY=your-value-hereEVENT_HUB_API_KEY=your-value-here # Only if the EventHub integration is neededIf your application uses Online Passport (agentless WebSSO):
WEBSSO_URL_BASE=https://prd-nusso.it.northwestern.eduWEBSSO_API_URL_BASE=https://northwestern-prod.apigee.net/agentless-webssoWEBSSO_API_KEY=your-api-keyDIRECTORY_SEARCH_API_KEY=your-value-hereEVENT_HUB_API_KEY=your-value-here # Only if the EventHub integration is needed6. Validate Configuration
Section titled “6. Validate Configuration”To ensure your environment is correctly configured, run:
php artisan config:validateIf any issues are detected, the command will output error messages to help you resolve them.
7. Database Scaffolding
Section titled “7. Database Scaffolding”php artisan db:rebuildThis will:
- Clear the cache, the queue and the schedule cache (Redis must be running)
- Create all database tables
- Seed system permissions, role types and default roles
- Sync changelog entries from
resources/changelogs/ - Seed the demo users, which the sign-in page offers under Sign In As
- Regenerate the model IDE helper files
Verification
Section titled “Verification”Test the Application
Section titled “Test the Application”Start the development processes:
composer devThis runs the PHP server, a queue worker, the log viewer and Vite together. The queue worker is required: jobs go to Redis (QUEUE_CONNECTION=redis), and email sign-in codes are not sent until a worker runs them.
With Laravel Herd, the site is served at https://your-project-name.test. Without Herd, use the address php artisan serve prints.
As a guest you should see the landing page. Choose Sign In, then Sign In As… and a demo user such as NUIT Administrator, and you land in the app panel at /app.