diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9757f25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Backups +backups/ +*.tar.gz +*.zip + +# Logs +*.log + +# Temporary +*.tmp +*.temp +.DS_Store + +# Credentials (jeśli będziesz trzymać secrets lokalnie) +secrets.yaml +known_devices.yaml +.uuid +.storage/ +.cloud/ + +# IDE +.vscode/ +.idea/ +*.swp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9757f25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Backups +backups/ +*.tar.gz +*.zip + +# Logs +*.log + +# Temporary +*.tmp +*.temp +.DS_Store + +# Credentials (jeśli będziesz trzymać secrets lokalnie) +secrets.yaml +known_devices.yaml +.uuid +.storage/ +.cloud/ + +# IDE +.vscode/ +.idea/ +*.swp diff --git a/README.md b/README.md new file mode 100644 index 0000000..b68ff83 --- /dev/null +++ b/README.md @@ -0,0 +1,257 @@ +# Home Assistant - Test/Prod Infrastructure + +Automatyczne zarządzanie środowiskami Home Assistant na Proxmox z wykorzystaniem Infrastructure as Code. + +## 📋 Architektura + +``` +Proxmox 192.168.50.200 +├── VM 210: homeassistant-test (192.168.50.210) +│ └── Home Assistant OS 13.2 +└── VM 211: homeassistant-prod (192.168.50.211) + └── Home Assistant OS 13.2 +``` + +## 🚀 Szybki start + +### 1. Utworzenie środowiska TEST + +```bash +cd ~/homeassistant-infra +chmod +x scripts/*.sh +./scripts/create-ha-vm.sh test +``` + +Pierwsze uruchomienie zajmie ~10-15 minut. Sprawdź status: + +```bash +watch -n 5 'curl -s http://192.168.50.210:8123 && echo " - HA Ready!" || echo " - Czekam..."' +``` + +### 2. Konfiguracja początkowa Home Assistant + +1. Otwórz: http://192.168.50.210:8123 +2. Przejdź przez wizard (użytkownik, lokalizacja, integracje) +3. **Ważne**: Włącz SSH access + - Supervisor → System → Join → "Advanced Mode" + - Settings → Add-ons → Terminal & SSH + - Zainstaluj i uruchom + - Configuration → Ustaw hasło: `QWer!@34` + +### 3. Testowanie i developement + +Pracuj na środowisku TEST: +- Dodawaj integracje +- Twórz automatyzacje +- Testuj scenariusze +- Modyfikuj konfigurację + +### 4. Utworzenie środowiska PROD + +```bash +./scripts/create-ha-vm.sh prod +``` + +Powtórz konfigurację początkową jak dla TEST. + +### 5. Synchronizacja TEST → PROD + +Gdy zmiany w TEST są gotowe: + +```bash +./scripts/sync-test-to-prod.sh +``` + +Skrypt: +- Utworzy backup PROD +- Skopiuje konfigurację z TEST do PROD +- Zrestartuje PROD + +## 🔧 Zarządzanie + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego środowiska: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +Backupy są zapisywane w `./backups/` + +### Restore + +```bash +./scripts/restore-backup.sh ./backups/prod_config_20260203_220000.tar.gz prod +``` + +### Zarządzanie VM + +#### Status VM +```bash +ssh root@192.168.50.200 "qm status 210" # TEST +ssh root@192.168.50.200 "qm status 211" # PROD +``` + +#### Stop/Start VM +```bash +ssh root@192.168.50.200 "qm stop 210" +ssh root@192.168.50.200 "qm start 210" +``` + +#### Restart +```bash +ssh root@192.168.50.200 "qm reboot 210" +``` + +#### Logi konsoli +```bash +ssh root@192.168.50.200 "qm terminal 210" +``` + +## 📂 Struktura projektu + +``` +homeassistant-infra/ +├── scripts/ +│ ├── create-ha-vm.sh # Tworzenie VM +│ ├── sync-test-to-prod.sh # Synchronizacja środowisk +│ ├── backup-ha.sh # Backup +│ └── restore-backup.sh # Restore +├── backups/ # Backupy konfiguracji +├── docs/ # Dokumentacja +└── README.md # Ten plik +``` + +## 🔄 Workflow codziennej pracy + +```mermaid +graph LR + A[Zmiana w TEST] --> B[Testowanie] + B --> C{Działa?} + C -->|Nie| A + C -->|Tak| D[git commit] + D --> E[git push] + E --> F[sync-test-to-prod.sh] + F --> G[Produkcja gotowa] +``` + +1. **Edycja w TEST** - pracuj na http://192.168.50.210:8123 +2. **Testowanie** - upewnij się że wszystko działa +3. **Commit do Git** (opcjonalnie): + ```bash + git add . + git commit -m "Dodano automatyzację X" + git push origin master + ``` +4. **Deploy na PROD**: + ```bash + ./scripts/sync-test-to-prod.sh + ``` + +## 🔐 Dane dostępowe + +| Środowisko | IP | URL | SSH | +|------------|------------|--------------------------|-----| +| Proxmox | 192.168.50.200 | https://192.168.50.200:8006 | root / QWer!@34 | +| HA Test | 192.168.50.210 | http://192.168.50.210:8123 | root / QWer!@34 | +| HA Prod | 192.168.50.211 | http://192.168.50.211:8123 | root / QWer!@34 | +| GitBucket | 192.168.50.101 | http://192.168.50.101:8080 | root / root | + +## 📦 Zasoby VM + +| Środowisko | CPU | RAM | Dysk | +|------------|-----|-----|------| +| TEST | 2 cores | 4 GB | 32 GB | +| PROD | 4 cores | 6 GB | 64 GB | + +## 🔗 Integracja z Git + +### Dodanie repozytorium do GitBucket + +```bash +cd ~/homeassistant-infra +git remote add origin http://192.168.50.101:8080/git/root/homeassistant-infra.git +git push -u origin master +``` + +### Codzienne użycie + +```bash +# Przed zmianami +git pull + +# Po zmianach +git add . +git commit -m "Opis zmian" +git push +``` + +## 🆘 Troubleshooting + +### VM nie startuje +```bash +ssh root@192.168.50.200 "qm list" +ssh root@192.168.50.200 "tail -100 /var/log/syslog | grep qm" +``` + +### Home Assistant nie odpowiada +```bash +# Sprawdź logi VM +ssh root@192.168.50.210 "ha core logs" + +# Restart HA +ssh root@192.168.50.210 "ha core restart" + +# Restart całej VM +ssh root@192.168.50.200 "qm reboot 210" +``` + +### Synchronizacja się nie powiodła +```bash +# Przywróć backup +./scripts/restore-backup.sh ./backups/prod_backup_XXX.tar.gz prod +``` + +### Brak dostępu SSH do HA +- Zaloguj się przez webUI +- Supervisor → Terminal & SSH +- Sprawdź czy addon jest uruchomiony +- Sprawdź konfigurację hasła + +## 📚 Kolejne kroki + +1. **Automatyzacja backupów** - cron job: + ```bash + 0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all + ``` + +2. **Monitoring** - dodaj sprawdzanie dostępności HA + +3. **CI/CD** - GitBucket webhooks → auto-deploy + +4. **Rozbudowa** - dodaj staging environment + +## 📖 Dokumentacja Home Assistant + +- [Official Docs](https://www.home-assistant.io/docs/) +- [Community Forum](https://community.home-assistant.io/) +- [Integrations](https://www.home-assistant.io/integrations/) + +## 🤝 Wsparcie + +W razie problemów: +1. Sprawdź logi +2. Przywróć backup +3. Skontaktuj się z administratorem + +--- + +**Autor**: Generated by GitHub Copilot CLI +**Data**: 2026-02-03 +**Wersja**: 1.0 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9757f25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Backups +backups/ +*.tar.gz +*.zip + +# Logs +*.log + +# Temporary +*.tmp +*.temp +.DS_Store + +# Credentials (jeśli będziesz trzymać secrets lokalnie) +secrets.yaml +known_devices.yaml +.uuid +.storage/ +.cloud/ + +# IDE +.vscode/ +.idea/ +*.swp diff --git a/README.md b/README.md new file mode 100644 index 0000000..b68ff83 --- /dev/null +++ b/README.md @@ -0,0 +1,257 @@ +# Home Assistant - Test/Prod Infrastructure + +Automatyczne zarządzanie środowiskami Home Assistant na Proxmox z wykorzystaniem Infrastructure as Code. + +## 📋 Architektura + +``` +Proxmox 192.168.50.200 +├── VM 210: homeassistant-test (192.168.50.210) +│ └── Home Assistant OS 13.2 +└── VM 211: homeassistant-prod (192.168.50.211) + └── Home Assistant OS 13.2 +``` + +## 🚀 Szybki start + +### 1. Utworzenie środowiska TEST + +```bash +cd ~/homeassistant-infra +chmod +x scripts/*.sh +./scripts/create-ha-vm.sh test +``` + +Pierwsze uruchomienie zajmie ~10-15 minut. Sprawdź status: + +```bash +watch -n 5 'curl -s http://192.168.50.210:8123 && echo " - HA Ready!" || echo " - Czekam..."' +``` + +### 2. Konfiguracja początkowa Home Assistant + +1. Otwórz: http://192.168.50.210:8123 +2. Przejdź przez wizard (użytkownik, lokalizacja, integracje) +3. **Ważne**: Włącz SSH access + - Supervisor → System → Join → "Advanced Mode" + - Settings → Add-ons → Terminal & SSH + - Zainstaluj i uruchom + - Configuration → Ustaw hasło: `QWer!@34` + +### 3. Testowanie i developement + +Pracuj na środowisku TEST: +- Dodawaj integracje +- Twórz automatyzacje +- Testuj scenariusze +- Modyfikuj konfigurację + +### 4. Utworzenie środowiska PROD + +```bash +./scripts/create-ha-vm.sh prod +``` + +Powtórz konfigurację początkową jak dla TEST. + +### 5. Synchronizacja TEST → PROD + +Gdy zmiany w TEST są gotowe: + +```bash +./scripts/sync-test-to-prod.sh +``` + +Skrypt: +- Utworzy backup PROD +- Skopiuje konfigurację z TEST do PROD +- Zrestartuje PROD + +## 🔧 Zarządzanie + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego środowiska: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +Backupy są zapisywane w `./backups/` + +### Restore + +```bash +./scripts/restore-backup.sh ./backups/prod_config_20260203_220000.tar.gz prod +``` + +### Zarządzanie VM + +#### Status VM +```bash +ssh root@192.168.50.200 "qm status 210" # TEST +ssh root@192.168.50.200 "qm status 211" # PROD +``` + +#### Stop/Start VM +```bash +ssh root@192.168.50.200 "qm stop 210" +ssh root@192.168.50.200 "qm start 210" +``` + +#### Restart +```bash +ssh root@192.168.50.200 "qm reboot 210" +``` + +#### Logi konsoli +```bash +ssh root@192.168.50.200 "qm terminal 210" +``` + +## 📂 Struktura projektu + +``` +homeassistant-infra/ +├── scripts/ +│ ├── create-ha-vm.sh # Tworzenie VM +│ ├── sync-test-to-prod.sh # Synchronizacja środowisk +│ ├── backup-ha.sh # Backup +│ └── restore-backup.sh # Restore +├── backups/ # Backupy konfiguracji +├── docs/ # Dokumentacja +└── README.md # Ten plik +``` + +## 🔄 Workflow codziennej pracy + +```mermaid +graph LR + A[Zmiana w TEST] --> B[Testowanie] + B --> C{Działa?} + C -->|Nie| A + C -->|Tak| D[git commit] + D --> E[git push] + E --> F[sync-test-to-prod.sh] + F --> G[Produkcja gotowa] +``` + +1. **Edycja w TEST** - pracuj na http://192.168.50.210:8123 +2. **Testowanie** - upewnij się że wszystko działa +3. **Commit do Git** (opcjonalnie): + ```bash + git add . + git commit -m "Dodano automatyzację X" + git push origin master + ``` +4. **Deploy na PROD**: + ```bash + ./scripts/sync-test-to-prod.sh + ``` + +## 🔐 Dane dostępowe + +| Środowisko | IP | URL | SSH | +|------------|------------|--------------------------|-----| +| Proxmox | 192.168.50.200 | https://192.168.50.200:8006 | root / QWer!@34 | +| HA Test | 192.168.50.210 | http://192.168.50.210:8123 | root / QWer!@34 | +| HA Prod | 192.168.50.211 | http://192.168.50.211:8123 | root / QWer!@34 | +| GitBucket | 192.168.50.101 | http://192.168.50.101:8080 | root / root | + +## 📦 Zasoby VM + +| Środowisko | CPU | RAM | Dysk | +|------------|-----|-----|------| +| TEST | 2 cores | 4 GB | 32 GB | +| PROD | 4 cores | 6 GB | 64 GB | + +## 🔗 Integracja z Git + +### Dodanie repozytorium do GitBucket + +```bash +cd ~/homeassistant-infra +git remote add origin http://192.168.50.101:8080/git/root/homeassistant-infra.git +git push -u origin master +``` + +### Codzienne użycie + +```bash +# Przed zmianami +git pull + +# Po zmianach +git add . +git commit -m "Opis zmian" +git push +``` + +## 🆘 Troubleshooting + +### VM nie startuje +```bash +ssh root@192.168.50.200 "qm list" +ssh root@192.168.50.200 "tail -100 /var/log/syslog | grep qm" +``` + +### Home Assistant nie odpowiada +```bash +# Sprawdź logi VM +ssh root@192.168.50.210 "ha core logs" + +# Restart HA +ssh root@192.168.50.210 "ha core restart" + +# Restart całej VM +ssh root@192.168.50.200 "qm reboot 210" +``` + +### Synchronizacja się nie powiodła +```bash +# Przywróć backup +./scripts/restore-backup.sh ./backups/prod_backup_XXX.tar.gz prod +``` + +### Brak dostępu SSH do HA +- Zaloguj się przez webUI +- Supervisor → Terminal & SSH +- Sprawdź czy addon jest uruchomiony +- Sprawdź konfigurację hasła + +## 📚 Kolejne kroki + +1. **Automatyzacja backupów** - cron job: + ```bash + 0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all + ``` + +2. **Monitoring** - dodaj sprawdzanie dostępności HA + +3. **CI/CD** - GitBucket webhooks → auto-deploy + +4. **Rozbudowa** - dodaj staging environment + +## 📖 Dokumentacja Home Assistant + +- [Official Docs](https://www.home-assistant.io/docs/) +- [Community Forum](https://community.home-assistant.io/) +- [Integrations](https://www.home-assistant.io/integrations/) + +## 🤝 Wsparcie + +W razie problemów: +1. Sprawdź logi +2. Przywróć backup +3. Skontaktuj się z administratorem + +--- + +**Autor**: Generated by GitHub Copilot CLI +**Data**: 2026-02-03 +**Wersja**: 1.0 diff --git a/scripts/backup-ha.sh b/scripts/backup-ha.sh new file mode 100755 index 0000000..c050808 --- /dev/null +++ b/scripts/backup-ha.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# +# Skrypt do backupu Home Assistant +# Użycie: ./backup-ha.sh [test|prod|all] +# + +set -e + +ENVIRONMENT="${1:-all}" +BACKUP_DIR="./backups" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) + +mkdir -p "$BACKUP_DIR" + +# Funkcja do backupu pojedynczego środowiska +backup_environment() { + local env=$1 + local ip=$2 + local name=$3 + + echo "📦 Backup $name ($ip)..." + + # Backup konfiguracji HA + local backup_file="$BACKUP_DIR/${env}_config_${TIMESTAMP}.tar.gz" + if sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "test -d /root/config" 2>/dev/null; then + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "cd /root && tar czf - config/" > "$backup_file" + echo "✅ Config: $backup_file ($(du -h $backup_file | cut -f1))" + else + echo "⚠️ Brak dostępu do $name" + return 1 + fi + + # Snapshot VM (opcjonalnie - wymaga API Proxmox) + echo " 💾 Tworzenie snapshot VM..." + local vmid + if [ "$env" = "test" ]; then + vmid=210 + else + vmid=211 + fi + + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@192.168.50.200 \ + "qm snapshot $vmid backup_${TIMESTAMP} --description 'Auto backup ${TIMESTAMP}'" 2>/dev/null || echo " ⚠️ Nie można utworzyć snapshot VM" + + echo "" +} + +echo "======================================" +echo "💾 Backup Home Assistant" +echo "======================================" +echo "Data: $(date)" +echo "======================================" +echo "" + +if [ "$ENVIRONMENT" = "test" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "test" "192.168.50.210" "TEST" +fi + +if [ "$ENVIRONMENT" = "prod" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "prod" "192.168.50.211" "PROD" +fi + +echo "======================================" +echo "✅ Backup zakończony" +echo "======================================" +echo "Lokalizacja: $BACKUP_DIR" +echo "" +ls -lh "$BACKUP_DIR" | tail -10 +echo "" +echo "💡 Przywracanie backupu:" +echo " ./restore-backup.sh [test|prod]" +echo "======================================" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9757f25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Backups +backups/ +*.tar.gz +*.zip + +# Logs +*.log + +# Temporary +*.tmp +*.temp +.DS_Store + +# Credentials (jeśli będziesz trzymać secrets lokalnie) +secrets.yaml +known_devices.yaml +.uuid +.storage/ +.cloud/ + +# IDE +.vscode/ +.idea/ +*.swp diff --git a/README.md b/README.md new file mode 100644 index 0000000..b68ff83 --- /dev/null +++ b/README.md @@ -0,0 +1,257 @@ +# Home Assistant - Test/Prod Infrastructure + +Automatyczne zarządzanie środowiskami Home Assistant na Proxmox z wykorzystaniem Infrastructure as Code. + +## 📋 Architektura + +``` +Proxmox 192.168.50.200 +├── VM 210: homeassistant-test (192.168.50.210) +│ └── Home Assistant OS 13.2 +└── VM 211: homeassistant-prod (192.168.50.211) + └── Home Assistant OS 13.2 +``` + +## 🚀 Szybki start + +### 1. Utworzenie środowiska TEST + +```bash +cd ~/homeassistant-infra +chmod +x scripts/*.sh +./scripts/create-ha-vm.sh test +``` + +Pierwsze uruchomienie zajmie ~10-15 minut. Sprawdź status: + +```bash +watch -n 5 'curl -s http://192.168.50.210:8123 && echo " - HA Ready!" || echo " - Czekam..."' +``` + +### 2. Konfiguracja początkowa Home Assistant + +1. Otwórz: http://192.168.50.210:8123 +2. Przejdź przez wizard (użytkownik, lokalizacja, integracje) +3. **Ważne**: Włącz SSH access + - Supervisor → System → Join → "Advanced Mode" + - Settings → Add-ons → Terminal & SSH + - Zainstaluj i uruchom + - Configuration → Ustaw hasło: `QWer!@34` + +### 3. Testowanie i developement + +Pracuj na środowisku TEST: +- Dodawaj integracje +- Twórz automatyzacje +- Testuj scenariusze +- Modyfikuj konfigurację + +### 4. Utworzenie środowiska PROD + +```bash +./scripts/create-ha-vm.sh prod +``` + +Powtórz konfigurację początkową jak dla TEST. + +### 5. Synchronizacja TEST → PROD + +Gdy zmiany w TEST są gotowe: + +```bash +./scripts/sync-test-to-prod.sh +``` + +Skrypt: +- Utworzy backup PROD +- Skopiuje konfigurację z TEST do PROD +- Zrestartuje PROD + +## 🔧 Zarządzanie + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego środowiska: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +Backupy są zapisywane w `./backups/` + +### Restore + +```bash +./scripts/restore-backup.sh ./backups/prod_config_20260203_220000.tar.gz prod +``` + +### Zarządzanie VM + +#### Status VM +```bash +ssh root@192.168.50.200 "qm status 210" # TEST +ssh root@192.168.50.200 "qm status 211" # PROD +``` + +#### Stop/Start VM +```bash +ssh root@192.168.50.200 "qm stop 210" +ssh root@192.168.50.200 "qm start 210" +``` + +#### Restart +```bash +ssh root@192.168.50.200 "qm reboot 210" +``` + +#### Logi konsoli +```bash +ssh root@192.168.50.200 "qm terminal 210" +``` + +## 📂 Struktura projektu + +``` +homeassistant-infra/ +├── scripts/ +│ ├── create-ha-vm.sh # Tworzenie VM +│ ├── sync-test-to-prod.sh # Synchronizacja środowisk +│ ├── backup-ha.sh # Backup +│ └── restore-backup.sh # Restore +├── backups/ # Backupy konfiguracji +├── docs/ # Dokumentacja +└── README.md # Ten plik +``` + +## 🔄 Workflow codziennej pracy + +```mermaid +graph LR + A[Zmiana w TEST] --> B[Testowanie] + B --> C{Działa?} + C -->|Nie| A + C -->|Tak| D[git commit] + D --> E[git push] + E --> F[sync-test-to-prod.sh] + F --> G[Produkcja gotowa] +``` + +1. **Edycja w TEST** - pracuj na http://192.168.50.210:8123 +2. **Testowanie** - upewnij się że wszystko działa +3. **Commit do Git** (opcjonalnie): + ```bash + git add . + git commit -m "Dodano automatyzację X" + git push origin master + ``` +4. **Deploy na PROD**: + ```bash + ./scripts/sync-test-to-prod.sh + ``` + +## 🔐 Dane dostępowe + +| Środowisko | IP | URL | SSH | +|------------|------------|--------------------------|-----| +| Proxmox | 192.168.50.200 | https://192.168.50.200:8006 | root / QWer!@34 | +| HA Test | 192.168.50.210 | http://192.168.50.210:8123 | root / QWer!@34 | +| HA Prod | 192.168.50.211 | http://192.168.50.211:8123 | root / QWer!@34 | +| GitBucket | 192.168.50.101 | http://192.168.50.101:8080 | root / root | + +## 📦 Zasoby VM + +| Środowisko | CPU | RAM | Dysk | +|------------|-----|-----|------| +| TEST | 2 cores | 4 GB | 32 GB | +| PROD | 4 cores | 6 GB | 64 GB | + +## 🔗 Integracja z Git + +### Dodanie repozytorium do GitBucket + +```bash +cd ~/homeassistant-infra +git remote add origin http://192.168.50.101:8080/git/root/homeassistant-infra.git +git push -u origin master +``` + +### Codzienne użycie + +```bash +# Przed zmianami +git pull + +# Po zmianach +git add . +git commit -m "Opis zmian" +git push +``` + +## 🆘 Troubleshooting + +### VM nie startuje +```bash +ssh root@192.168.50.200 "qm list" +ssh root@192.168.50.200 "tail -100 /var/log/syslog | grep qm" +``` + +### Home Assistant nie odpowiada +```bash +# Sprawdź logi VM +ssh root@192.168.50.210 "ha core logs" + +# Restart HA +ssh root@192.168.50.210 "ha core restart" + +# Restart całej VM +ssh root@192.168.50.200 "qm reboot 210" +``` + +### Synchronizacja się nie powiodła +```bash +# Przywróć backup +./scripts/restore-backup.sh ./backups/prod_backup_XXX.tar.gz prod +``` + +### Brak dostępu SSH do HA +- Zaloguj się przez webUI +- Supervisor → Terminal & SSH +- Sprawdź czy addon jest uruchomiony +- Sprawdź konfigurację hasła + +## 📚 Kolejne kroki + +1. **Automatyzacja backupów** - cron job: + ```bash + 0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all + ``` + +2. **Monitoring** - dodaj sprawdzanie dostępności HA + +3. **CI/CD** - GitBucket webhooks → auto-deploy + +4. **Rozbudowa** - dodaj staging environment + +## 📖 Dokumentacja Home Assistant + +- [Official Docs](https://www.home-assistant.io/docs/) +- [Community Forum](https://community.home-assistant.io/) +- [Integrations](https://www.home-assistant.io/integrations/) + +## 🤝 Wsparcie + +W razie problemów: +1. Sprawdź logi +2. Przywróć backup +3. Skontaktuj się z administratorem + +--- + +**Autor**: Generated by GitHub Copilot CLI +**Data**: 2026-02-03 +**Wersja**: 1.0 diff --git a/scripts/backup-ha.sh b/scripts/backup-ha.sh new file mode 100755 index 0000000..c050808 --- /dev/null +++ b/scripts/backup-ha.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# +# Skrypt do backupu Home Assistant +# Użycie: ./backup-ha.sh [test|prod|all] +# + +set -e + +ENVIRONMENT="${1:-all}" +BACKUP_DIR="./backups" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) + +mkdir -p "$BACKUP_DIR" + +# Funkcja do backupu pojedynczego środowiska +backup_environment() { + local env=$1 + local ip=$2 + local name=$3 + + echo "📦 Backup $name ($ip)..." + + # Backup konfiguracji HA + local backup_file="$BACKUP_DIR/${env}_config_${TIMESTAMP}.tar.gz" + if sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "test -d /root/config" 2>/dev/null; then + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "cd /root && tar czf - config/" > "$backup_file" + echo "✅ Config: $backup_file ($(du -h $backup_file | cut -f1))" + else + echo "⚠️ Brak dostępu do $name" + return 1 + fi + + # Snapshot VM (opcjonalnie - wymaga API Proxmox) + echo " 💾 Tworzenie snapshot VM..." + local vmid + if [ "$env" = "test" ]; then + vmid=210 + else + vmid=211 + fi + + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@192.168.50.200 \ + "qm snapshot $vmid backup_${TIMESTAMP} --description 'Auto backup ${TIMESTAMP}'" 2>/dev/null || echo " ⚠️ Nie można utworzyć snapshot VM" + + echo "" +} + +echo "======================================" +echo "💾 Backup Home Assistant" +echo "======================================" +echo "Data: $(date)" +echo "======================================" +echo "" + +if [ "$ENVIRONMENT" = "test" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "test" "192.168.50.210" "TEST" +fi + +if [ "$ENVIRONMENT" = "prod" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "prod" "192.168.50.211" "PROD" +fi + +echo "======================================" +echo "✅ Backup zakończony" +echo "======================================" +echo "Lokalizacja: $BACKUP_DIR" +echo "" +ls -lh "$BACKUP_DIR" | tail -10 +echo "" +echo "💡 Przywracanie backupu:" +echo " ./restore-backup.sh [test|prod]" +echo "======================================" diff --git a/scripts/create-ha-vm.sh b/scripts/create-ha-vm.sh new file mode 100755 index 0000000..2b35182 --- /dev/null +++ b/scripts/create-ha-vm.sh @@ -0,0 +1,142 @@ +#!/bin/bash +# +# Skrypt do automatycznego utworzenia VM z Home Assistant OS na Proxmox +# Użycie: ./create-ha-vm.sh [test|prod] +# + +set -e + +# Konfiguracja +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" +NODE="prox01" + +# Domyślne parametry +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + VM_NAME="homeassistant-test" + VM_IP="192.168.50.210" + CORES=2 + MEMORY=4096 + DISK_SIZE="32G" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + VM_NAME="homeassistant-prod" + VM_IP="192.168.50.211" + CORES=4 + MEMORY=6144 + DISK_SIZE="64G" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +GATEWAY="192.168.50.1" +STORAGE="local-lvm" +HAOS_VERSION="13.2" +HAOS_IMAGE_URL="https://github.com/home-assistant/operating-system/releases/download/${HAOS_VERSION}/haos_ova-${HAOS_VERSION}.qcow2.xz" +HAOS_IMAGE="haos_ova-${HAOS_VERSION}.qcow2" + +echo "======================================" +echo "🏠 Tworzenie Home Assistant ${ENVIRONMENT^^}" +echo "======================================" +echo "VM ID: $VMID" +echo "Nazwa: $VM_NAME" +echo "IP: $VM_IP" +echo "CPU: $CORES cores" +echo "RAM: ${MEMORY}MB" +echo "Dysk: $DISK_SIZE" +echo "======================================" +echo "" + +# Funkcja do wykonywania poleceń na Proxmox +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +# Sprawdzenie czy VM już istnieje +echo "🔍 Sprawdzanie czy VM $VMID już istnieje..." +if pve_cmd "qm status $VMID" 2>/dev/null; then + echo "⚠️ VM $VMID już istnieje!" + read -p "Czy chcesz usunąć i utworzyć od nowa? (tak/nie): " confirm + if [ "$confirm" = "tak" ]; then + echo "🗑️ Usuwanie VM $VMID..." + pve_cmd "qm stop $VMID" 2>/dev/null || true + sleep 3 + pve_cmd "qm destroy $VMID --purge" + echo "✅ VM usunięte" + else + echo "❌ Anulowano" + exit 1 + fi +fi + +# Pobieranie obrazu Home Assistant OS +echo "📥 Pobieranie Home Assistant OS ${HAOS_VERSION}..." +TEMP_DIR="/tmp/haos-${VMID}" +pve_cmd "mkdir -p $TEMP_DIR" + +if ! pve_cmd "test -f $TEMP_DIR/$HAOS_IMAGE"; then + echo " Pobieranie z GitHub..." + pve_cmd "cd $TEMP_DIR && wget -q --show-progress $HAOS_IMAGE_URL -O ${HAOS_IMAGE}.xz" + echo " Rozpakowywanie obrazu..." + pve_cmd "cd $TEMP_DIR && xz -d ${HAOS_IMAGE}.xz" +else + echo " ✅ Obraz już pobrany" +fi + +# Tworzenie VM +echo "🔨 Tworzenie VM..." +pve_cmd "qm create $VMID --name $VM_NAME --memory $MEMORY --cores $CORES --net0 virtio,bridge=vmbr0" + +# Import dysku +echo "💾 Importowanie dysku..." +pve_cmd "qm importdisk $VMID $TEMP_DIR/$HAOS_IMAGE $STORAGE" + +# Konfiguracja VM +echo "⚙️ Konfiguracja VM..." +pve_cmd "qm set $VMID --scsihw virtio-scsi-pci --scsi0 $STORAGE:vm-$VMID-disk-0" +pve_cmd "qm set $VMID --boot c --bootdisk scsi0" +pve_cmd "qm set $VMID --agent enabled=1" +pve_cmd "qm set $VMID --ostype l26" +pve_cmd "qm set $VMID --serial0 socket --vga serial0" +pve_cmd "qm set $VMID --onboot 1" + +# Rozszerzenie dysku do wymaganego rozmiaru +echo "📦 Rozszerzanie dysku do $DISK_SIZE..." +pve_cmd "qm resize $VMID scsi0 $DISK_SIZE" + +# Uruchomienie VM +echo "🚀 Uruchamianie VM..." +pve_cmd "qm start $VMID" + +echo "" +echo "✅ VM utworzone pomyślnie!" +echo "" +echo "======================================" +echo "📋 Informacje o VM" +echo "======================================" +echo "Nazwa: $VM_NAME" +echo "ID: $VMID" +echo "Node: $NODE" +echo "" +echo "🌐 Dostęp do Home Assistant:" +echo " URL: http://${VM_IP}:8123" +echo "" +echo "⏳ Pierwsza konfiguracja zajmie ~10-15 minut" +echo " Sprawdź status: watch -n 5 'curl -s http://${VM_IP}:8123 && echo OK || echo Czekam...'" +echo "" +echo "📝 Konfiguracja statycznego IP:" +echo " Po uruchomieniu HA, wejdź do: Ustawienia → System → Sieć" +echo " Ustaw: IP=$VM_IP, Gateway=$GATEWAY, DNS=8.8.8.8" +echo "======================================" + +# Czyszczenie +echo "🧹 Czyszczenie plików tymczasowych..." +pve_cmd "rm -rf $TEMP_DIR" + +echo "" +echo "✨ Gotowe! VM $VM_NAME zostało utworzone na Proxmox." diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9757f25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Backups +backups/ +*.tar.gz +*.zip + +# Logs +*.log + +# Temporary +*.tmp +*.temp +.DS_Store + +# Credentials (jeśli będziesz trzymać secrets lokalnie) +secrets.yaml +known_devices.yaml +.uuid +.storage/ +.cloud/ + +# IDE +.vscode/ +.idea/ +*.swp diff --git a/README.md b/README.md new file mode 100644 index 0000000..b68ff83 --- /dev/null +++ b/README.md @@ -0,0 +1,257 @@ +# Home Assistant - Test/Prod Infrastructure + +Automatyczne zarządzanie środowiskami Home Assistant na Proxmox z wykorzystaniem Infrastructure as Code. + +## 📋 Architektura + +``` +Proxmox 192.168.50.200 +├── VM 210: homeassistant-test (192.168.50.210) +│ └── Home Assistant OS 13.2 +└── VM 211: homeassistant-prod (192.168.50.211) + └── Home Assistant OS 13.2 +``` + +## 🚀 Szybki start + +### 1. Utworzenie środowiska TEST + +```bash +cd ~/homeassistant-infra +chmod +x scripts/*.sh +./scripts/create-ha-vm.sh test +``` + +Pierwsze uruchomienie zajmie ~10-15 minut. Sprawdź status: + +```bash +watch -n 5 'curl -s http://192.168.50.210:8123 && echo " - HA Ready!" || echo " - Czekam..."' +``` + +### 2. Konfiguracja początkowa Home Assistant + +1. Otwórz: http://192.168.50.210:8123 +2. Przejdź przez wizard (użytkownik, lokalizacja, integracje) +3. **Ważne**: Włącz SSH access + - Supervisor → System → Join → "Advanced Mode" + - Settings → Add-ons → Terminal & SSH + - Zainstaluj i uruchom + - Configuration → Ustaw hasło: `QWer!@34` + +### 3. Testowanie i developement + +Pracuj na środowisku TEST: +- Dodawaj integracje +- Twórz automatyzacje +- Testuj scenariusze +- Modyfikuj konfigurację + +### 4. Utworzenie środowiska PROD + +```bash +./scripts/create-ha-vm.sh prod +``` + +Powtórz konfigurację początkową jak dla TEST. + +### 5. Synchronizacja TEST → PROD + +Gdy zmiany w TEST są gotowe: + +```bash +./scripts/sync-test-to-prod.sh +``` + +Skrypt: +- Utworzy backup PROD +- Skopiuje konfigurację z TEST do PROD +- Zrestartuje PROD + +## 🔧 Zarządzanie + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego środowiska: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +Backupy są zapisywane w `./backups/` + +### Restore + +```bash +./scripts/restore-backup.sh ./backups/prod_config_20260203_220000.tar.gz prod +``` + +### Zarządzanie VM + +#### Status VM +```bash +ssh root@192.168.50.200 "qm status 210" # TEST +ssh root@192.168.50.200 "qm status 211" # PROD +``` + +#### Stop/Start VM +```bash +ssh root@192.168.50.200 "qm stop 210" +ssh root@192.168.50.200 "qm start 210" +``` + +#### Restart +```bash +ssh root@192.168.50.200 "qm reboot 210" +``` + +#### Logi konsoli +```bash +ssh root@192.168.50.200 "qm terminal 210" +``` + +## 📂 Struktura projektu + +``` +homeassistant-infra/ +├── scripts/ +│ ├── create-ha-vm.sh # Tworzenie VM +│ ├── sync-test-to-prod.sh # Synchronizacja środowisk +│ ├── backup-ha.sh # Backup +│ └── restore-backup.sh # Restore +├── backups/ # Backupy konfiguracji +├── docs/ # Dokumentacja +└── README.md # Ten plik +``` + +## 🔄 Workflow codziennej pracy + +```mermaid +graph LR + A[Zmiana w TEST] --> B[Testowanie] + B --> C{Działa?} + C -->|Nie| A + C -->|Tak| D[git commit] + D --> E[git push] + E --> F[sync-test-to-prod.sh] + F --> G[Produkcja gotowa] +``` + +1. **Edycja w TEST** - pracuj na http://192.168.50.210:8123 +2. **Testowanie** - upewnij się że wszystko działa +3. **Commit do Git** (opcjonalnie): + ```bash + git add . + git commit -m "Dodano automatyzację X" + git push origin master + ``` +4. **Deploy na PROD**: + ```bash + ./scripts/sync-test-to-prod.sh + ``` + +## 🔐 Dane dostępowe + +| Środowisko | IP | URL | SSH | +|------------|------------|--------------------------|-----| +| Proxmox | 192.168.50.200 | https://192.168.50.200:8006 | root / QWer!@34 | +| HA Test | 192.168.50.210 | http://192.168.50.210:8123 | root / QWer!@34 | +| HA Prod | 192.168.50.211 | http://192.168.50.211:8123 | root / QWer!@34 | +| GitBucket | 192.168.50.101 | http://192.168.50.101:8080 | root / root | + +## 📦 Zasoby VM + +| Środowisko | CPU | RAM | Dysk | +|------------|-----|-----|------| +| TEST | 2 cores | 4 GB | 32 GB | +| PROD | 4 cores | 6 GB | 64 GB | + +## 🔗 Integracja z Git + +### Dodanie repozytorium do GitBucket + +```bash +cd ~/homeassistant-infra +git remote add origin http://192.168.50.101:8080/git/root/homeassistant-infra.git +git push -u origin master +``` + +### Codzienne użycie + +```bash +# Przed zmianami +git pull + +# Po zmianach +git add . +git commit -m "Opis zmian" +git push +``` + +## 🆘 Troubleshooting + +### VM nie startuje +```bash +ssh root@192.168.50.200 "qm list" +ssh root@192.168.50.200 "tail -100 /var/log/syslog | grep qm" +``` + +### Home Assistant nie odpowiada +```bash +# Sprawdź logi VM +ssh root@192.168.50.210 "ha core logs" + +# Restart HA +ssh root@192.168.50.210 "ha core restart" + +# Restart całej VM +ssh root@192.168.50.200 "qm reboot 210" +``` + +### Synchronizacja się nie powiodła +```bash +# Przywróć backup +./scripts/restore-backup.sh ./backups/prod_backup_XXX.tar.gz prod +``` + +### Brak dostępu SSH do HA +- Zaloguj się przez webUI +- Supervisor → Terminal & SSH +- Sprawdź czy addon jest uruchomiony +- Sprawdź konfigurację hasła + +## 📚 Kolejne kroki + +1. **Automatyzacja backupów** - cron job: + ```bash + 0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all + ``` + +2. **Monitoring** - dodaj sprawdzanie dostępności HA + +3. **CI/CD** - GitBucket webhooks → auto-deploy + +4. **Rozbudowa** - dodaj staging environment + +## 📖 Dokumentacja Home Assistant + +- [Official Docs](https://www.home-assistant.io/docs/) +- [Community Forum](https://community.home-assistant.io/) +- [Integrations](https://www.home-assistant.io/integrations/) + +## 🤝 Wsparcie + +W razie problemów: +1. Sprawdź logi +2. Przywróć backup +3. Skontaktuj się z administratorem + +--- + +**Autor**: Generated by GitHub Copilot CLI +**Data**: 2026-02-03 +**Wersja**: 1.0 diff --git a/scripts/backup-ha.sh b/scripts/backup-ha.sh new file mode 100755 index 0000000..c050808 --- /dev/null +++ b/scripts/backup-ha.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# +# Skrypt do backupu Home Assistant +# Użycie: ./backup-ha.sh [test|prod|all] +# + +set -e + +ENVIRONMENT="${1:-all}" +BACKUP_DIR="./backups" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) + +mkdir -p "$BACKUP_DIR" + +# Funkcja do backupu pojedynczego środowiska +backup_environment() { + local env=$1 + local ip=$2 + local name=$3 + + echo "📦 Backup $name ($ip)..." + + # Backup konfiguracji HA + local backup_file="$BACKUP_DIR/${env}_config_${TIMESTAMP}.tar.gz" + if sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "test -d /root/config" 2>/dev/null; then + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "cd /root && tar czf - config/" > "$backup_file" + echo "✅ Config: $backup_file ($(du -h $backup_file | cut -f1))" + else + echo "⚠️ Brak dostępu do $name" + return 1 + fi + + # Snapshot VM (opcjonalnie - wymaga API Proxmox) + echo " 💾 Tworzenie snapshot VM..." + local vmid + if [ "$env" = "test" ]; then + vmid=210 + else + vmid=211 + fi + + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@192.168.50.200 \ + "qm snapshot $vmid backup_${TIMESTAMP} --description 'Auto backup ${TIMESTAMP}'" 2>/dev/null || echo " ⚠️ Nie można utworzyć snapshot VM" + + echo "" +} + +echo "======================================" +echo "💾 Backup Home Assistant" +echo "======================================" +echo "Data: $(date)" +echo "======================================" +echo "" + +if [ "$ENVIRONMENT" = "test" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "test" "192.168.50.210" "TEST" +fi + +if [ "$ENVIRONMENT" = "prod" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "prod" "192.168.50.211" "PROD" +fi + +echo "======================================" +echo "✅ Backup zakończony" +echo "======================================" +echo "Lokalizacja: $BACKUP_DIR" +echo "" +ls -lh "$BACKUP_DIR" | tail -10 +echo "" +echo "💡 Przywracanie backupu:" +echo " ./restore-backup.sh [test|prod]" +echo "======================================" diff --git a/scripts/create-ha-vm.sh b/scripts/create-ha-vm.sh new file mode 100755 index 0000000..2b35182 --- /dev/null +++ b/scripts/create-ha-vm.sh @@ -0,0 +1,142 @@ +#!/bin/bash +# +# Skrypt do automatycznego utworzenia VM z Home Assistant OS na Proxmox +# Użycie: ./create-ha-vm.sh [test|prod] +# + +set -e + +# Konfiguracja +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" +NODE="prox01" + +# Domyślne parametry +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + VM_NAME="homeassistant-test" + VM_IP="192.168.50.210" + CORES=2 + MEMORY=4096 + DISK_SIZE="32G" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + VM_NAME="homeassistant-prod" + VM_IP="192.168.50.211" + CORES=4 + MEMORY=6144 + DISK_SIZE="64G" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +GATEWAY="192.168.50.1" +STORAGE="local-lvm" +HAOS_VERSION="13.2" +HAOS_IMAGE_URL="https://github.com/home-assistant/operating-system/releases/download/${HAOS_VERSION}/haos_ova-${HAOS_VERSION}.qcow2.xz" +HAOS_IMAGE="haos_ova-${HAOS_VERSION}.qcow2" + +echo "======================================" +echo "🏠 Tworzenie Home Assistant ${ENVIRONMENT^^}" +echo "======================================" +echo "VM ID: $VMID" +echo "Nazwa: $VM_NAME" +echo "IP: $VM_IP" +echo "CPU: $CORES cores" +echo "RAM: ${MEMORY}MB" +echo "Dysk: $DISK_SIZE" +echo "======================================" +echo "" + +# Funkcja do wykonywania poleceń na Proxmox +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +# Sprawdzenie czy VM już istnieje +echo "🔍 Sprawdzanie czy VM $VMID już istnieje..." +if pve_cmd "qm status $VMID" 2>/dev/null; then + echo "⚠️ VM $VMID już istnieje!" + read -p "Czy chcesz usunąć i utworzyć od nowa? (tak/nie): " confirm + if [ "$confirm" = "tak" ]; then + echo "🗑️ Usuwanie VM $VMID..." + pve_cmd "qm stop $VMID" 2>/dev/null || true + sleep 3 + pve_cmd "qm destroy $VMID --purge" + echo "✅ VM usunięte" + else + echo "❌ Anulowano" + exit 1 + fi +fi + +# Pobieranie obrazu Home Assistant OS +echo "📥 Pobieranie Home Assistant OS ${HAOS_VERSION}..." +TEMP_DIR="/tmp/haos-${VMID}" +pve_cmd "mkdir -p $TEMP_DIR" + +if ! pve_cmd "test -f $TEMP_DIR/$HAOS_IMAGE"; then + echo " Pobieranie z GitHub..." + pve_cmd "cd $TEMP_DIR && wget -q --show-progress $HAOS_IMAGE_URL -O ${HAOS_IMAGE}.xz" + echo " Rozpakowywanie obrazu..." + pve_cmd "cd $TEMP_DIR && xz -d ${HAOS_IMAGE}.xz" +else + echo " ✅ Obraz już pobrany" +fi + +# Tworzenie VM +echo "🔨 Tworzenie VM..." +pve_cmd "qm create $VMID --name $VM_NAME --memory $MEMORY --cores $CORES --net0 virtio,bridge=vmbr0" + +# Import dysku +echo "💾 Importowanie dysku..." +pve_cmd "qm importdisk $VMID $TEMP_DIR/$HAOS_IMAGE $STORAGE" + +# Konfiguracja VM +echo "⚙️ Konfiguracja VM..." +pve_cmd "qm set $VMID --scsihw virtio-scsi-pci --scsi0 $STORAGE:vm-$VMID-disk-0" +pve_cmd "qm set $VMID --boot c --bootdisk scsi0" +pve_cmd "qm set $VMID --agent enabled=1" +pve_cmd "qm set $VMID --ostype l26" +pve_cmd "qm set $VMID --serial0 socket --vga serial0" +pve_cmd "qm set $VMID --onboot 1" + +# Rozszerzenie dysku do wymaganego rozmiaru +echo "📦 Rozszerzanie dysku do $DISK_SIZE..." +pve_cmd "qm resize $VMID scsi0 $DISK_SIZE" + +# Uruchomienie VM +echo "🚀 Uruchamianie VM..." +pve_cmd "qm start $VMID" + +echo "" +echo "✅ VM utworzone pomyślnie!" +echo "" +echo "======================================" +echo "📋 Informacje o VM" +echo "======================================" +echo "Nazwa: $VM_NAME" +echo "ID: $VMID" +echo "Node: $NODE" +echo "" +echo "🌐 Dostęp do Home Assistant:" +echo " URL: http://${VM_IP}:8123" +echo "" +echo "⏳ Pierwsza konfiguracja zajmie ~10-15 minut" +echo " Sprawdź status: watch -n 5 'curl -s http://${VM_IP}:8123 && echo OK || echo Czekam...'" +echo "" +echo "📝 Konfiguracja statycznego IP:" +echo " Po uruchomieniu HA, wejdź do: Ustawienia → System → Sieć" +echo " Ustaw: IP=$VM_IP, Gateway=$GATEWAY, DNS=8.8.8.8" +echo "======================================" + +# Czyszczenie +echo "🧹 Czyszczenie plików tymczasowych..." +pve_cmd "rm -rf $TEMP_DIR" + +echo "" +echo "✨ Gotowe! VM $VM_NAME zostało utworzone na Proxmox." diff --git a/scripts/restore-backup.sh b/scripts/restore-backup.sh new file mode 100755 index 0000000..8cf7b75 --- /dev/null +++ b/scripts/restore-backup.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# +# Skrypt do przywracania backupu Home Assistant +# Użycie: ./restore-backup.sh [test|prod] +# + +set -e + +BACKUP_FILE="$1" +ENVIRONMENT="${2:-prod}" + +if [ -z "$BACKUP_FILE" ]; then + echo "❌ Użycie: $0 [test|prod]" + echo "" + echo "Dostępne backupy:" + ls -lh ./backups/*.tar.gz 2>/dev/null || echo " Brak backupów" + exit 1 +fi + +if [ ! -f "$BACKUP_FILE" ]; then + echo "❌ Plik nie istnieje: $BACKUP_FILE" + exit 1 +fi + +if [ "$ENVIRONMENT" = "test" ]; then + TARGET_IP="192.168.50.210" + TARGET_NAME="TEST" +elif [ "$ENVIRONMENT" = "prod" ]; then + TARGET_IP="192.168.50.211" + TARGET_NAME="PROD" +else + echo "❌ Nieznane środowisko: $ENVIRONMENT" + exit 1 +fi + +echo "======================================" +echo "♻️ Przywracanie backupu" +echo "======================================" +echo "Backup: $BACKUP_FILE" +echo "Środowisko: $TARGET_NAME ($TARGET_IP)" +echo "======================================" +echo "" + +read -p "⚠️ To NADPISZE aktualną konfigurację! Kontynuować? (tak/nie): " confirm +if [ "$confirm" != "tak" ]; then + echo "❌ Anulowano" + exit 0 +fi + +echo "" +echo "📤 Wysyłanie backupu do $TARGET_NAME..." +cat "$BACKUP_FILE" | sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${TARGET_IP} "cd /root && tar xzf -" + +echo "♻️ Restart Home Assistant..." +sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${TARGET_IP} \ + "ha core restart" 2>/dev/null || \ + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${TARGET_IP} \ + "systemctl restart home-assistant@homeassistant.service" || true + +echo "" +echo "✅ Backup przywrócony pomyślnie!" +echo "" +echo "🌐 Sprawdź: http://${TARGET_IP}:8123" +echo "======================================" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9757f25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Backups +backups/ +*.tar.gz +*.zip + +# Logs +*.log + +# Temporary +*.tmp +*.temp +.DS_Store + +# Credentials (jeśli będziesz trzymać secrets lokalnie) +secrets.yaml +known_devices.yaml +.uuid +.storage/ +.cloud/ + +# IDE +.vscode/ +.idea/ +*.swp diff --git a/README.md b/README.md new file mode 100644 index 0000000..b68ff83 --- /dev/null +++ b/README.md @@ -0,0 +1,257 @@ +# Home Assistant - Test/Prod Infrastructure + +Automatyczne zarządzanie środowiskami Home Assistant na Proxmox z wykorzystaniem Infrastructure as Code. + +## 📋 Architektura + +``` +Proxmox 192.168.50.200 +├── VM 210: homeassistant-test (192.168.50.210) +│ └── Home Assistant OS 13.2 +└── VM 211: homeassistant-prod (192.168.50.211) + └── Home Assistant OS 13.2 +``` + +## 🚀 Szybki start + +### 1. Utworzenie środowiska TEST + +```bash +cd ~/homeassistant-infra +chmod +x scripts/*.sh +./scripts/create-ha-vm.sh test +``` + +Pierwsze uruchomienie zajmie ~10-15 minut. Sprawdź status: + +```bash +watch -n 5 'curl -s http://192.168.50.210:8123 && echo " - HA Ready!" || echo " - Czekam..."' +``` + +### 2. Konfiguracja początkowa Home Assistant + +1. Otwórz: http://192.168.50.210:8123 +2. Przejdź przez wizard (użytkownik, lokalizacja, integracje) +3. **Ważne**: Włącz SSH access + - Supervisor → System → Join → "Advanced Mode" + - Settings → Add-ons → Terminal & SSH + - Zainstaluj i uruchom + - Configuration → Ustaw hasło: `QWer!@34` + +### 3. Testowanie i developement + +Pracuj na środowisku TEST: +- Dodawaj integracje +- Twórz automatyzacje +- Testuj scenariusze +- Modyfikuj konfigurację + +### 4. Utworzenie środowiska PROD + +```bash +./scripts/create-ha-vm.sh prod +``` + +Powtórz konfigurację początkową jak dla TEST. + +### 5. Synchronizacja TEST → PROD + +Gdy zmiany w TEST są gotowe: + +```bash +./scripts/sync-test-to-prod.sh +``` + +Skrypt: +- Utworzy backup PROD +- Skopiuje konfigurację z TEST do PROD +- Zrestartuje PROD + +## 🔧 Zarządzanie + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego środowiska: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +Backupy są zapisywane w `./backups/` + +### Restore + +```bash +./scripts/restore-backup.sh ./backups/prod_config_20260203_220000.tar.gz prod +``` + +### Zarządzanie VM + +#### Status VM +```bash +ssh root@192.168.50.200 "qm status 210" # TEST +ssh root@192.168.50.200 "qm status 211" # PROD +``` + +#### Stop/Start VM +```bash +ssh root@192.168.50.200 "qm stop 210" +ssh root@192.168.50.200 "qm start 210" +``` + +#### Restart +```bash +ssh root@192.168.50.200 "qm reboot 210" +``` + +#### Logi konsoli +```bash +ssh root@192.168.50.200 "qm terminal 210" +``` + +## 📂 Struktura projektu + +``` +homeassistant-infra/ +├── scripts/ +│ ├── create-ha-vm.sh # Tworzenie VM +│ ├── sync-test-to-prod.sh # Synchronizacja środowisk +│ ├── backup-ha.sh # Backup +│ └── restore-backup.sh # Restore +├── backups/ # Backupy konfiguracji +├── docs/ # Dokumentacja +└── README.md # Ten plik +``` + +## 🔄 Workflow codziennej pracy + +```mermaid +graph LR + A[Zmiana w TEST] --> B[Testowanie] + B --> C{Działa?} + C -->|Nie| A + C -->|Tak| D[git commit] + D --> E[git push] + E --> F[sync-test-to-prod.sh] + F --> G[Produkcja gotowa] +``` + +1. **Edycja w TEST** - pracuj na http://192.168.50.210:8123 +2. **Testowanie** - upewnij się że wszystko działa +3. **Commit do Git** (opcjonalnie): + ```bash + git add . + git commit -m "Dodano automatyzację X" + git push origin master + ``` +4. **Deploy na PROD**: + ```bash + ./scripts/sync-test-to-prod.sh + ``` + +## 🔐 Dane dostępowe + +| Środowisko | IP | URL | SSH | +|------------|------------|--------------------------|-----| +| Proxmox | 192.168.50.200 | https://192.168.50.200:8006 | root / QWer!@34 | +| HA Test | 192.168.50.210 | http://192.168.50.210:8123 | root / QWer!@34 | +| HA Prod | 192.168.50.211 | http://192.168.50.211:8123 | root / QWer!@34 | +| GitBucket | 192.168.50.101 | http://192.168.50.101:8080 | root / root | + +## 📦 Zasoby VM + +| Środowisko | CPU | RAM | Dysk | +|------------|-----|-----|------| +| TEST | 2 cores | 4 GB | 32 GB | +| PROD | 4 cores | 6 GB | 64 GB | + +## 🔗 Integracja z Git + +### Dodanie repozytorium do GitBucket + +```bash +cd ~/homeassistant-infra +git remote add origin http://192.168.50.101:8080/git/root/homeassistant-infra.git +git push -u origin master +``` + +### Codzienne użycie + +```bash +# Przed zmianami +git pull + +# Po zmianach +git add . +git commit -m "Opis zmian" +git push +``` + +## 🆘 Troubleshooting + +### VM nie startuje +```bash +ssh root@192.168.50.200 "qm list" +ssh root@192.168.50.200 "tail -100 /var/log/syslog | grep qm" +``` + +### Home Assistant nie odpowiada +```bash +# Sprawdź logi VM +ssh root@192.168.50.210 "ha core logs" + +# Restart HA +ssh root@192.168.50.210 "ha core restart" + +# Restart całej VM +ssh root@192.168.50.200 "qm reboot 210" +``` + +### Synchronizacja się nie powiodła +```bash +# Przywróć backup +./scripts/restore-backup.sh ./backups/prod_backup_XXX.tar.gz prod +``` + +### Brak dostępu SSH do HA +- Zaloguj się przez webUI +- Supervisor → Terminal & SSH +- Sprawdź czy addon jest uruchomiony +- Sprawdź konfigurację hasła + +## 📚 Kolejne kroki + +1. **Automatyzacja backupów** - cron job: + ```bash + 0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all + ``` + +2. **Monitoring** - dodaj sprawdzanie dostępności HA + +3. **CI/CD** - GitBucket webhooks → auto-deploy + +4. **Rozbudowa** - dodaj staging environment + +## 📖 Dokumentacja Home Assistant + +- [Official Docs](https://www.home-assistant.io/docs/) +- [Community Forum](https://community.home-assistant.io/) +- [Integrations](https://www.home-assistant.io/integrations/) + +## 🤝 Wsparcie + +W razie problemów: +1. Sprawdź logi +2. Przywróć backup +3. Skontaktuj się z administratorem + +--- + +**Autor**: Generated by GitHub Copilot CLI +**Data**: 2026-02-03 +**Wersja**: 1.0 diff --git a/scripts/backup-ha.sh b/scripts/backup-ha.sh new file mode 100755 index 0000000..c050808 --- /dev/null +++ b/scripts/backup-ha.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# +# Skrypt do backupu Home Assistant +# Użycie: ./backup-ha.sh [test|prod|all] +# + +set -e + +ENVIRONMENT="${1:-all}" +BACKUP_DIR="./backups" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) + +mkdir -p "$BACKUP_DIR" + +# Funkcja do backupu pojedynczego środowiska +backup_environment() { + local env=$1 + local ip=$2 + local name=$3 + + echo "📦 Backup $name ($ip)..." + + # Backup konfiguracji HA + local backup_file="$BACKUP_DIR/${env}_config_${TIMESTAMP}.tar.gz" + if sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "test -d /root/config" 2>/dev/null; then + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${ip} "cd /root && tar czf - config/" > "$backup_file" + echo "✅ Config: $backup_file ($(du -h $backup_file | cut -f1))" + else + echo "⚠️ Brak dostępu do $name" + return 1 + fi + + # Snapshot VM (opcjonalnie - wymaga API Proxmox) + echo " 💾 Tworzenie snapshot VM..." + local vmid + if [ "$env" = "test" ]; then + vmid=210 + else + vmid=211 + fi + + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@192.168.50.200 \ + "qm snapshot $vmid backup_${TIMESTAMP} --description 'Auto backup ${TIMESTAMP}'" 2>/dev/null || echo " ⚠️ Nie można utworzyć snapshot VM" + + echo "" +} + +echo "======================================" +echo "💾 Backup Home Assistant" +echo "======================================" +echo "Data: $(date)" +echo "======================================" +echo "" + +if [ "$ENVIRONMENT" = "test" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "test" "192.168.50.210" "TEST" +fi + +if [ "$ENVIRONMENT" = "prod" ] || [ "$ENVIRONMENT" = "all" ]; then + backup_environment "prod" "192.168.50.211" "PROD" +fi + +echo "======================================" +echo "✅ Backup zakończony" +echo "======================================" +echo "Lokalizacja: $BACKUP_DIR" +echo "" +ls -lh "$BACKUP_DIR" | tail -10 +echo "" +echo "💡 Przywracanie backupu:" +echo " ./restore-backup.sh [test|prod]" +echo "======================================" diff --git a/scripts/create-ha-vm.sh b/scripts/create-ha-vm.sh new file mode 100755 index 0000000..2b35182 --- /dev/null +++ b/scripts/create-ha-vm.sh @@ -0,0 +1,142 @@ +#!/bin/bash +# +# Skrypt do automatycznego utworzenia VM z Home Assistant OS na Proxmox +# Użycie: ./create-ha-vm.sh [test|prod] +# + +set -e + +# Konfiguracja +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" +NODE="prox01" + +# Domyślne parametry +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + VM_NAME="homeassistant-test" + VM_IP="192.168.50.210" + CORES=2 + MEMORY=4096 + DISK_SIZE="32G" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + VM_NAME="homeassistant-prod" + VM_IP="192.168.50.211" + CORES=4 + MEMORY=6144 + DISK_SIZE="64G" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +GATEWAY="192.168.50.1" +STORAGE="local-lvm" +HAOS_VERSION="13.2" +HAOS_IMAGE_URL="https://github.com/home-assistant/operating-system/releases/download/${HAOS_VERSION}/haos_ova-${HAOS_VERSION}.qcow2.xz" +HAOS_IMAGE="haos_ova-${HAOS_VERSION}.qcow2" + +echo "======================================" +echo "🏠 Tworzenie Home Assistant ${ENVIRONMENT^^}" +echo "======================================" +echo "VM ID: $VMID" +echo "Nazwa: $VM_NAME" +echo "IP: $VM_IP" +echo "CPU: $CORES cores" +echo "RAM: ${MEMORY}MB" +echo "Dysk: $DISK_SIZE" +echo "======================================" +echo "" + +# Funkcja do wykonywania poleceń na Proxmox +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +# Sprawdzenie czy VM już istnieje +echo "🔍 Sprawdzanie czy VM $VMID już istnieje..." +if pve_cmd "qm status $VMID" 2>/dev/null; then + echo "⚠️ VM $VMID już istnieje!" + read -p "Czy chcesz usunąć i utworzyć od nowa? (tak/nie): " confirm + if [ "$confirm" = "tak" ]; then + echo "🗑️ Usuwanie VM $VMID..." + pve_cmd "qm stop $VMID" 2>/dev/null || true + sleep 3 + pve_cmd "qm destroy $VMID --purge" + echo "✅ VM usunięte" + else + echo "❌ Anulowano" + exit 1 + fi +fi + +# Pobieranie obrazu Home Assistant OS +echo "📥 Pobieranie Home Assistant OS ${HAOS_VERSION}..." +TEMP_DIR="/tmp/haos-${VMID}" +pve_cmd "mkdir -p $TEMP_DIR" + +if ! pve_cmd "test -f $TEMP_DIR/$HAOS_IMAGE"; then + echo " Pobieranie z GitHub..." + pve_cmd "cd $TEMP_DIR && wget -q --show-progress $HAOS_IMAGE_URL -O ${HAOS_IMAGE}.xz" + echo " Rozpakowywanie obrazu..." + pve_cmd "cd $TEMP_DIR && xz -d ${HAOS_IMAGE}.xz" +else + echo " ✅ Obraz już pobrany" +fi + +# Tworzenie VM +echo "🔨 Tworzenie VM..." +pve_cmd "qm create $VMID --name $VM_NAME --memory $MEMORY --cores $CORES --net0 virtio,bridge=vmbr0" + +# Import dysku +echo "💾 Importowanie dysku..." +pve_cmd "qm importdisk $VMID $TEMP_DIR/$HAOS_IMAGE $STORAGE" + +# Konfiguracja VM +echo "⚙️ Konfiguracja VM..." +pve_cmd "qm set $VMID --scsihw virtio-scsi-pci --scsi0 $STORAGE:vm-$VMID-disk-0" +pve_cmd "qm set $VMID --boot c --bootdisk scsi0" +pve_cmd "qm set $VMID --agent enabled=1" +pve_cmd "qm set $VMID --ostype l26" +pve_cmd "qm set $VMID --serial0 socket --vga serial0" +pve_cmd "qm set $VMID --onboot 1" + +# Rozszerzenie dysku do wymaganego rozmiaru +echo "📦 Rozszerzanie dysku do $DISK_SIZE..." +pve_cmd "qm resize $VMID scsi0 $DISK_SIZE" + +# Uruchomienie VM +echo "🚀 Uruchamianie VM..." +pve_cmd "qm start $VMID" + +echo "" +echo "✅ VM utworzone pomyślnie!" +echo "" +echo "======================================" +echo "📋 Informacje o VM" +echo "======================================" +echo "Nazwa: $VM_NAME" +echo "ID: $VMID" +echo "Node: $NODE" +echo "" +echo "🌐 Dostęp do Home Assistant:" +echo " URL: http://${VM_IP}:8123" +echo "" +echo "⏳ Pierwsza konfiguracja zajmie ~10-15 minut" +echo " Sprawdź status: watch -n 5 'curl -s http://${VM_IP}:8123 && echo OK || echo Czekam...'" +echo "" +echo "📝 Konfiguracja statycznego IP:" +echo " Po uruchomieniu HA, wejdź do: Ustawienia → System → Sieć" +echo " Ustaw: IP=$VM_IP, Gateway=$GATEWAY, DNS=8.8.8.8" +echo "======================================" + +# Czyszczenie +echo "🧹 Czyszczenie plików tymczasowych..." +pve_cmd "rm -rf $TEMP_DIR" + +echo "" +echo "✨ Gotowe! VM $VM_NAME zostało utworzone na Proxmox." diff --git a/scripts/restore-backup.sh b/scripts/restore-backup.sh new file mode 100755 index 0000000..8cf7b75 --- /dev/null +++ b/scripts/restore-backup.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# +# Skrypt do przywracania backupu Home Assistant +# Użycie: ./restore-backup.sh [test|prod] +# + +set -e + +BACKUP_FILE="$1" +ENVIRONMENT="${2:-prod}" + +if [ -z "$BACKUP_FILE" ]; then + echo "❌ Użycie: $0 [test|prod]" + echo "" + echo "Dostępne backupy:" + ls -lh ./backups/*.tar.gz 2>/dev/null || echo " Brak backupów" + exit 1 +fi + +if [ ! -f "$BACKUP_FILE" ]; then + echo "❌ Plik nie istnieje: $BACKUP_FILE" + exit 1 +fi + +if [ "$ENVIRONMENT" = "test" ]; then + TARGET_IP="192.168.50.210" + TARGET_NAME="TEST" +elif [ "$ENVIRONMENT" = "prod" ]; then + TARGET_IP="192.168.50.211" + TARGET_NAME="PROD" +else + echo "❌ Nieznane środowisko: $ENVIRONMENT" + exit 1 +fi + +echo "======================================" +echo "♻️ Przywracanie backupu" +echo "======================================" +echo "Backup: $BACKUP_FILE" +echo "Środowisko: $TARGET_NAME ($TARGET_IP)" +echo "======================================" +echo "" + +read -p "⚠️ To NADPISZE aktualną konfigurację! Kontynuować? (tak/nie): " confirm +if [ "$confirm" != "tak" ]; then + echo "❌ Anulowano" + exit 0 +fi + +echo "" +echo "📤 Wysyłanie backupu do $TARGET_NAME..." +cat "$BACKUP_FILE" | sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${TARGET_IP} "cd /root && tar xzf -" + +echo "♻️ Restart Home Assistant..." +sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${TARGET_IP} \ + "ha core restart" 2>/dev/null || \ + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${TARGET_IP} \ + "systemctl restart home-assistant@homeassistant.service" || true + +echo "" +echo "✅ Backup przywrócony pomyślnie!" +echo "" +echo "🌐 Sprawdź: http://${TARGET_IP}:8123" +echo "======================================" diff --git a/scripts/sync-test-to-prod.sh b/scripts/sync-test-to-prod.sh new file mode 100755 index 0000000..10c703d --- /dev/null +++ b/scripts/sync-test-to-prod.sh @@ -0,0 +1,134 @@ +#!/bin/bash +# +# Skrypt do synchronizacji konfiguracji Home Assistant: TEST → PROD +# Użycie: ./sync-test-to-prod.sh +# + +set -e + +TEST_IP="192.168.50.210" +PROD_IP="192.168.50.211" +HA_CONFIG="/root/config" +BACKUP_DIR="./backups" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) + +echo "======================================" +echo "🔄 Synchronizacja HA: TEST → PROD" +echo "======================================" +echo "Test: $TEST_IP" +echo "Prod: $PROD_IP" +echo "======================================" +echo "" + +# Tworzenie katalogu na backupy +mkdir -p "$BACKUP_DIR" + +# Funkcja do wykonywania poleceń SSH na HA +ha_cmd() { + local host=$1 + shift + sshpass -p "QWer!@34" ssh -o StrictHostKeyChecking=no root@${host} "$@" +} + +# Sprawdzenie dostępu do środowisk +echo "🔍 Sprawdzanie dostępu do środowisk..." +if ! ha_cmd $TEST_IP "test -d $HA_CONFIG"; then + echo "❌ Brak dostępu do TEST ($TEST_IP)" + echo " Upewnij się, że:" + echo " 1. VM jest uruchomione" + echo " 2. SSH jest włączony w HA" + echo " 3. Hasło root jest ustawione" + exit 1 +fi + +if ! ha_cmd $PROD_IP "test -d $HA_CONFIG"; then + echo "❌ Brak dostępu do PROD ($PROD_IP)" + exit 1 +fi + +echo "✅ Dostęp do obu środowisk OK" +echo "" + +# Backup produkcji przed zmianami +echo "💾 Backup produkcji przed zmianami..." +PROD_BACKUP="$BACKUP_DIR/prod_backup_${TIMESTAMP}.tar.gz" +ha_cmd $PROD_IP "cd /root && tar czf - config/" > "$PROD_BACKUP" +echo "✅ Backup zapisany: $PROD_BACKUP" +echo "" + +# Lista plików do synchronizacji +echo "📋 Pliki do synchronizacji:" +ha_cmd $TEST_IP "cd $HA_CONFIG && ls -lh *.yaml *.json 2>/dev/null | awk '{print \$9, \$5}'" || true +echo "" + +# Potwierdzenie użytkownika +read -p "❓ Czy chcesz kontynuować synchronizację? (tak/nie): " confirm +if [ "$confirm" != "tak" ]; then + echo "❌ Anulowano" + exit 0 +fi + +# Synchronizacja konfiguracji +echo "" +echo "🔄 Synchronizacja plików konfiguracyjnych..." + +# Pliki do synchronizacji (dodaj/usuń według potrzeb) +CONFIG_FILES=( + "configuration.yaml" + "automations.yaml" + "scripts.yaml" + "scenes.yaml" + "groups.yaml" + "customize.yaml" + "secrets.yaml" +) + +TEMP_DIR=$(mktemp -d) + +for file in "${CONFIG_FILES[@]}"; do + if ha_cmd $TEST_IP "test -f $HA_CONFIG/$file"; then + echo " 📄 $file" + ha_cmd $TEST_IP "cat $HA_CONFIG/$file" > "$TEMP_DIR/$file" + cat "$TEMP_DIR/$file" | ha_cmd $PROD_IP "cat > $HA_CONFIG/$file" + else + echo " ⚠️ $file - nie znaleziono w TEST" + fi +done + +# Synchronizacja katalogów (opcjonalnie) +echo "" +echo "📁 Synchronizacja katalogów custom_components, themes, www..." +for dir in "custom_components" "themes" "www"; do + if ha_cmd $TEST_IP "test -d $HA_CONFIG/$dir"; then + echo " 📁 $dir/" + # Usunięcie starego katalogu na PROD + ha_cmd $PROD_IP "rm -rf $HA_CONFIG/$dir" + # Utworzenie archiwum na TEST + ha_cmd $TEST_IP "cd $HA_CONFIG && tar czf - $dir/" > "$TEMP_DIR/${dir}.tar.gz" + # Rozpakowanie na PROD + cat "$TEMP_DIR/${dir}.tar.gz" | ha_cmd $PROD_IP "cd $HA_CONFIG && tar xzf -" + fi +done + +# Czyszczenie +rm -rf "$TEMP_DIR" + +echo "" +echo "♻️ Restart Home Assistant na PROD..." +ha_cmd $PROD_IP "ha core restart" || ha_cmd $PROD_IP "systemctl restart home-assistant@homeassistant.service" || true + +echo "" +echo "✅ Synchronizacja zakończona pomyślnie!" +echo "" +echo "======================================" +echo "📊 Podsumowanie" +echo "======================================" +echo "Backup PROD: $PROD_BACKUP" +echo "Data sync: $(date)" +echo "" +echo "🌐 Sprawdź produkcję:" +echo " http://${PROD_IP}:8123" +echo "" +echo "↩️ Aby przywrócić backup:" +echo " ./restore-backup.sh $PROD_BACKUP" +echo "======================================"