Skip to content

Instantly share code, notes, and snippets.

@mrlinnth
Last active September 17, 2025 03:28
Show Gist options
  • Select an option

  • Save mrlinnth/344688ab5758344b70efbdb9dca34c72 to your computer and use it in GitHub Desktop.

Select an option

Save mrlinnth/344688ab5758344b70efbdb9dca34c72 to your computer and use it in GitHub Desktop.
[Laravel 12 DDEV setup] Based on laravel12-starter repo with pnpm and adminer
  1. Clone starter project which has laravel 12, inertiajs, tailwind css and shadcn components
  • git clone git@github.com:mrlinnth/laravel12-starter.git && cd laravel12-starter
  1. Setup DDEV for laravel together with pnpm and adminer
ddev config --project-type=laravel --docroot=public

ddev add-on get ddev/ddev-adminer

ddev add-on get envsa/ddev-pnpm
  1. Update .ddev/config.yaml for web_extra_exposed_ports option

  2. Update vite.config.js for server option

  3. Start DDEV

ddev start

ddev composer install

ddev pnpm install

ddev php artisan key:generate

ddev php artisan migrate:refresh --seed
  1. Launch Project
ddev pnpm dev

ddev launch
  1. Database
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=db
DB_USERNAME=db
DB_PASSWORD=db
  1. Launch Adminer
  • ddev adminer
  1. Notes
  • Production build ddev pnpm build
  • Add /.pnpm-store to .gitignore
  • Brave users need to disable the shield when visiting the project during development
  • Outline users might need to disconnect before running ddev start
  1. Editor cannot detect PHP executable path issue
path=$(printf '%s\n' "${PWD##*/}")
command="ddev php "$@""
$command
# laravel12-starter/.ddev/config.yaml
name: laravel12-starter
type: laravel
docroot: public
php_version: "8.3"
webserver_type: nginx-fpm
xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.11"
use_dns_when_possible: true
composer_version: "2"
web_environment: []
corepack_enable: false
web_extra_exposed_ports:
- name: node-vite
container_port: 5173
http_port: 5172
https_port: 5173
// laravel12-starter/vite.config.js
import react from '@vitejs/plugin-react';
import laravel from 'laravel-vite-plugin';
import {
defineConfig
} from 'vite';
import tailwindcss from "@tailwindcss/vite";
const defaultConfig = {
plugins: [
laravel({
input: ['resources/css/app.css', 'resources/js/app.tsx'],
ssr: 'resources/js/ssr.jsx',
refresh: true,
}),
react(),
tailwindcss(),
],
esbuild: {
jsx: 'automatic',
},
};
let config = defaultConfig;
// add server options for ddev projects
if(process.env.DDEV_PRIMARY_URL !== undefined) {
const port = 5173;
const origin = `${process.env.DDEV_PRIMARY_URL}:${port}`;
config = {
...defaultConfig,
server: {
host: '0.0.0.0',
port: port,
strictPort: true,
origin: origin,
cors: {
origin: /https?:\/\/([A-Za-z0-9\-\.]+)?(\.ddev\.site)(?::\d+)?$/,
},
}
};
}
export default defineConfig(config);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment