#!/usr/bin/env bash # ============================================================================== # TheCr3w-dev — Master Production Deployment Script # System: Ubuntu 24.04 LTS (Netcup VPS) # ============================================================================== set -eo pipefail 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 — INSTALACJA, BUDOWANIE I WDROŻENIE PLATFORMY ${NC}" echo -e "${BLUE}==============================================================================${NC}" # 1. Sprawdzenie uprawnień if [ "$EUID" -ne 0 ] && ! groups | grep -q '\bdocker\b'; then echo -e "${RED}[BŁĄD] Skrypt musi być uruchomiony z uprawnieniami roota lub użytkownika w grupie docker.${NC}" exit 1 fi # 2. Sprawdzenie Docker i Docker Compose echo -e "\n${YELLOW}[1/6] Weryfikacja środowiska Docker...${NC}" if ! command -v docker &>/dev/null; then echo -e "${RED}[BŁĄD] Docker nie jest zainstalowany na serwerze!${NC}" exit 1 fi echo -e " Docker: $(docker --version)" if ! docker compose version &>/dev/null; then echo -e "${RED}[BŁĄD] Docker Compose plugin v2 nie jest dostępny!${NC}" exit 1 fi echo -e " Compose: $(docker compose version)" # 3. Sprawdzenie zewnętrznej sieci 'proxy' (Caddy) echo -e "\n${YELLOW}[2/6] Weryfikacja sieci Docker 'proxy' (Caddy)...${NC}" if docker network inspect proxy &>/dev/null; then echo -e " ${GREEN}✓ Sieć 'proxy' istnieje.${NC}" else echo -e " Tworzenie sieci 'proxy' dla integracji z Caddy..." docker network create proxy echo -e " ${GREEN}✓ Utworzono sieć 'proxy'.${NC}" fi # 4. Konfiguracja pliku .env echo -e "\n${YELLOW}[3/6] Konfiguracja zmiennych środowiskowych (.env)...${NC}" if [ ! -f ".env" ]; then echo -e " Kopiowanie .env.example do .env..." cp .env.example .env fi # Automatyczne wygenerowanie bezpiecznego hasła bazy danych jeśli brak CURRENT_DB_PASS=$(grep -E '^POSTGRES_PASSWORD=' .env | cut -d'=' -f2- || true) if [ -z "$CURRENT_DB_PASS" ]; then NEW_DB_PASS=$(openssl rand -hex 24) if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$NEW_DB_PASS/" .env else sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$NEW_DB_PASS/" .env fi echo -e " ${GREEN}✓ Wygenerowano silne, losowe hasło PostgreSQL.${NC}" fi # 5. Budowanie obrazów Docker echo -e "\n${YELLOW}[4/6] Budowanie obrazów kontenerów platformy TheCr3w-dev...${NC}" echo -e " Budowanie backendu .NET 10, Download Center oraz Admin Panelu..." docker compose build --parallel echo -e " ${GREEN}✓ Wszystkie obrazy zostały pomyślnie zbudowane lokalnie.${NC}" # 6. Uruchomienie usług echo -e "\n${YELLOW}[5/6] Uruchamianie bazy PostgreSQL i inicjalizacja schematu...${NC}" docker compose up -d thecr3w-postgres echo -e " Oczekiwanie na gotowość bazy PostgreSQL..." until docker exec thecr3w-postgres pg_isready -U thecr3w_user -d thecr3w_db &>/dev/null; do sleep 2 echo -n "." done echo -e "\n ${GREEN}✓ Baza PostgreSQL gotowa i zainicjalizowana.${NC}" echo -e "\n Uruchamianie usług aplikacyjnych (Backend, Download Center, Admin Panel)..." docker compose up -d # 7. Weryfikacja działania kontenerów echo -e "\n${YELLOW}[6/6] Sprawdzanie stanu uruchomionych usług...${NC}" sleep 5 docker ps --filter "name=thecr3w" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # Test lokalnego healthcheck backendu echo -e "\n Weryfikacja healthcheck Native Update API..." if docker exec thecr3w-backend wget -qO- http://localhost:5000/health | grep -q "Healthy"; then echo -e " ${GREEN}✓ Native Update API działa prawidłowo (Status: Healthy).${NC}" else echo -e " ${YELLOW}Oczekiwanie na pełną inicjalizację API...${NC}" fi echo -e "\n${GREEN}==============================================================================${NC}" echo -e "${GREEN} WDROŻENIE KONTENERÓW THECR3W-DEV ZAKOŃCZONE SUKCESEM! ${NC}" echo -e "${GREEN}==============================================================================${NC}" echo -e "\nNastępny krok: Aktualizacja reverse proxy Caddy." echo -e "Uruchom dedykowany skrypt aktualizacji Caddyfile:" echo -e " ${BLUE}sudo ./scripts/update_caddy.sh${NC}" echo -e "lub ręcznie dopisz bloki domenowe zgodnie z docs/DEPLOYMENT.md."