#!/bin/bash # Caddy Reverse Proxy Installation Script for LXC Container on Proxmox # Based on instructions from greenhome.stream documentation # Author: Assistant # Version: 1.3 - Added checks for existing GPG key and repository # Color codes for output RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' CYAN='\033[0;36m' # Changed from BLUE to CYAN for better readability YELLOW='\033[1;33m' # For skip messages NC='\033[0m' # No Color # Function to display colored messages print_message() { local color=$1 local message=$2 echo -e "${color}${message}${NC}" } # Function to display step status print_step() { local step_num=$1 local description=$2 print_message $ORANGE "Βήμα ${step_num}: ${description}..." sleep 2 } # Function to display success message print_success() { local message=$1 print_message $GREEN "✓ ${message} - Επιτυχής ολοκλήρωση!" sleep 2 } # Function to display skip message print_skip() { local message=$1 print_message $YELLOW "⚠ ${message} - Παράλειψη βήματος!" sleep 2 } # Function to display error message and exit print_error() { local message=$1 print_message $RED "✗ Σφάλμα: ${message}" exit 1 } # Function to check if command was successful check_command() { if [ $? -eq 0 ]; then print_success "$1" else print_error "$1 απέτυχε" fi } # Clear screen and show header clear print_message $CYAN "======================================" print_message $CYAN "Caddy Reverse Proxy Installation Script" print_message $CYAN "LXC Container on Proxmox" print_message $CYAN "======================================" echo sleep 2 # Step 1: Update package repositories print_step "1" "Ενημέρωση αποθετηρίων πακέτων" apt update check_command "Ενημέρωση αποθετηρίων" # Step 2: Upgrade existing packages print_step "2" "Αναβάθμιση υπαρχόντων πακέτων" apt upgrade -y check_command "Αναβάθμιση πακέτων" # Step 3: Install required dependencies print_step "3" "Εγκατάσταση απαραίτητων εξαρτήσεων" apt install -y debian-keyring debian-archive-keyring curl check_command "Εγκατάσταση εξαρτήσεων" # Step 4: Check if Caddy GPG key already exists, then add if needed print_step "4" "Έλεγχος και προσθήκη επίσημου GPG κλειδιού του Caddy" GPG_KEY_PATH="/usr/share/keyrings/caddy-archive-keyring.gpg" if [ -f "$GPG_KEY_PATH" ]; then print_skip "Το GPG κλειδί του Caddy υπάρχει ήδη στο σύστημα" else print_message $ORANGE "Προσθήκη νέου GPG κλειδιού του Caddy..." curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-archive-keyring.gpg check_command "Προσθήκη GPG κλειδιού" fi # Step 5: Check if Caddy repository already exists, then add if needed print_step "5" "Έλεγχος και προσθήκη αποθετηρίου Caddy" REPO_FILE="/etc/apt/sources.list.d/caddy-stable.list" if [ -f "$REPO_FILE" ]; then print_skip "Το αποθετήριο Caddy υπάρχει ήδη στο σύστημα" else print_message $ORANGE "Προσθήκη νέου αποθετηρίου Caddy..." curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | \ tee /etc/apt/sources.list.d/caddy-stable.list check_command "Προσθήκη αποθετηρίου" fi # Step 6: Update package repositories with new Caddy repo print_step "6" "Ενημέρωση αποθετηρίων με το νέο αποθετήριο Caddy" apt update check_command "Ενημέρωση αποθετηρίων" # Step 7: Install Caddy print_step "7" "Εγκατάσταση Caddy" apt install -y caddy check_command "Εγκατάσταση Caddy" # Step 8: Enable Caddy service print_step "8" "Ενεργοποίηση υπηρεσίας Caddy" systemctl enable caddy check_command "Ενεργοποίηση υπηρεσίας" # Step 9: Start Caddy service print_step "9" "Εκκίνηση υπηρεσίας Caddy" systemctl start caddy check_command "Εκκίνηση υπηρεσίας" # Step 10: Check Caddy service status print_step "10" "Έλεγχος κατάστασης υπηρεσίας Caddy" if systemctl is-active --quiet caddy; then print_success "Η υπηρεσία Caddy τρέχει κανονικά" else print_error "Η υπηρεσία Caddy δεν τρέχει" fi # Step 11: Create basic Caddyfile configuration print_step "11" "Δημιουργία βασικού αρχείου διαμόρφωσης Caddyfile" cat > /etc/caddy/Caddyfile << 'EOF' # The Caddyfile is an easy way to configure your Caddy web server. # # Unless the file starts with a global options block, the first # uncommented line is always the address of your site. # # To use your own domain name (with automatic HTTPS), first make # sure your domain's A/AAAA DNS records are properly pointed to # this machine's public IP, then replace ":80" below with your # domain name. :80 { # Set this path to your site's directory. root * /usr/share/caddy # Enable the static file server. file_server # Another common task is to set up a reverse proxy: # reverse_proxy localhost:8080 # Or serve a PHP site through php-fpm: # php_fastcgi localhost:9000 } # Refer to the Caddy docs for more information: # https://caddyserver.com/docs/caddyfile EOF check_command "Δημιουργία Caddyfile" # Step 12: Set proper permissions for Caddyfile print_step "12" "Ρύθμιση δικαιωμάτων για το Caddyfile" chown root:root /etc/caddy/Caddyfile chmod 644 /etc/caddy/Caddyfile check_command "Ρύθμιση δικαιωμάτων" # Step 13: Test Caddy configuration print_step "13" "Έλεγχος διαμόρφωσης Caddy" caddy validate --config /etc/caddy/Caddyfile check_command "Έλεγχος διαμόρφωσης" # Step 14: Reload Caddy with new configuration print_step "14" "Επαναφόρτωση Caddy με νέα διαμόρφωση" systemctl reload caddy check_command "Επαναφόρτωση Caddy" # Step 15: Display Caddy version print_step "15" "Εμφάνιση έκδοσης Caddy" caddy version check_command "Εμφάνιση έκδοσης" # Step 16: Display service status print_step "16" "Εμφάνιση κατάστασης υπηρεσίας" systemctl status caddy --no-pager -l check_command "Εμφάνιση κατάστασης" # Final success message echo print_message $GREEN "======================================" print_message $GREEN "Η εγκατάσταση του Caddy ολοκληρώθηκε επιτυχώς!" print_message $GREEN "======================================" echo print_message $CYAN "Σημαντικές πληροφορίες:" print_message $CYAN "• Αρχείο διαμόρφωσης: /etc/caddy/Caddyfile" print_message $CYAN "• Εντολή επαναφόρτωσης: systemctl reload caddy" print_message $CYAN "• Εντολή επανεκκίνησης: systemctl restart caddy" print_message $CYAN "• Logs: journalctl -u caddy" print_message $CYAN "• Το Caddy τρέχει στην πόρτα 80 (HTTP)" echo print_message $ORANGE "Για να διαμορφώσετε reverse proxy:" print_message $ORANGE "1. Επεξεργαστείτε το /etc/caddy/Caddyfile" print_message $ORANGE "2. Προσθέστε την διαμόρφωση reverse_proxy" print_message $ORANGE "3. Εκτελέστε: systemctl reload caddy" echo print_message $GREEN "Το σύστημα είναι έτοιμο για χρήση!"