═══════════════════════════════════════════════════════════════════════════
                    MULTI-DOMAIN SETUP SCRIPT
          Automate Multiple Websites with SSL on One Server
═══════════════════════════════════════════════════════════════════════════

📋 OVERVIEW

This script automates the setup of multiple domains on a single server, with:
✓ Separate virtual hosts for each domain
✓ Individual SSL certificates (Let's Encrypt)
✓ Isolated document root directories
✓ Automatic DNS checking
✓ Security headers configured
✓ Beautiful default landing pages
✓ Complete management interface

═══════════════════════════════════════════════════════════════════════════
🚀 QUICK START
═══════════════════════════════════════════════════════════════════════════

1. UPLOAD TO SERVER:
   scp multi-domain-setup.sh root@your-server-ip:~

2. MAKE EXECUTABLE:
   chmod +x multi-domain-setup.sh

3. RUN THE SCRIPT:
   sudo ./multi-domain-setup.sh

4. FOLLOW THE MENU or use command-line options (see below)

═══════════════════════════════════════════════════════════════════════════
📖 USAGE METHODS
═══════════════════════════════════════════════════════════════════════════

METHOD 1: INTERACTIVE MENU (Recommended for beginners)
────────────────────────────────────────────────────────
sudo ./multi-domain-setup.sh

Then select from the menu:
  1. Interactive Mode - Add domains one by one with prompts
  2. Batch Mode - Upload CSV file with multiple domains
  3. Quick Add - Add a single domain quickly
  4. List Domains - See all configured domains
  5. Install SSL - Add SSL to existing domain
  6. Remove Domain - Delete domain configuration
  7. Restart Apache
  8. Test Configuration


METHOD 2: COMMAND LINE - Single Domain
────────────────────────────────────────────────────────
sudo ./multi-domain-setup.sh --domain DOMAIN EMAIL [OPTIONS]

Examples:

# Basic setup
sudo ./multi-domain-setup.sh -d example.com admin@example.com

# With custom document root
sudo ./multi-domain-setup.sh -d example.com admin@example.com /var/www/custom

# Full options (domain, email, doc_root, include_www, install_ssl)
sudo ./multi-domain-setup.sh -d example.com admin@example.com /var/www/example yes yes


METHOD 3: BATCH MODE - Multiple Domains from CSV
────────────────────────────────────────────────────────
1. Create a CSV file (see domains-template.csv):
   domain,email,doc_root,include_www,install_ssl
   example.com,admin@example.com,,,yes
   site2.com,admin@site2.com,/var/www/site2,no,yes
   site3.com,admin@site3.com,,,no

2. Run the script:
   sudo ./multi-domain-setup.sh --file domains.csv


METHOD 4: OTHER COMMANDS
────────────────────────────────────────────────────────
# List all configured domains
sudo ./multi-domain-setup.sh --list

# Remove a domain
sudo ./multi-domain-setup.sh --remove example.com

# Install SSL for existing domain
sudo ./multi-domain-setup.sh --ssl example.com

# Show help
sudo ./multi-domain-setup.sh --help

═══════════════════════════════════════════════════════════════════════════
📁 WHAT THE SCRIPT CREATES
═══════════════════════════════════════════════════════════════════════════

For each domain (example: example.com):

1. DOCUMENT ROOT:
   /var/www/example.com/
   ├── index.html (beautiful default landing page)
   └── (your website files go here)

2. APACHE CONFIGURATION:
   /etc/apache2/sites-available/example.com.conf
   /etc/apache2/sites-enabled/example.com.conf (symlink)

3. APACHE LOGS:
   /var/log/apache2/example.com-error.log
   /var/log/apache2/example.com-access.log

4. SSL CERTIFICATES (if DNS is ready):
   /etc/letsencrypt/live/example.com/
   ├── cert.pem
   ├── chain.pem
   ├── fullchain.pem
   └── privkey.pem

5. DOMAIN REGISTRY:
   /root/domains.txt (list of all configured domains)

═══════════════════════════════════════════════════════════════════════════
🎯 REAL-WORLD EXAMPLES
═══════════════════════════════════════════════════════════════════════════

SCENARIO 1: Web Design Agency - Multiple Client Sites
──────────────────────────────────────────────────────
You have 5 client websites to host:

Create domains.csv:
client1.com,admin@agency.com,/var/www/client1,yes,yes
client2.com,admin@agency.com,/var/www/client2,yes,yes
client3.com,admin@agency.com,/var/www/client3,yes,yes
client4.com,admin@agency.com,/var/www/client4,yes,yes
client5.com,admin@agency.com,/var/www/client5,yes,yes

Run:
sudo ./multi-domain-setup.sh --file domains.csv

Result:
✓ 5 separate virtual hosts
✓ 5 SSL certificates
✓ 5 isolated directories
✓ All set up in minutes!


SCENARIO 2: Personal Portfolio - Main Site + Blog + Projects
─────────────────────────────────────────────────────────────
sudo ./multi-domain-setup.sh -d johnsmith.com admin@johnsmith.com
sudo ./multi-domain-setup.sh -d blog.johnsmith.com admin@johnsmith.com
sudo ./multi-domain-setup.sh -d projects.johnsmith.com admin@johnsmith.com

Result:
✓ Main website at johnsmith.com
✓ Blog at blog.johnsmith.com
✓ Projects showcase at projects.johnsmith.com
✓ All with SSL certificates


SCENARIO 3: E-commerce - Main Store + Subdomain for Wholesale
──────────────────────────────────────────────────────────────
sudo ./multi-domain-setup.sh -d mystore.com admin@mystore.com /var/www/store
sudo ./multi-domain-setup.sh -d wholesale.mystore.com admin@mystore.com /var/www/wholesale

Upload WordPress to /var/www/store
Upload WooCommerce B2B to /var/www/wholesale


SCENARIO 4: Testing Environment - Production + Staging
───────────────────────────────────────────────────────
sudo ./multi-domain-setup.sh -d mysite.com admin@mysite.com /var/www/production
sudo ./multi-domain-setup.sh -d staging.mysite.com admin@mysite.com /var/www/staging

Deploy stable version to /var/www/production
Test new features in /var/www/staging


SCENARIO 5: Multiple Businesses
────────────────────────────────
sudo ./multi-domain-setup.sh -d restaurant.com owner@restaurant.com
sudo ./multi-domain-setup.sh -d consulting.com owner@consulting.com
sudo ./multi-domain-setup.sh -d realestate.com owner@realestate.com

Three completely separate businesses on one server!

═══════════════════════════════════════════════════════════════════════════
🔒 SSL CERTIFICATE AUTOMATION
═══════════════════════════════════════════════════════════════════════════

The script intelligently handles SSL:

✓ AUTOMATIC INSTALLATION:
  - Checks if DNS is pointing to your server
  - If yes: Installs SSL immediately
  - If no: Skips SSL, shows manual command for later

✓ AUTO-RENEWAL:
  - Certbot configures automatic renewal
  - Certificates renew 30 days before expiration
  - No manual intervention needed

✓ MULTIPLE DOMAINS:
  - Each domain gets its own certificate
  - Includes www subdomain by default
  - Can exclude www if desired

✓ MANUAL INSTALLATION:
  If DNS wasn't ready during setup, install later:
  sudo ./multi-domain-setup.sh --ssl example.com

  Or directly:
  sudo certbot --apache -d example.com -d www.example.com

═══════════════════════════════════════════════════════════════════════════
📂 DIRECTORY STRUCTURE EXAMPLE
═══════════════════════════════════════════════════════════════════════════

After setting up 3 domains:

/var/www/
├── example.com/
│   ├── index.html
│   ├── css/
│   ├── js/
│   └── images/
├── mystore.com/
│   ├── index.html
│   ├── products/
│   └── checkout/
└── blog.com/
    ├── index.html
    ├── posts/
    └── assets/

Each completely isolated from the others!

═══════════════════════════════════════════════════════════════════════════
🎨 FEATURES
═══════════════════════════════════════════════════════════════════════════

✓ AUTOMATED SETUP:
  - Virtual host configuration
  - SSL certificate installation
  - Directory creation
  - Permission setting
  - Firewall configuration

✓ VALIDATION:
  - Domain format validation
  - DNS checking before SSL
  - Apache config testing
  - Prevents duplicate domains

✓ SECURITY:
  - Proper file permissions (755/644)
  - www-data ownership
  - Security headers configured
  - SSL forced redirect
  - Firewall rules

✓ USER-FRIENDLY:
  - Color-coded output
  - Beautiful default pages
  - Progress indicators
  - Error messages with solutions
  - Interactive menus

✓ FLEXIBLE:
  - Custom document roots
  - Optional www subdomain
  - Skip SSL if desired
  - Batch or individual setup

✓ MANAGEMENT:
  - List all domains
  - Remove domains
  - Install SSL later
  - Test configuration
  - View logs

═══════════════════════════════════════════════════════════════════════════
⚙️ CSV FILE FORMAT
═══════════════════════════════════════════════════════════════════════════

Format: domain,email,doc_root,include_www,install_ssl

FIELD DETAILS:

1. domain (Required)
   - The domain name
   - Example: example.com

2. email (Required)
   - Admin email for SSL notifications
   - Example: admin@example.com

3. doc_root (Optional)
   - Custom document root path
   - Blank = /var/www/DOMAIN
   - Example: /var/www/custom/site

4. include_www (Optional)
   - Include www subdomain in SSL
   - Values: yes, no
   - Default: yes
   - Example: yes

5. install_ssl (Optional)
   - Install SSL certificate now
   - Values: yes, no
   - Default: yes
   - Example: yes

EXAMPLE CSV FILE:

# Basic - uses all defaults
example.com,admin@example.com,,,

# Custom document root only
site2.com,admin@site2.com,/var/www/sites/site2,,

# No www subdomain
blog.com,admin@blog.com,,no,

# Skip SSL for now (DNS not ready)
test.com,admin@test.com,,,no

# Full custom
store.com,admin@store.com,/var/www/ecom,yes,yes

═══════════════════════════════════════════════════════════════════════════
🔧 PREREQUISITES
═══════════════════════════════════════════════════════════════════════════

The script automatically installs/configures:
✓ Apache 2.4
✓ Certbot (Let's Encrypt client)
✓ UFW Firewall
✓ Required Apache modules (ssl, rewrite, headers)

BEFORE RUNNING:
✓ Point DNS A records to your server IP
✓ Configure AWS Security Group (ports 80, 443, 22)
✓ Have root/sudo access
✓ Internet connection

═══════════════════════════════════════════════════════════════════════════
🎓 BEST PRACTICES
═══════════════════════════════════════════════════════════════════════════

1. DNS CONFIGURATION:
   ✓ Point DNS BEFORE running script for automatic SSL
   ✓ Use @ for root domain and www for subdomain
   ✓ Wait 5-30 minutes for DNS propagation

2. DOCUMENT ROOT ORGANIZATION:
   ✓ Use /var/www/DOMAIN for simple sites
   ✓ Use /var/www/category/DOMAIN for organized structure
   ✓ Keep each domain completely isolated

3. FILE UPLOADS:
   ✓ Upload via SFTP: sftp user@server
   ✓ Or SCP: scp -r files/* user@server:/var/www/domain/
   ✓ Replace default index.html with your site

4. TESTING:
   ✓ Test each domain after setup: http://domain.com
   ✓ Verify SSL: https://domain.com
   ✓ Check logs if issues: /var/log/apache2/domain-error.log

5. MAINTENANCE:
   ✓ Keep list of domains in /root/domains.txt
   ✓ Regular backups of /var/www/
   ✓ Monitor SSL expiration (auto-renews, but check)
   ✓ Update Apache/PHP regularly

═══════════════════════════════════════════════════════════════════════════
🐛 TROUBLESHOOTING
═══════════════════════════════════════════════════════════════════════════

PROBLEM: SSL Installation Fails
SOLUTION:
  1. Check DNS: dig +short yourdomain.com
  2. Ensure it points to your server IP
  3. Wait for DNS propagation (up to 24 hours)
  4. Install manually later:
     sudo ./multi-domain-setup.sh --ssl yourdomain.com

PROBLEM: Domain Shows Apache Default Page
SOLUTION:
  1. Check if site is enabled:
     sudo apache2ctl -S
  2. Enable if needed:
     sudo a2ensite yourdomain.com.conf
     sudo systemctl reload apache2

PROBLEM: 403 Forbidden Error
SOLUTION:
  1. Check permissions:
     sudo chown -R www-data:www-data /var/www/yourdomain.com
     sudo chmod -R 755 /var/www/yourdomain.com
  2. Check .htaccess if present

PROBLEM: Website Not Accessible
SOLUTION:
  1. Check Apache: sudo systemctl status apache2
  2. Check firewall: sudo ufw status
  3. Check AWS Security Group allows ports 80, 443
  4. Check logs: sudo tail -50 /var/log/apache2/yourdomain.com-error.log

PROBLEM: Domain Already Exists
SOLUTION:
  Script will ask if you want to overwrite
  Or remove first:
  sudo ./multi-domain-setup.sh --remove olddomain.com

═══════════════════════════════════════════════════════════════════════════
📊 FILE LOCATIONS
═══════════════════════════════════════════════════════════════════════════

Domain Registry:        /root/domains.txt
Virtual Hosts:          /etc/apache2/sites-available/DOMAIN.conf
Enabled Sites:          /etc/apache2/sites-enabled/DOMAIN.conf
Document Roots:         /var/www/DOMAIN/ (default)
SSL Certificates:       /etc/letsencrypt/live/DOMAIN/
Apache Logs:            /var/log/apache2/DOMAIN-error.log
                        /var/log/apache2/DOMAIN-access.log

═══════════════════════════════════════════════════════════════════════════
🎯 ADVANTAGES OVER MANUAL SETUP
═══════════════════════════════════════════════════════════════════════════

MANUAL SETUP (Traditional):
  ⏱️  15-30 minutes per domain
  📝 Multiple config files to edit
  ❌ Easy to make mistakes
  🔒 SSL setup is complex
  👤 Requires Apache expertise

WITH THIS SCRIPT:
  ⚡ 2-3 minutes per domain
  🤖 Fully automated
  ✅ No mistakes
  🔒 SSL is automatic
  👶 Beginner-friendly

BATCH MODE:
  ⚡ Setup 10 domains in 5 minutes!

═══════════════════════════════════════════════════════════════════════════
💡 PRO TIPS
═══════════════════════════════════════════════════════════════════════════

✓ Use batch mode for multiple domains - save time!
✓ Keep your domains.csv file for documentation
✓ Test domains locally with /etc/hosts before DNS
✓ Use meaningful directory names (/var/www/client-name/)
✓ Set up staging domains (staging.example.com)
✓ Monitor /root/domains.txt for all configurations
✓ Back up /etc/apache2/sites-available/ regularly
✓ Use subdirectories for organization:
  /var/www/clients/client1/
  /var/www/personal/portfolio/
  /var/www/testing/staging/

═══════════════════════════════════════════════════════════════════════════
📈 CAPACITY
═══════════════════════════════════════════════════════════════════════════

TYPICAL SERVER (2GB RAM, 2 vCPUs):
✓ 10-20 low-traffic domains (< 10K visitors/month each)
✓ 5-10 medium-traffic domains (< 100K visitors/month each)
✓ 2-5 high-traffic domains (< 500K visitors/month each)

RECOMMENDATIONS:
- Start with 5-10 domains
- Monitor server resources
- Upgrade if CPU > 80% or RAM > 90%
- Use CloudFlare for caching

═══════════════════════════════════════════════════════════════════════════
🔄 COMMON WORKFLOWS
═══════════════════════════════════════════════════════════════════════════

WORKFLOW 1: New Client Website
1. Run script: sudo ./multi-domain-setup.sh
2. Choose option 3 (Quick Add)
3. Enter: clientdomain.com, your@email.com
4. Wait for completion
5. Upload client files: scp -r site/* user@server:/var/www/clientdomain.com/
6. Test: https://clientdomain.com

WORKFLOW 2: Multiple Sites at Once
1. Create domains.csv with all domains
2. Run: sudo ./multi-domain-setup.sh --file domains.csv
3. Wait for batch processing
4. Upload files to each /var/www/DOMAIN/
5. Done!

WORKFLOW 3: Adding Subdomain
1. Run script
2. Add subdomain like regular domain: blog.example.com
3. Script treats it as separate site
4. Upload blog files to /var/www/blog.example.com/

═══════════════════════════════════════════════════════════════════════════
❓ FAQ
═══════════════════════════════════════════════════════════════════════════

Q: Can I use this with Nginx instead of Apache?
A: This script is Apache-specific. Nginx version coming soon!

Q: Will this work on existing server with domains?
A: Yes! Script checks for existing domains and asks before overwriting.

Q: Can I add more domains later?
A: Absolutely! Run the script anytime to add more domains.

Q: What if DNS isn't ready?
A: Script skips SSL and shows command to install it later.

Q: Can I use wildcard SSL?
A: No, Let's Encrypt provides individual certificates per domain.

Q: How many domains can I add?
A: No hard limit. Depends on server resources and traffic.

Q: Does this work with WordPress/Laravel/etc?
A: Yes! Works with any PHP application or static sites.

Q: Can I customize the virtual host template?
A: Yes! Edit the create_virtual_host function in the script.

Q: What about email (MX records)?
A: This handles web hosting only. Configure email separately.

Q: Is this production-ready?
A: Yes! Includes all best practices and security measures.

═══════════════════════════════════════════════════════════════════════════

🎉 You're all set! Run the script and start adding domains! 🎉

═══════════════════════════════════════════════════════════════════════════
