thecr3w-dev/scripts/update_caddy.sh
2026-10-31 16:38:36 +01:00

92 lines
3.6 KiB
Bash

#!/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}
}
}
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}"