{"id":48725583,"url":"https://github.com/katkamravikanth/docker-multi-framework-dev","last_synced_at":"2026-04-11T22:04:08.856Z","repository":{"id":328015846,"uuid":"1113857013","full_name":"katkamravikanth/docker-multi-framework-dev","owner":"katkamravikanth","description":"A scalable Docker development environment for managing multiple Laravel, Symfony, and React projects with reusable images, automatic SSL certificate generation, virtual host support, and automated framework installation.","archived":false,"fork":false,"pushed_at":"2025-12-10T18:28:18.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-11T04:31:46.864Z","etag":null,"topics":["development-environment","docker","docker-compose","laravel","multi-project","mysql","nginx","nodejs","php","react","symfony","vite"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/katkamravikanth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-10T15:02:17.000Z","updated_at":"2025-12-10T18:28:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/katkamravikanth/docker-multi-framework-dev","commit_stats":null,"previous_names":["katkamravikanth/docker-multi-framework-dev"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/katkamravikanth/docker-multi-framework-dev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katkamravikanth%2Fdocker-multi-framework-dev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katkamravikanth%2Fdocker-multi-framework-dev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katkamravikanth%2Fdocker-multi-framework-dev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katkamravikanth%2Fdocker-multi-framework-dev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/katkamravikanth","download_url":"https://codeload.github.com/katkamravikanth/docker-multi-framework-dev/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/katkamravikanth%2Fdocker-multi-framework-dev/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31696762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-11T21:17:31.016Z","status":"ssl_error","status_checked_at":"2026-04-11T21:17:24.556Z","response_time":54,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["development-environment","docker","docker-compose","laravel","multi-project","mysql","nginx","nodejs","php","react","symfony","vite"],"created_at":"2026-04-11T22:04:07.475Z","updated_at":"2026-04-11T22:04:08.849Z","avatar_url":"https://github.com/katkamravikanth.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐳 Multi-Project Docker Environment for Laravel, Symfony \u0026 React\n\nA scalable Docker development environment for managing multiple Laravel, Symfony, and React projects with reusable images, automatic SSL certificate generation, virtual host support, and automated framework installation. Features modular Docker Compose configuration, cross-platform scripts, and easy project scaffolding.\n\n## ✨ Features\n\n- 🔄 **Reusable Docker Images**: Build once, use for all projects\n- 📦 **Easy Project Addition**: Add new projects in minutes with automatic framework installation\n- 🚀 **Shared Infrastructure**: MySQL, Nginx, phpMyAdmin, MailHog\n- 🎯 **Isolated Projects**: Each project runs independently\n- ⚡ **Fast Startup**: Pre-built images = quick container starts\n- 🛠️ **Cross-Platform**: Windows, Linux, and macOS support\n- 🎮 **Simple Management**: Interactive scripts and commands\n- 🎵 **Multi-Framework**: Laravel, Symfony, and React support\n- 🔒 **Automatic SSL**: Self-signed certificates generated for each project\n- 🌐 **Virtual Hosts**: Custom domains with nginx configuration\n- ✨ **Framework Files**: Automatically creates Laravel, Symfony, or React projects\n\n## 📋 Prerequisites\n\n- Docker Desktop installed and running\n- Windows (PowerShell 5.1+) or Linux/macOS (Bash)\n- Basic knowledge of Docker Compose\n\n## 🚀 Quick Start (Fresh Setup)\n\n### 1. Build Reusable Images\n\n**Windows:**\n```powershell\n.\\build-images.ps1\n```\n\n**Linux/macOS:**\n```bash\nchmod +x *.sh\n./build-images.sh\n```\n\nThis creates:\n- `php-framework:latest` - PHP 8.4 with Laravel \u0026 Symfony dependencies\n- `react-framework:latest` - Node 24 for React development\n\n### 2. Start Infrastructure Services\n\n```bash\ndocker compose -f docker-compose.base.yml up -d\n```\n\nThis starts:\n- MySQL (port 3306)\n- Nginx (port 80, 443)\n- phpMyAdmin (port 8080)\n- MailHog (port 1025, 8025)\n\n### 3. Add Your First Project\n\n**Windows:**\n```powershell\n# Laravel (automatically creates framework files)\n.\\add-project.ps1 -Type laravel -Name \"myapp\" -Port 9001\n\n# Symfony (choose skeleton or webapp)\n.\\add-project.ps1 -Type symfony -Name \"myblog\" -Port 9002\n\n# React (automatically creates Vite + React app)\n.\\add-project.ps1 -Type react -Name \"frontend\" -Port 5173\n```\n\n**Linux/macOS:**\n```bash\n# Laravel (automatically creates framework files)\n./add-project.sh laravel myapp 9001\n\n# Symfony (choose skeleton or webapp)\n./add-project.sh symfony myblog 9002\n\n# React (automatically creates Vite + React app)\n./add-project.sh react frontend 5173\n```\n\n\u003e ✨ **Framework Files Automatically Created:**\n\u003e - **Laravel:** Runs `composer create-project laravel/laravel`\n\u003e - **Symfony:** Choice of `symfony/skeleton` or `symfony/webapp`\n\u003e - **React:** Runs `npm create vite@latest -- --template react`\n\u003e \n\u003e 🔒 **SSL Certificates:** Automatically generated for each project\n\n### 4. Update docker-compose.projects.yml\n\nCopy the generated YAML from the script output and paste it into `docker-compose.projects.yml`\n\n### 5. Add Nginx Configuration\n\nCopy the generated Nginx configuration and add it to `etc/nginx/default.conf`\n\n### 6. Update Hosts File\n\nAdd the generated domain to your hosts file:\n```\n127.0.0.1  myapp.local\n```\n- **Windows:** `C:\\Windows\\System32\\drivers\\etc\\hosts` (Run as Administrator)\n- **Linux/macOS:** `/etc/hosts` (Use sudo)\n\n### 7. Start Your Projects\n\n```bash\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml up -d\n```\n\n### 8. Setup Your Applications\n\n**Laravel:**\n```bash\n# Framework files already created, just setup database\ndocker exec -it laravel-myapp php artisan key:generate\ndocker exec -it laravel-myapp php artisan migrate\n```\n\n**Symfony:**\n```bash\n# Framework files already created, just setup database\ndocker exec -it symfony-myblog php bin/console doctrine:database:create\ndocker exec -it symfony-myblog php bin/console doctrine:migrations:migrate\n```\n\n**React:**\n```bash\n# Framework files and dependencies already installed\n# Access at http://frontend.local or http://localhost:5173\n```\n\n### 9. Access Your Applications\n\n- **Laravel/Symfony:** http://myapp.local or https://myapp.local\n- **React App:** http://frontend.local or http://localhost:5173\n- **phpMyAdmin**: http://localhost:8080\n- **MailHog UI**: http://localhost:8025\n- **MySQL**: localhost:3306\n\n### 8. Access Your Applications\n\n- **phpMyAdmin**: http://localhost:8080\n- **MailHog UI**: http://localhost:8025\n- **Your React App**: http://localhost:5173 (or your chosen port)\n- **MySQL**: localhost:3306\n\n## ➕ Adding New Projects\n\n### Using the Add-Project Script (Recommended)\n\n**Windows:**\n```powershell\n# Add a new Laravel project\n.\\add-project.ps1 -Type laravel -Name \"blog\" -Port 9002\n\n# Add a new React project\n.\\add-project.ps1 -Type react -Name \"dashboard\" -Port 5175\n```\n\n**Linux/macOS:**\n```bash\n# Add a new Laravel project\n./add-project.sh laravel blog 9002\n\n# Add a new React project\n./add-project.sh react dashboard 5175\n```\n\nThe script will:\n1. Create the project directory\n2. **Automatically install framework files** (Laravel, Symfony, or React)\n3. Generate SSL certificates for HTTPS (self-signed, valid for 365 days)\n4. Generate the service definition YAML\n5. Generate Nginx virtual host configuration\n6. Show you what to add to `docker-compose.projects.yml` and `etc/nginx/default.conf`\n\nThen:\n1. Copy the generated YAML to `docker-compose.projects.yml`\n2. Copy the generated Nginx config to `etc/nginx/default.conf`\n3. Add the domain to your hosts file\n4. Restart: `docker compose -f docker-compose.base.yml -f docker-compose.projects.yml restart`\n\n**Framework Installation:**\n- **Laravel:** `composer create-project laravel/laravel`\n- **Symfony:** Choice of `symfony/skeleton` or `symfony/webapp`\n- **React:** `npm create vite@latest -- --template react`\n\n**Note:** SSL certificates are stored in `etc/ssl/project-name/` and can be used with Nginx for HTTPS.\n\n### Manual Addition (Advanced)\n\n#### Adding a Laravel Project\n\n1. Create directory: `projects/php/your-project/`\n2. Add to `docker-compose.projects.yml`:\n\n```yaml\n  laravel-your-project:\n    image: php-framework:latest\n    container_name: laravel-your-project\n    volumes:\n      - \"./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini\"\n      - \"./projects/php/your-project:/var/www/your-project\"\n    working_dir: /var/www/your-project\n    ports:\n      - \"9003:9000\"  # Choose next available port\n    depends_on:\n      - mysqldb\n    networks:\n      - app_network\n```\n\n3. Restart services\n\n#### Adding a React Project\n\n1. Create directory: `projects/react/your-project/`\n2. Add to `docker-compose.projects.yml`:\n\n```yaml\n  react-your-project:\n    image: react-framework:latest\n    container_name: react-your-project\n    ports:\n      - \"5176:5173\"  # Choose next available port\n    environment:\n      - CHOKIDAR_USEPOLLING=true\n      - NODE_ENV=development\n    volumes:\n      - \"./projects/react/your-project:/app\"\n      - \"/app/node_modules\"\n    working_dir: /app\n    command: [\"npm\", \"run\", \"dev\", \"--\", \"--host\", \"0.0.0.0\"]\n    restart: always\n    networks:\n      - app_network\n```\n\n3. Restart services\n\n## 🎮 Common Commands\n\n### Interactive Menu (Easiest)\n\n**Windows:**\n```powershell\n.\\manage.ps1\n```\n\n**Linux/macOS:**\n```bash\n./manage.sh\n```\n\n### Using Scripts\n\n**Windows:**\n```powershell\n# Build images\n.\\build-images.ps1\n\n# Add new project (Laravel/Symfony/React)\n.\\add-project.ps1 -Type symfony -Name \"blog\" -Port 9002\n```\n\n**Linux/macOS:**\n```bash\n# Build images\n./build-images.sh\n\n# Add new project (laravel/symfony/react)\n./add-project.sh symfony blog 9002\n```\n\n### Using Docker Compose\n\n```bash\n# Start all services\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml up -d\n\n# Stop all services\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml down\n\n# View logs\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml logs -f\n\n# View specific service logs\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml logs -f laravel-myapp\n\n# Restart specific service\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml restart react-frontend\n\n# List running containers\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml ps\n```\n\n### Using Make (Alternative)\n\n```bash\nmake build      # Build images\nmake up         # Start all services\nmake down       # Stop all services\nmake logs       # View all logs\nmake ps         # List containers\n```\n\n### Working with Laravel\n\n```bash\n# Install dependencies\ndocker exec -it laravel-myapp composer install\n\n# Run migrations\ndocker exec -it laravel-myapp php artisan migrate\n\n# Generate key\ndocker exec -it laravel-myapp php artisan key:generate\n\n# Clear cache\ndocker exec -it laravel-myapp php artisan cache:clear\n\n# Shell access\ndocker exec -it laravel-myapp bash\n```\n\n### Working with Symfony\n\n```bash\n# Install dependencies\ndocker exec -it symfony-myblog composer install\n\n# Database commands\ndocker exec -it symfony-myblog php bin/console doctrine:database:create\ndocker exec -it symfony-myblog php bin/console doctrine:migrations:migrate\n\n# Clear cache\ndocker exec -it symfony-myblog php bin/console cache:clear\n\n# Make commands\ndocker exec -it symfony-myblog php bin/console make:controller\ndocker exec -it symfony-myblog php bin/console make:entity\n\n# Shell access\ndocker exec -it symfony-myblog bash\n```\n\n### Working with React\n\n```bash\n# Install dependencies\ndocker exec -it react-frontend npm install\n\n# Build for production\ndocker exec -it react-frontend npm run build\n\n# Shell access\ndocker exec -it react-frontend sh\n```\n\n## 📁 Directory Structure\n\n```\nDocker/\n├── images/                           # Reusable Docker images\n│   ├── php-framework/\n│   │   └── Dockerfile               # PHP 8.4 for Laravel \u0026 Symfony\n│   └── react-dev/\n│       └── Dockerfile               # Node 24 + Alpine\n│\n├── projects/                         # Your applications (empty, ready)\n│   ├── php/                         # Laravel \u0026 Symfony projects here\n│   └── react/                       # React projects here\n│\n├── etc/                             # Configuration\n│   ├── nginx/                       # Nginx configs\n│   ├── php/\n│   │   └── php.ini\n│   ├── mysql/\n│   │   └── 01-databases.sql\n│   └── ssl/\n│\n├── logs/                            # Application logs\n│   └── nginx/\n│\n├── docker-compose.base.yml          # Infrastructure services\n├── docker-compose.projects.yml      # Your projects (template)\n│\n├── Scripts (Windows):\n│   ├── build-images.ps1             # Build Docker images\n│   ├── add-project.ps1              # Add new projects\n│   └── manage.ps1                   # Interactive menu\n│\n├── Scripts (Linux/macOS):\n│   ├── build-images.sh              # Build Docker images\n│   ├── add-project.sh               # Add new projects\n│   └── manage.sh                    # Interactive menu\n│\n├── Documentation:\n│   ├── START-HERE.md                # Quick start guide\n│   ├── README.md                    # This file\n│   ├── CHEATSHEET.md                # Command reference\n│   ├── INDEX.md                     # Documentation index\n│   ├── ARCHITECTURE.md              # System design\n│   ├── SYMFONY.md                   # Symfony-specific guide\n│   └── LINUX-MACOS.md               # Linux/Mac guide\n│\n├── Makefile                         # Make commands (optional)\n└── .env                             # Environment variables\n```\n\n## 🔌 Port Mapping \u0026 Virtual Hosts\n\n### Infrastructure Ports\n- **Nginx HTTP**: 80\n- **Nginx HTTPS**: 443\n- **MySQL**: 3306\n- **phpMyAdmin**: 8080\n- **MailHog SMTP**: 1025\n- **MailHog Web**: 8025\n\n### Project Ports\n\n**Important:** Each project needs a **unique port number**.\n\n#### Laravel/Symfony Projects (PHP-FPM)\n- First project: 9001\n- Second project: 9002\n- Third project: 9003\n- (Increment for each new project)\n\n#### React Projects (Dev Server)\n- First project: 5173\n- Second project: 5174\n- Third project: 5175\n- (Increment for each new project)\n\n### Virtual Host Setup (Recommended)\n\nInstead of accessing via `http://localhost:9001`, use friendly URLs like `http://myapp.local`.\n\n**The `add-project` script automatically generates:**\n1. Nginx virtual host configuration\n2. Instructions for hosts file setup\n\n**Manual Setup:**\n\n1. **Add Nginx Configuration** (generated by script, copy to `etc/nginx/default.conf`)\n2. **Edit Hosts File:**\n\n   **Windows:** `C:\\Windows\\System32\\drivers\\etc\\hosts` (Run Notepad as Administrator)\n   ```\n   127.0.0.1  myapp.local\n   127.0.0.1  myblog.local\n   127.0.0.1  frontend.local\n   ```\n\n   **Linux/macOS:** `/etc/hosts` (Use sudo)\n   ```bash\n   sudo nano /etc/hosts\n   ```\n   Add:\n   ```\n   127.0.0.1  myapp.local\n   127.0.0.1  myblog.local\n   127.0.0.1  frontend.local\n   ```\n\n3. **Restart Nginx:**\n   ```bash\n   docker compose -f docker-compose.base.yml -f docker-compose.projects.yml restart web\n   ```\n\n4. **Access your projects:**\n   - Laravel: `http://myapp.local` or `https://myapp.local`\n   - Symfony: `http://myblog.local` or `https://myblog.local`\n   - React: `http://frontend.local` or `https://frontend.local`\n\n## 🔧 Customization\n\n### Modify PHP Configuration\n\nEdit `etc/php/php.ini` and restart PHP containers:\n\n```bash\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml restart laravel-myapp\n```\n\n### Add PHP Extensions\n\n1. Edit `images/php-framework/Dockerfile`\n2. Add your extension installation commands\n3. Rebuild images (Windows: `.\\build-images.ps1` or Linux/macOS: `./build-images.sh`)\n4. Recreate containers:\n\n```bash\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml up -d --force-recreate\n```\n\n### Modify Nginx Configuration\n\nEdit `etc/nginx/default.conf` and restart Nginx:\n\n```powershell\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml restart web\n```\n\n## 🐛 Troubleshooting\n\n### Port Already in Use\n\n**Windows:**\n```powershell\nnetstat -ano | findstr :5173\n```\n\n**Linux/macOS:**\n```bash\nlsof -i :5173\n```\n\nThen change the port in `docker-compose.projects.yml`\n\n### Container Won't Start\n\n```bash\n# View logs\ndocker compose -f docker-compose.base.yml -f docker-compose.projects.yml logs laravel-myapp\n\n# Check container status\ndocker ps -a\n```\n\n### Permission Issues (Laravel)\n\n```bash\ndocker exec -it laravel-myapp chown -R www-data:www-data storage bootstrap/cache\ndocker exec -it laravel-myapp chmod -R 775 storage bootstrap/cache\n```\n\n### React Hot Reload Not Working\n\nEnsure `CHOKIDAR_USEPOLLING=true` is set in the environment variables.\n\n### Database Connection Issues\n\nCheck your Laravel `.env` file:\n\n```env\nDB_CONNECTION=mysql\nDB_HOST=mysqldb\nDB_PORT=3306\nDB_DATABASE=your_database\nDB_USERNAME=root\nDB_PASSWORD=your_password\n```\n\n## 📚 Documentation\n\n- **[START-HERE.md](START-HERE.md)** - Quick start guide (read this first!)\n- **[CHEATSHEET.md](CHEATSHEET.md)** - Command reference\n- **[ARCHITECTURE.md](ARCHITECTURE.md)** - System architecture\n- **[Docker Compose Docs](https://docs.docker.com/compose/)** - Official Docker documentation\n- **[Laravel Docs](https://laravel.com/docs)** - Laravel documentation\n- **[Symfony Docs](https://symfony.com/doc)** - Symfony documentation\n\n## 🎯 Best Practices\n\n1. **Keep images updated**: Regularly rebuild base images with security updates\n2. **Use .env files**: Don't commit sensitive data to version control\n3. **Volume management**: Use named volumes for persistent data\n4. **Resource limits**: Set memory/CPU limits for production environments\n5. **Logging**: Configure proper log rotation\n6. **Backups**: Regular database backups (use `mysqldump`)\n7. **Security**: Use strong passwords and keep ports closed in production\n\n## 🌐 Cross-Platform Notes\n\n- **Windows**: Use PowerShell scripts (`.ps1`)\n- **Linux/macOS**: Use Bash scripts (`.sh`) - run `chmod +x *.sh` first\n- All Docker Compose files work identically across platforms\n\n## 💡 Tips\n\n- Use `docker-compose.projects.yml` to enable/disable projects (comment out services)\n- Each project can have its own database schema\n- Shared MySQL instance saves resources\n- Use the interactive menu (`manage.ps1` or `manage.sh`) for easier management\n- Check `CHEATSHEET.md` for quick command reference\n- Keep your base images lean and focused\n\n## 🆘 Getting Help\n\n1. **Quick Start**: See [START-HERE.md](START-HERE.md)\n2. **Commands**: See [CHEATSHEET.md](CHEATSHEET.md)\n3. **Architecture**: See [ARCHITECTURE.md](ARCHITECTURE.md)\n\n## 📝 License\n\nThis setup is provided as-is under the MIT license. Modify freely for your projects.\n\n---\n\n**Happy Coding! 🚀**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatkamravikanth%2Fdocker-multi-framework-dev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkatkamravikanth%2Fdocker-multi-framework-dev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkatkamravikanth%2Fdocker-multi-framework-dev/lists"}