Laravel 11 portfolio website — managed with GSD-2.
- PHP 8.3-fpm + Laravel 11
- nginx:alpine
- MySQL 8.0
- Mailpit (SMTP catcher)
- App: http://100.69.164.64:8100
- Mailpit UI: http://100.69.164.64:8125
- 8100 → nginx (app)
- 8125 → Mailpit web UI
- 1025 → SMTP
- 33060 → MySQL
docker compose up -d --build
docker compose exec -T app composer install
docker compose exec -T app cp .env.example .env
docker compose exec -T app php artisan key:generate
docker compose exec -T app php artisan migrate --seedThe app container now creates the public/storage symlink automatically on startup, so uploaded public files such as profile photos resolve without a separate php artisan storage:link step.