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

111 lines
4.4 KiB
Bash

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