Skip to content

aslamProject18/laravel-multi-domain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Laravel Multi-Domain dengan FrankenPHP

Setup lengkap untuk menjalankan multiple Laravel applications dalam satu container FrankenPHP dengan domain yang berbeda.

πŸ“‹ Fitur

  • βœ… Multi-Domain Support - Satu container untuk multiple Laravel apps
  • βœ… FrankenPHP - Performance tinggi dengan worker mode
  • βœ… Auto SSL - Let's Encrypt untuk production, self-signed untuk development
  • βœ… Database Isolation - Setiap app punya database terpisah
  • βœ… Redis Caching - Shared Redis untuk semua aplikasi
  • βœ… Queue Workers - Supervisor untuk background jobs
  • βœ… Development Tools - phpMyAdmin, Vite dev server
  • βœ… Easy Deployment - Script otomatis untuk VPS

πŸ—οΈ Struktur Project

laravel-multi-domain/
β”œβ”€β”€ apps/                          # Laravel applications
β”‚   β”œβ”€β”€ tokoonline/               # E-commerce app
β”‚   β”œβ”€β”€ blog/                     # Blog app
β”‚   └── portfolio/                # Portfolio app
β”œβ”€β”€ docker/                       # Docker configurations
β”‚   β”œβ”€β”€ php/
β”‚   β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”‚   └── Caddyfile             # Multi-domain configuration
β”‚   β”œβ”€β”€ node/
β”‚   └── supervisor/
β”œβ”€β”€ scripts/                      # Deployment scripts
β”‚   β”œβ”€β”€ setup-local.sh           # Local development setup
β”‚   β”œβ”€β”€ deploy-to-vps.sh          # VPS deployment
β”‚   └── init-databases.sql       # Database initialization
β”œβ”€β”€ docs/                         # Documentation
└── docker-compose.yml            # Multi-domain services

πŸ› οΈ Quick Start

Local Development

  1. Clone repository

    git clone <repository-url>
    cd laravel-multi-domain
  2. Run setup script

    chmod +x scripts/setup-local.sh
    ./scripts/setup-local.sh
  3. Access applications

Production Deployment

  1. Prepare VPS

    • Ubuntu 20.04+ atau Debian 11+
    • Minimal 2GB RAM, 20GB storage
    • Domain sudah pointing ke VPS IP
  2. Run deployment script

    chmod +x scripts/deploy-to-vps.sh
    ./scripts/deploy-to-vps.sh
  3. Follow prompts

    • Masukkan VPS IP address
    • Konfirmasi domain names
    • Script akan otomatis setup semuanya

πŸ“– Manual Setup

Prerequisites

  • Docker & Docker Compose
  • Git
  • SSH access ke VPS (untuk production)

Local Development Setup

  1. Setup hosts file

    # Windows: C:\Windows\System32\drivers\etc\hosts
    # Linux/Mac: /etc/hosts
    127.0.0.1 tokoonline.local
    127.0.0.1 blog.local
    127.0.0.1 portfolio.local
  2. Create Laravel applications

    mkdir -p apps
    cd apps
    
    # Create each Laravel app
    composer create-project laravel/laravel tokoonline
    composer create-project laravel/laravel blog
    composer create-project laravel/laravel portfolio
  3. Configure environment files

    # For each app, copy .env.example to .env and update:
    # - APP_NAME
    # - APP_URL
    # - DB_DATABASE, DB_USERNAME, DB_PASSWORD
    # - DB_HOST=mysql
    # - REDIS_HOST=redis
  4. Start services

    docker-compose up -d --build
  5. Setup Laravel in containers

    # For each app
    docker-compose exec frankenphp bash
    cd /var/www/tokoonline
    composer install
    php artisan key:generate
    php artisan migrate

Production Setup

  1. Prepare VPS

    # Update system
    apt update && apt upgrade -y
    
    # Install Docker
    curl -fsSL https://get.docker.com -o get-docker.sh
    sh get-docker.sh
    
    # Install Docker Compose
    curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
  2. Copy project files

    scp -r . root@your-vps-ip:/var/www/docker-setup/
  3. Update Caddyfile

    # Replace .local domains with actual domains
    # Update email for SSL certificates
  4. Deploy

    ssh root@your-vps-ip
    cd /var/www/docker-setup
    docker-compose up -d --build

βš™οΈ Configuration

Domain Configuration

Edit docker/php/Caddyfile untuk mengatur domain:

# Development
tokoonline.local {
    tls internal
    # ... config
}

# Production
tokoonline.com {
    # SSL otomatis dari Let's Encrypt
    # ... config
}

Database Configuration

Setiap aplikasi memiliki database terpisah:

  • tokoonline_db β†’ tokoonline_user
  • blog_db β†’ blog_user
  • portfolio_db β†’ portfolio_user

Environment Variables

Development:

APP_ENV=local
APP_DEBUG=true
DB_HOST=mysql
REDIS_HOST=redis

Production:

APP_ENV=production
APP_DEBUG=false
DB_HOST=mysql
REDIS_HOST=redis

πŸ”§ Management Commands

Docker Commands

# Start services
docker-compose up -d

# Stop services
docker-compose down

# View logs
docker-compose logs -f frankenphp

# Access container
docker-compose exec frankenphp bash

# Restart services
docker-compose restart

Laravel Commands

# Run artisan commands
docker-compose exec frankenphp php artisan migrate

# Install packages
docker-compose exec frankenphp composer install

# Clear cache
docker-compose exec frankenphp php artisan cache:clear

# Queue workers (handled by supervisor)
docker-compose logs supervisor

Database Management

# Access MySQL
docker-compose exec mysql mysql -u root -p

# Backup database
docker-compose exec mysql mysqldump -u root -p tokoonline_db > backup.sql

# Restore database
docker-compose exec -T mysql mysql -u root -p tokoonline_db < backup.sql

πŸš€ Performance Optimization

FrankenPHP Worker Mode

php_server {
    worker index.php 4  # Adjust based on CPU cores
}

Laravel Optimization

# Production optimizations
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache

# Composer optimization
composer install --no-dev --optimize-autoloader

Redis Configuration

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

πŸ”’ Security

SSL Certificates

  • Development: Self-signed certificates
  • Production: Let's Encrypt automatic

Security Headers

header {
    X-Content-Type-Options nosniff
    X-Frame-Options DENY
    X-XSS-Protection "1; mode=block"
    Strict-Transport-Security "max-age=31536000"
}

Firewall Setup

# UFW configuration
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

πŸ“Š Monitoring

Health Checks

# Check container status
docker-compose ps

# Check resource usage
docker stats

# Check logs
docker-compose logs -f --tail=100

Log Files

  • FrankenPHP: docker-compose logs frankenphp
  • MySQL: docker-compose logs mysql
  • Redis: docker-compose logs redis
  • Supervisor: docker-compose logs supervisor

πŸ› Troubleshooting

Common Issues

  1. Port conflicts

    # Check what's using port 80/443
    netstat -tulpn | grep :80
  2. Permission issues

    # Fix Laravel permissions
    chmod -R 755 apps/
    chmod -R 775 apps/*/storage apps/*/bootstrap/cache
  3. SSL certificate issues

    # Check Caddy logs
    docker-compose logs frankenphp | grep -i ssl
  4. Database connection issues

    # Test database connection
    docker-compose exec frankenphp php artisan tinker
    DB::connection()->getPdo();

Debug Mode

# Enable debug logging
# In Caddyfile, change log level to DEBUG
log {
    level DEBUG
}

🀝 Contributing

  1. Fork repository
  2. Create feature branch
  3. Make changes
  4. Test thoroughly
  5. Submit pull request

πŸ“„ License

MIT License - see LICENSE file for details.

πŸ†˜ Support

  • Issues: Create GitHub issue
  • Documentation: Check docs/ folder
  • Community: Join discussions

Happy coding! πŸš€

Dibuat dengan ❀️ untuk komunitas Laravel Indonesia

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published