#!/usr/bin/env bash # ============================================================================== # TheCr3w-dev — Bezpieczny skrypt aktualizacji Caddyfile # Lokalizacja Caddyfile: /opt/proxy/Caddyfile # Kontener: caddy # ============================================================================== set -eo pipefail CADDYFILE="/opt/proxy/Caddyfile" CADDY_CONTAINER="caddy" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="/opt/proxy/Caddyfile.bak_${TIMESTAMP}" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' echo -e "${BLUE}==============================================================================${NC}" echo -e "${BLUE} THECR3W-DEV — BEZPIECZNA AKTUALIZACJA REVERSE PROXY CADDY ${NC}" echo -e "${BLUE}==============================================================================${NC}" # 1. Sprawdzenie uprawnień if [ "$EUID" -ne 0 ]; then echo -e "${RED}[BŁĄD] Skrypt wymaga uprawnień roota (sudo).${NC}" exit 1 fi # 2. Sprawdzenie obecności pliku if [ ! -f "$CADDYFILE" ]; then echo -e "${RED}[BŁĄD] Plik $CADDYFILE nie istnieje!${NC}" exit 1 fi # 3. Kopia zapasowa echo -e "\n${YELLOW}[1/4] Tworzenie kopii zapasowej Caddyfile...${NC}" cp "$CADDYFILE" "$BACKUP_FILE" echo -e " ${GREEN}✓ Kopia zapasowa zapisana w: $BACKUP_FILE${NC}" # 4. Sprawdzenie czy domeny są już skonfigurowane echo -e "\n${YELLOW}[2/4] Weryfikacja istniejących wpisów domenowych...${NC}" if grep -q "app.thecr3wnet.com" "$CADDYFILE"; then echo -e " ${YELLOW}Uwaga: app.thecr3wnet.com jest już zdefiniowana w Caddyfile.${NC}" else echo -e " Dopisywanie reguł dla app.thecr3wnet.com i download.thecr3wnet.com..." cat << 'EOF' >> "$CADDYFILE" # ------------------------------------------------------------------------------ # TheCr3w-dev Ecosystem Services # ------------------------------------------------------------------------------ app.thecr3wnet.com { reverse_proxy thecr3w-backend:5000 { header_up X-Forwarded-Proto {scheme} header_up X-Real-IP {remote_host} } } download.thecr3wnet.com { reverse_proxy thecr3w-download-center:80 { header_up X-Forwarded-Proto {scheme} header_up X-Real-IP {remote_host} } } git.thecr3wnet.com { reverse_proxy forgejo:3000 { header_up X-Forwarded-Proto {scheme} header_up X-Real-IP {remote_host} } } EOF echo -e " ${GREEN}✓ Dopisek dodany pomyślnie.${NC}" fi # 5. Walidacja składni w kontenerze Caddy echo -e "\n${YELLOW}[3/4] Walidacja składni wewnątrz kontenera Caddy...${NC}" if docker exec "$CADDY_CONTAINER" caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile; then echo -e " ${GREEN}✓ Składnia Caddyfile jest w 100% poprawna!${NC}" else echo -e "${RED}[BŁĄD] Błąd walidacji składni! Przywracanie kopii zapasowej...${NC}" cp "$BACKUP_FILE" "$CADDYFILE" echo -e " Przywrócono oryginalny plik z kopii: $BACKUP_FILE" exit 1 fi # 6. Przeładowanie Caddy bez przestojów echo -e "\n${YELLOW}[4/4] Przeładowanie Caddy (Zero-Downtime Reload)...${NC}" docker exec "$CADDY_CONTAINER" caddy reload --config /etc/caddy/Caddyfile echo -e " ${GREEN}✓ Caddy pomyślnie przeładowany bez przestojów!${NC}" echo -e "\n${GREEN}==============================================================================${NC}" echo -e "${GREEN} KONFIGURACJA DOMEN ZAKOŃCZONA SUKCESEM! ${NC}" echo -e "${GREEN} Domeny aktywne: ${NC}" echo -e "${GREEN} - https://app.thecr3wnet.com (Native Update API) ${NC}" echo -e "${GREEN} - https://download.thecr3wnet.com (The Cr3w Download Center) ${NC}" echo -e "${GREEN}==============================================================================${NC}"