diff --git a/manage_vhosts.sh b/manage_vhosts.sh new file mode 100644 index 0000000..0d25fec --- /dev/null +++ b/manage_vhosts.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# Check for root privileges +if [[ $EUID -ne 0 ]]; then + echo "This script must be run as root (use sudo)" + exit 1 +fi + +create_vhost() { + echo "" + read -p "Enter the domain name to CREATE (e.g., example.com): " DOMAIN + + if [[ -z "$DOMAIN" ]]; then + echo "Domain cannot be empty." + return + fi + + # Debian/Ubuntu conventions use www-data as the web user + SITE_DIR="/var/www/$DOMAIN/public_html" + CONF_FILE="/etc/apache2/sites-available/$DOMAIN.conf" + + if [ -f "$CONF_FILE" ]; then + echo "Warning: A virtual host for $DOMAIN already exists!" + return + fi + + echo "Creating Virtual Host directories for $DOMAIN..." + mkdir -p "$SITE_DIR" + + # Create a basic index.html for testing + echo "$DOMAIN

Success! $DOMAIN is live on Debian-based Linux.

" > "$SITE_DIR/index.html" + + # Set Permissions (Debian uses www-data user/group) + chown -R www-data:www-data "/var/www/$DOMAIN" + + # Create the Apache Configuration File + cat < "$CONF_FILE" + + ServerName $DOMAIN + ServerAlias www.$DOMAIN + DocumentRoot $SITE_DIR + + ErrorLog \${APACHE_LOG_DIR}/$DOMAIN-error.log + CustomLog \${APACHE_LOG_DIR}/$DOMAIN-access.log combined + + + AllowOverride All + Require all granted + + +EOF + + # Enable the site using Debian's native tool + echo "Enabling site configuration..." + a2ensite "$DOMAIN.conf" > /dev/null + + # Test and Reload Apache + echo "Testing Apache configuration..." + apache2ctl configtest + + if [ $? -eq 0 ]; then + systemctl reload apache2 + echo "----------------------------------------------------" + echo "Virtual Host Created Successfully!" + echo "Site Root: $SITE_DIR" + echo "Config File: $CONF_FILE" + echo "----------------------------------------------------" + else + echo "Configuration error detected. Rolling back changes..." + a2dissite "$DOMAIN.conf" > /dev/null + rm -f "$CONF_FILE" + fi +} + +delete_vhost() { + echo "" + read -p "Enter the domain name to DELETE (e.g., example.com): " DOMAIN + + if [[ -z "$DOMAIN" ]]; then + echo "Domain cannot be empty." + return + fi + + SITE_DIR="/var/www/$DOMAIN" + CONF_FILE="/etc/apache2/sites-available/$DOMAIN.conf" + + if [ ! -f "$CONF_FILE" ] && [ ! -d "$SITE_DIR" ]; then + echo "Error: No Virtual Host or directory configuration found for $DOMAIN." + return + fi + + echo "CRITICAL WARNING: This will permanently delete:" + echo " - Configuration: $CONF_FILE" + echo " - All web files in: $SITE_DIR" + read -p "Are you absolutely sure you want to proceed? (y/n): " CONFIRM + + if [[ "$CONFIRM" =~ ^[yY]([eE][sS])?$ ]]; then + echo "Disabling site and removing configurations..." + # Disable the site first so Apache stops looking for it + a2dissite "$DOMAIN.conf" > /dev/null 2>&1 + + rm -f "$CONF_FILE" + rm -rf "$SITE_DIR" + + echo "Testing configuration and reloading Apache..." + apache2ctl configtest && systemctl reload apache2 + echo "----------------------------------------------------" + echo "Virtual Host $DOMAIN has been completely removed." + echo "----------------------------------------------------" + else + echo "Deletion canceled." + fi +} + +# --- Main Menu Loop --- +while true; do + echo "" + echo "=================================" + echo " Debian Apache Site Manager " + echo "=================================" + echo "1) Create a New Virtual Host" + echo "2) Delete an Existing Virtual Host" + echo "3) Exit" + echo "=================================" + read -p "Choose an option (1-3): " MENU_CHOICE + + case "$MENU_CHOICE" in + 1) + create_vhost + ;; + 2) + delete_vhost + ;; + 3) + echo "Exiting Site Manager. Goodbye!" + break + ;; + *) + echo "Invalid choice. Please select 1, 2, or 3." + ;; + esac +done \ No newline at end of file