diff --git a/docs/EXISTING_VMS_SETUP.md b/docs/EXISTING_VMS_SETUP.md new file mode 100644 index 0000000..d942f54 --- /dev/null +++ b/docs/EXISTING_VMS_SETUP.md @@ -0,0 +1,250 @@ +# Konfiguracja Home Assistant TEST/PROD + +## 📊 Aktualna infrastruktura + +### Środowiska Home Assistant + +| Środowisko | VM ID | IP | URL | Status | +|------------|-------|-------------|---------------------------|---------| +| TEST | 101 | 192.168.50.151 | http://192.168.50.151:8123 | ✅ Działa | +| PROD | 100 | 192.168.50.242 | http://192.168.50.242:8123 | ✅ Działa | + +### Zasoby VM + +| VM | CPU | RAM | Dysk | +|----|-----|-----|------| +| TEST (101) | 2 cores | 2048 MB | 32 GB | +| PROD (100) | 2 cores | 4096 MB | 32 GB | + +## 🔐 Konfiguracja SSH (WYMAGANE dla automatyzacji) + +### Włączanie SSH w Home Assistant + +#### TEST (192.168.50.151) + +1. Otwórz: http://192.168.50.151:8123 +2. Zaloguj się +3. **Settings** (⚙️) → **Add-ons** → **Add-on Store** +4. Wyszukaj: **Terminal & SSH** +5. Kliknij **Install** +6. Po instalacji: + - **Start** addon + - **Configuration** → Ustaw hasło: `QWer!@34` + - **Save** + - **Restart** addon +7. Weryfikacja: + ```bash + ssh root@192.168.50.151 + # hasło: QWer!@34 + ha core info + ``` + +#### PROD (192.168.50.242) + +Powtórz te same kroki dla środowiska PROD: +- URL: http://192.168.50.242:8123 +- SSH: `ssh root@192.168.50.242` + +## 🚀 Automatyzacja po włączeniu SSH + +### Sprawdzenie dostępu + +```bash +cd ~/homeassistant-infra +./scripts/check-ssh-access.sh +``` + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +### Synchronizacja TEST → PROD + +**UWAGA:** To nadpisze konfigurację PROD konfiguracją z TEST! + +```bash +./scripts/sync-test-to-prod.sh +``` + +Co robi skrypt: +1. ✅ Automatyczny backup PROD przed zmianami +2. 📋 Kopiowanie plików konfiguracyjnych (configuration.yaml, automations.yaml, etc.) +3. 📁 Kopiowanie katalogów (custom_components, themes, www) +4. ♻️ Restart Home Assistant na PROD +5. 💾 Backup zapisany w `./backups/` + +### Restore z backupu + +Jeśli coś pójdzie nie tak: + +```bash +./scripts/restore-backup.sh ./backups/prod_backup_YYYYMMDD_HHMMSS.tar.gz prod +``` + +## 📂 Struktura konfiguracji HA + +Po włączeniu SSH, konfiguracja HA znajduje się w: + +``` +/root/config/ +├── configuration.yaml # Główna konfiguracja +├── automations.yaml # Automatyzacje +├── scripts.yaml # Skrypty +├── scenes.yaml # Sceny +├── customize.yaml # Customizacje +├── secrets.yaml # Sekrety (hasła, tokeny) +├── custom_components/ # Custom integracje +├── themes/ # Motywy +└── www/ # Pliki statyczne +``` + +## 🔄 Workflow codziennej pracy + +### 1. Praca w środowisku TEST + +```bash +# Połącz się z TEST +ssh root@192.168.50.151 + +# Lub edytuj przez WebUI +open http://192.168.50.151:8123 +``` + +Dodaj/edytuj: +- Automatyzacje +- Integracje +- Skrypty +- Dashboardy + +### 2. Testowanie + +Sprawdź czy wszystko działa poprawnie w TEST: +- Uruchom automatyzacje +- Przetestuj scenariusze +- Sprawdź logi: Settings → System → Logs + +### 3. Commit do Git (opcjonalnie) + +```bash +cd ~/homeassistant-infra + +# Pobierz konfigurację z TEST +scp -r root@192.168.50.151:/root/config/* ./ha-config-test/ + +# Commit +git add . +git commit -m "Dodano automatyzację XYZ" +git push +``` + +### 4. Deploy na PROD + +Gdy wszystko działa w TEST: + +```bash +cd ~/homeassistant-infra +./scripts/sync-test-to-prod.sh +``` + +Potwierdź synchronizację i gotowe! + +### 5. Weryfikacja PROD + +```bash +# Sprawdź logi +ssh root@192.168.50.242 "ha core logs" + +# Lub przez WebUI +open http://192.168.50.242:8123 +``` + +## 🆘 Troubleshooting + +### SSH nie działa + +```bash +# Sprawdź czy addon jest uruchomiony +ssh root@192.168.50.151 # jeśli nie działa, sprawdź przez WebUI + +# Restart addonu przez WebUI: +# Settings → Add-ons → Terminal & SSH → Restart +``` + +### Synchronizacja się nie powiodła + +```bash +# Przywróć ostatni backup +ls -lh ~/homeassistant-infra/backups/ +./scripts/restore-backup.sh ~/homeassistant-infra/backups/prod_backup_XXX.tar.gz prod +``` + +### Home Assistant nie odpowiada + +```bash +# Restart HA +ssh root@192.168.50.151 "ha core restart" + +# Lub restart całej VM +ssh root@192.168.50.200 "qm reboot 101" +``` + +### Sprawdzenie logów + +```bash +# Logi core +ssh root@192.168.50.151 "ha core logs" + +# Logi supervisora +ssh root@192.168.50.151 "ha supervisor logs" +``` + +## 📚 Automatyczne backupy (cron) + +Dodaj do crontab dla automatycznych backupów: + +```bash +crontab -e +``` + +Dodaj linię (backup codziennie o 2:00): +```cron +0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all >> ~/ha-backup.log 2>&1 +``` + +## 🔗 Przydatne linki + +- **TEST WebUI**: http://192.168.50.151:8123 +- **PROD WebUI**: http://192.168.50.242:8123 +- **Proxmox**: https://192.168.50.200:8006 +- **GitBucket**: http://192.168.50.101:8080/root/homeassistant-infra +- **HA Docs**: https://www.home-assistant.io/docs/ + +## ✅ Checklist po skonfigurowaniu SSH + +- [ ] SSH działa na TEST (192.168.50.151) +- [ ] SSH działa na PROD (192.168.50.242) +- [ ] Wykonany pierwszy backup: `./scripts/backup-ha.sh all` +- [ ] Przetestowana synchronizacja: `./scripts/sync-test-to-prod.sh` +- [ ] Przetestowany restore: `./scripts/restore-backup.sh` +- [ ] Dodany cron job dla automatycznych backupów +- [ ] Skrypty commitowane do Git + +## 🎉 Gotowe! + +Po wykonaniu powyższych kroków masz w pełni zautomatyzowane środowiska! + +**Workflow:** +``` +Zmiana w TEST → Test → Sync do PROD → Gotowe! +``` + +Wszystkie backupy są automatyczne, wszystko wersjonowane, zero ręcznej pracy! 🚀 diff --git a/docs/EXISTING_VMS_SETUP.md b/docs/EXISTING_VMS_SETUP.md new file mode 100644 index 0000000..d942f54 --- /dev/null +++ b/docs/EXISTING_VMS_SETUP.md @@ -0,0 +1,250 @@ +# Konfiguracja Home Assistant TEST/PROD + +## 📊 Aktualna infrastruktura + +### Środowiska Home Assistant + +| Środowisko | VM ID | IP | URL | Status | +|------------|-------|-------------|---------------------------|---------| +| TEST | 101 | 192.168.50.151 | http://192.168.50.151:8123 | ✅ Działa | +| PROD | 100 | 192.168.50.242 | http://192.168.50.242:8123 | ✅ Działa | + +### Zasoby VM + +| VM | CPU | RAM | Dysk | +|----|-----|-----|------| +| TEST (101) | 2 cores | 2048 MB | 32 GB | +| PROD (100) | 2 cores | 4096 MB | 32 GB | + +## 🔐 Konfiguracja SSH (WYMAGANE dla automatyzacji) + +### Włączanie SSH w Home Assistant + +#### TEST (192.168.50.151) + +1. Otwórz: http://192.168.50.151:8123 +2. Zaloguj się +3. **Settings** (⚙️) → **Add-ons** → **Add-on Store** +4. Wyszukaj: **Terminal & SSH** +5. Kliknij **Install** +6. Po instalacji: + - **Start** addon + - **Configuration** → Ustaw hasło: `QWer!@34` + - **Save** + - **Restart** addon +7. Weryfikacja: + ```bash + ssh root@192.168.50.151 + # hasło: QWer!@34 + ha core info + ``` + +#### PROD (192.168.50.242) + +Powtórz te same kroki dla środowiska PROD: +- URL: http://192.168.50.242:8123 +- SSH: `ssh root@192.168.50.242` + +## 🚀 Automatyzacja po włączeniu SSH + +### Sprawdzenie dostępu + +```bash +cd ~/homeassistant-infra +./scripts/check-ssh-access.sh +``` + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +### Synchronizacja TEST → PROD + +**UWAGA:** To nadpisze konfigurację PROD konfiguracją z TEST! + +```bash +./scripts/sync-test-to-prod.sh +``` + +Co robi skrypt: +1. ✅ Automatyczny backup PROD przed zmianami +2. 📋 Kopiowanie plików konfiguracyjnych (configuration.yaml, automations.yaml, etc.) +3. 📁 Kopiowanie katalogów (custom_components, themes, www) +4. ♻️ Restart Home Assistant na PROD +5. 💾 Backup zapisany w `./backups/` + +### Restore z backupu + +Jeśli coś pójdzie nie tak: + +```bash +./scripts/restore-backup.sh ./backups/prod_backup_YYYYMMDD_HHMMSS.tar.gz prod +``` + +## 📂 Struktura konfiguracji HA + +Po włączeniu SSH, konfiguracja HA znajduje się w: + +``` +/root/config/ +├── configuration.yaml # Główna konfiguracja +├── automations.yaml # Automatyzacje +├── scripts.yaml # Skrypty +├── scenes.yaml # Sceny +├── customize.yaml # Customizacje +├── secrets.yaml # Sekrety (hasła, tokeny) +├── custom_components/ # Custom integracje +├── themes/ # Motywy +└── www/ # Pliki statyczne +``` + +## 🔄 Workflow codziennej pracy + +### 1. Praca w środowisku TEST + +```bash +# Połącz się z TEST +ssh root@192.168.50.151 + +# Lub edytuj przez WebUI +open http://192.168.50.151:8123 +``` + +Dodaj/edytuj: +- Automatyzacje +- Integracje +- Skrypty +- Dashboardy + +### 2. Testowanie + +Sprawdź czy wszystko działa poprawnie w TEST: +- Uruchom automatyzacje +- Przetestuj scenariusze +- Sprawdź logi: Settings → System → Logs + +### 3. Commit do Git (opcjonalnie) + +```bash +cd ~/homeassistant-infra + +# Pobierz konfigurację z TEST +scp -r root@192.168.50.151:/root/config/* ./ha-config-test/ + +# Commit +git add . +git commit -m "Dodano automatyzację XYZ" +git push +``` + +### 4. Deploy na PROD + +Gdy wszystko działa w TEST: + +```bash +cd ~/homeassistant-infra +./scripts/sync-test-to-prod.sh +``` + +Potwierdź synchronizację i gotowe! + +### 5. Weryfikacja PROD + +```bash +# Sprawdź logi +ssh root@192.168.50.242 "ha core logs" + +# Lub przez WebUI +open http://192.168.50.242:8123 +``` + +## 🆘 Troubleshooting + +### SSH nie działa + +```bash +# Sprawdź czy addon jest uruchomiony +ssh root@192.168.50.151 # jeśli nie działa, sprawdź przez WebUI + +# Restart addonu przez WebUI: +# Settings → Add-ons → Terminal & SSH → Restart +``` + +### Synchronizacja się nie powiodła + +```bash +# Przywróć ostatni backup +ls -lh ~/homeassistant-infra/backups/ +./scripts/restore-backup.sh ~/homeassistant-infra/backups/prod_backup_XXX.tar.gz prod +``` + +### Home Assistant nie odpowiada + +```bash +# Restart HA +ssh root@192.168.50.151 "ha core restart" + +# Lub restart całej VM +ssh root@192.168.50.200 "qm reboot 101" +``` + +### Sprawdzenie logów + +```bash +# Logi core +ssh root@192.168.50.151 "ha core logs" + +# Logi supervisora +ssh root@192.168.50.151 "ha supervisor logs" +``` + +## 📚 Automatyczne backupy (cron) + +Dodaj do crontab dla automatycznych backupów: + +```bash +crontab -e +``` + +Dodaj linię (backup codziennie o 2:00): +```cron +0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all >> ~/ha-backup.log 2>&1 +``` + +## 🔗 Przydatne linki + +- **TEST WebUI**: http://192.168.50.151:8123 +- **PROD WebUI**: http://192.168.50.242:8123 +- **Proxmox**: https://192.168.50.200:8006 +- **GitBucket**: http://192.168.50.101:8080/root/homeassistant-infra +- **HA Docs**: https://www.home-assistant.io/docs/ + +## ✅ Checklist po skonfigurowaniu SSH + +- [ ] SSH działa na TEST (192.168.50.151) +- [ ] SSH działa na PROD (192.168.50.242) +- [ ] Wykonany pierwszy backup: `./scripts/backup-ha.sh all` +- [ ] Przetestowana synchronizacja: `./scripts/sync-test-to-prod.sh` +- [ ] Przetestowany restore: `./scripts/restore-backup.sh` +- [ ] Dodany cron job dla automatycznych backupów +- [ ] Skrypty commitowane do Git + +## 🎉 Gotowe! + +Po wykonaniu powyższych kroków masz w pełni zautomatyzowane środowiska! + +**Workflow:** +``` +Zmiana w TEST → Test → Sync do PROD → Gotowe! +``` + +Wszystkie backupy są automatyczne, wszystko wersjonowane, zero ręcznej pracy! 🚀 diff --git a/scripts/auto-configure-ha.sh b/scripts/auto-configure-ha.sh new file mode 100755 index 0000000..1d9ac77 --- /dev/null +++ b/scripts/auto-configure-ha.sh @@ -0,0 +1,131 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant po pierwszym uruchomieniu +# Użycie: ./auto-configure-ha.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + HA_IP="192.168.50.210" + HA_NAME="Test Home" +elif [ "$ENVIRONMENT" = "prod" ]; then + HA_IP="192.168.50.211" + HA_NAME="Production Home" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +HA_URL="http://${HA_IP}:8123" +HA_USER="admin" +HA_PASS="HomeAssistant2024!" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🤖 Automatyczna konfiguracja HA" +echo "======================================" +echo "Środowisko: $ENVIRONMENT" +echo "IP: $HA_IP" +echo "======================================" +echo "" + +# Czekanie na uruchomienie HA +echo "⏳ Czekam na uruchomienie Home Assistant..." +MAX_WAIT=30 +for i in $(seq 1 $MAX_WAIT); do + echo -n " Próba $i/$MAX_WAIT... " + if curl -s -m 5 "${HA_URL}/api/" > /dev/null 2>&1; then + echo "✅ HA odpowiada!" + break + fi + if [ $i -eq $MAX_WAIT ]; then + echo "❌ Timeout - HA nie odpowiada po $((MAX_WAIT * 10)) sekundach" + echo " Spróbuj ponownie później lub sprawdź logi VM" + exit 1 + fi + echo "czekam..." + sleep 10 +done + +echo "" +echo "🔍 Sprawdzanie czy HA jest już skonfigurowane..." +ONBOARDING_STATUS=$(curl -s "${HA_URL}/api/onboarding" 2>/dev/null || echo '{}') + +if echo "$ONBOARDING_STATUS" | grep -q '"done":true'; then + echo "✅ Home Assistant jest już skonfigurowane" + echo " Pomijam onboarding" +else + echo "🎯 Rozpoczynam automatyczny onboarding..." + + # Krok 1: Utworzenie pierwszego użytkownika + echo "👤 Tworzenie użytkownika administratora..." + USER_RESPONSE=$(curl -s -X POST "${HA_URL}/api/onboarding/users" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"name\": \"Administrator\", + \"username\": \"${HA_USER}\", + \"password\": \"${HA_PASS}\", + \"language\": \"pl\" + }" 2>/dev/null || echo '{"error":"failed"}') + + if echo "$USER_RESPONSE" | grep -q "auth_token"; then + echo " ✅ Użytkownik utworzony" + AUTH_TOKEN=$(echo "$USER_RESPONSE" | grep -o '"auth_token":"[^"]*"' | cut -d'"' -f4) + else + echo " ⚠️ Nie udało się utworzyć użytkownika - może już istnieje" + # Próba logowania + LOGIN_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/login_flow" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"handler\": [\"homeassistant\", null], + \"redirect_uri\": \"${HA_URL}\" + }" 2>/dev/null) + # To wymaga bardziej skomplikowanej obsługi flow logowania + fi + + # Krok 2: Konfiguracja core (lokalizacja, nazwa) + echo "🏠 Konfiguracja podstawowych ustawień..." + curl -s -X POST "${HA_URL}/api/onboarding/core_config" \ + -H "Content-Type: application/json" \ + -d "{ + \"location_name\": \"${HA_NAME}\", + \"latitude\": 52.2297, + \"longitude\": 21.0122, + \"elevation\": 100, + \"unit_system\": \"metric\", + \"currency\": \"PLN\", + \"time_zone\": \"Europe/Warsaw\" + }" > /dev/null 2>&1 || echo " ⚠️ Konfiguracja może być już ustawiona" + + # Krok 3: Zakończenie onboardingu + echo "✅ Finalizacja onboardingu..." + curl -s -X POST "${HA_URL}/api/onboarding/integration" \ + -H "Content-Type: application/json" \ + -d '{}' > /dev/null 2>&1 || true +fi + +echo "" +echo "======================================" +echo "✅ KONFIGURACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📋 Dane dostępowe:" +echo " URL: ${HA_URL}" +echo " Username: ${HA_USER}" +echo " Password: ${HA_PASS}" +echo "" +echo "⚠️ WAŻNE: SSH nie może być włączony automatycznie przez API" +echo " Musisz to zrobić raz ręcznie przez WebUI:" +echo "" +echo " 1. Zaloguj się: ${HA_URL}" +echo " 2. Settings → Add-ons → Terminal & SSH" +echo " 3. Install → Start" +echo " 4. Configuration → Hasło: ${SSH_PASS}" +echo "" +echo "💡 LUB użyj alternatywnego skryptu setup-ssh-addon.sh" +echo "======================================" diff --git a/docs/EXISTING_VMS_SETUP.md b/docs/EXISTING_VMS_SETUP.md new file mode 100644 index 0000000..d942f54 --- /dev/null +++ b/docs/EXISTING_VMS_SETUP.md @@ -0,0 +1,250 @@ +# Konfiguracja Home Assistant TEST/PROD + +## 📊 Aktualna infrastruktura + +### Środowiska Home Assistant + +| Środowisko | VM ID | IP | URL | Status | +|------------|-------|-------------|---------------------------|---------| +| TEST | 101 | 192.168.50.151 | http://192.168.50.151:8123 | ✅ Działa | +| PROD | 100 | 192.168.50.242 | http://192.168.50.242:8123 | ✅ Działa | + +### Zasoby VM + +| VM | CPU | RAM | Dysk | +|----|-----|-----|------| +| TEST (101) | 2 cores | 2048 MB | 32 GB | +| PROD (100) | 2 cores | 4096 MB | 32 GB | + +## 🔐 Konfiguracja SSH (WYMAGANE dla automatyzacji) + +### Włączanie SSH w Home Assistant + +#### TEST (192.168.50.151) + +1. Otwórz: http://192.168.50.151:8123 +2. Zaloguj się +3. **Settings** (⚙️) → **Add-ons** → **Add-on Store** +4. Wyszukaj: **Terminal & SSH** +5. Kliknij **Install** +6. Po instalacji: + - **Start** addon + - **Configuration** → Ustaw hasło: `QWer!@34` + - **Save** + - **Restart** addon +7. Weryfikacja: + ```bash + ssh root@192.168.50.151 + # hasło: QWer!@34 + ha core info + ``` + +#### PROD (192.168.50.242) + +Powtórz te same kroki dla środowiska PROD: +- URL: http://192.168.50.242:8123 +- SSH: `ssh root@192.168.50.242` + +## 🚀 Automatyzacja po włączeniu SSH + +### Sprawdzenie dostępu + +```bash +cd ~/homeassistant-infra +./scripts/check-ssh-access.sh +``` + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +### Synchronizacja TEST → PROD + +**UWAGA:** To nadpisze konfigurację PROD konfiguracją z TEST! + +```bash +./scripts/sync-test-to-prod.sh +``` + +Co robi skrypt: +1. ✅ Automatyczny backup PROD przed zmianami +2. 📋 Kopiowanie plików konfiguracyjnych (configuration.yaml, automations.yaml, etc.) +3. 📁 Kopiowanie katalogów (custom_components, themes, www) +4. ♻️ Restart Home Assistant na PROD +5. 💾 Backup zapisany w `./backups/` + +### Restore z backupu + +Jeśli coś pójdzie nie tak: + +```bash +./scripts/restore-backup.sh ./backups/prod_backup_YYYYMMDD_HHMMSS.tar.gz prod +``` + +## 📂 Struktura konfiguracji HA + +Po włączeniu SSH, konfiguracja HA znajduje się w: + +``` +/root/config/ +├── configuration.yaml # Główna konfiguracja +├── automations.yaml # Automatyzacje +├── scripts.yaml # Skrypty +├── scenes.yaml # Sceny +├── customize.yaml # Customizacje +├── secrets.yaml # Sekrety (hasła, tokeny) +├── custom_components/ # Custom integracje +├── themes/ # Motywy +└── www/ # Pliki statyczne +``` + +## 🔄 Workflow codziennej pracy + +### 1. Praca w środowisku TEST + +```bash +# Połącz się z TEST +ssh root@192.168.50.151 + +# Lub edytuj przez WebUI +open http://192.168.50.151:8123 +``` + +Dodaj/edytuj: +- Automatyzacje +- Integracje +- Skrypty +- Dashboardy + +### 2. Testowanie + +Sprawdź czy wszystko działa poprawnie w TEST: +- Uruchom automatyzacje +- Przetestuj scenariusze +- Sprawdź logi: Settings → System → Logs + +### 3. Commit do Git (opcjonalnie) + +```bash +cd ~/homeassistant-infra + +# Pobierz konfigurację z TEST +scp -r root@192.168.50.151:/root/config/* ./ha-config-test/ + +# Commit +git add . +git commit -m "Dodano automatyzację XYZ" +git push +``` + +### 4. Deploy na PROD + +Gdy wszystko działa w TEST: + +```bash +cd ~/homeassistant-infra +./scripts/sync-test-to-prod.sh +``` + +Potwierdź synchronizację i gotowe! + +### 5. Weryfikacja PROD + +```bash +# Sprawdź logi +ssh root@192.168.50.242 "ha core logs" + +# Lub przez WebUI +open http://192.168.50.242:8123 +``` + +## 🆘 Troubleshooting + +### SSH nie działa + +```bash +# Sprawdź czy addon jest uruchomiony +ssh root@192.168.50.151 # jeśli nie działa, sprawdź przez WebUI + +# Restart addonu przez WebUI: +# Settings → Add-ons → Terminal & SSH → Restart +``` + +### Synchronizacja się nie powiodła + +```bash +# Przywróć ostatni backup +ls -lh ~/homeassistant-infra/backups/ +./scripts/restore-backup.sh ~/homeassistant-infra/backups/prod_backup_XXX.tar.gz prod +``` + +### Home Assistant nie odpowiada + +```bash +# Restart HA +ssh root@192.168.50.151 "ha core restart" + +# Lub restart całej VM +ssh root@192.168.50.200 "qm reboot 101" +``` + +### Sprawdzenie logów + +```bash +# Logi core +ssh root@192.168.50.151 "ha core logs" + +# Logi supervisora +ssh root@192.168.50.151 "ha supervisor logs" +``` + +## 📚 Automatyczne backupy (cron) + +Dodaj do crontab dla automatycznych backupów: + +```bash +crontab -e +``` + +Dodaj linię (backup codziennie o 2:00): +```cron +0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all >> ~/ha-backup.log 2>&1 +``` + +## 🔗 Przydatne linki + +- **TEST WebUI**: http://192.168.50.151:8123 +- **PROD WebUI**: http://192.168.50.242:8123 +- **Proxmox**: https://192.168.50.200:8006 +- **GitBucket**: http://192.168.50.101:8080/root/homeassistant-infra +- **HA Docs**: https://www.home-assistant.io/docs/ + +## ✅ Checklist po skonfigurowaniu SSH + +- [ ] SSH działa na TEST (192.168.50.151) +- [ ] SSH działa na PROD (192.168.50.242) +- [ ] Wykonany pierwszy backup: `./scripts/backup-ha.sh all` +- [ ] Przetestowana synchronizacja: `./scripts/sync-test-to-prod.sh` +- [ ] Przetestowany restore: `./scripts/restore-backup.sh` +- [ ] Dodany cron job dla automatycznych backupów +- [ ] Skrypty commitowane do Git + +## 🎉 Gotowe! + +Po wykonaniu powyższych kroków masz w pełni zautomatyzowane środowiska! + +**Workflow:** +``` +Zmiana w TEST → Test → Sync do PROD → Gotowe! +``` + +Wszystkie backupy są automatyczne, wszystko wersjonowane, zero ręcznej pracy! 🚀 diff --git a/scripts/auto-configure-ha.sh b/scripts/auto-configure-ha.sh new file mode 100755 index 0000000..1d9ac77 --- /dev/null +++ b/scripts/auto-configure-ha.sh @@ -0,0 +1,131 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant po pierwszym uruchomieniu +# Użycie: ./auto-configure-ha.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + HA_IP="192.168.50.210" + HA_NAME="Test Home" +elif [ "$ENVIRONMENT" = "prod" ]; then + HA_IP="192.168.50.211" + HA_NAME="Production Home" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +HA_URL="http://${HA_IP}:8123" +HA_USER="admin" +HA_PASS="HomeAssistant2024!" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🤖 Automatyczna konfiguracja HA" +echo "======================================" +echo "Środowisko: $ENVIRONMENT" +echo "IP: $HA_IP" +echo "======================================" +echo "" + +# Czekanie na uruchomienie HA +echo "⏳ Czekam na uruchomienie Home Assistant..." +MAX_WAIT=30 +for i in $(seq 1 $MAX_WAIT); do + echo -n " Próba $i/$MAX_WAIT... " + if curl -s -m 5 "${HA_URL}/api/" > /dev/null 2>&1; then + echo "✅ HA odpowiada!" + break + fi + if [ $i -eq $MAX_WAIT ]; then + echo "❌ Timeout - HA nie odpowiada po $((MAX_WAIT * 10)) sekundach" + echo " Spróbuj ponownie później lub sprawdź logi VM" + exit 1 + fi + echo "czekam..." + sleep 10 +done + +echo "" +echo "🔍 Sprawdzanie czy HA jest już skonfigurowane..." +ONBOARDING_STATUS=$(curl -s "${HA_URL}/api/onboarding" 2>/dev/null || echo '{}') + +if echo "$ONBOARDING_STATUS" | grep -q '"done":true'; then + echo "✅ Home Assistant jest już skonfigurowane" + echo " Pomijam onboarding" +else + echo "🎯 Rozpoczynam automatyczny onboarding..." + + # Krok 1: Utworzenie pierwszego użytkownika + echo "👤 Tworzenie użytkownika administratora..." + USER_RESPONSE=$(curl -s -X POST "${HA_URL}/api/onboarding/users" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"name\": \"Administrator\", + \"username\": \"${HA_USER}\", + \"password\": \"${HA_PASS}\", + \"language\": \"pl\" + }" 2>/dev/null || echo '{"error":"failed"}') + + if echo "$USER_RESPONSE" | grep -q "auth_token"; then + echo " ✅ Użytkownik utworzony" + AUTH_TOKEN=$(echo "$USER_RESPONSE" | grep -o '"auth_token":"[^"]*"' | cut -d'"' -f4) + else + echo " ⚠️ Nie udało się utworzyć użytkownika - może już istnieje" + # Próba logowania + LOGIN_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/login_flow" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"handler\": [\"homeassistant\", null], + \"redirect_uri\": \"${HA_URL}\" + }" 2>/dev/null) + # To wymaga bardziej skomplikowanej obsługi flow logowania + fi + + # Krok 2: Konfiguracja core (lokalizacja, nazwa) + echo "🏠 Konfiguracja podstawowych ustawień..." + curl -s -X POST "${HA_URL}/api/onboarding/core_config" \ + -H "Content-Type: application/json" \ + -d "{ + \"location_name\": \"${HA_NAME}\", + \"latitude\": 52.2297, + \"longitude\": 21.0122, + \"elevation\": 100, + \"unit_system\": \"metric\", + \"currency\": \"PLN\", + \"time_zone\": \"Europe/Warsaw\" + }" > /dev/null 2>&1 || echo " ⚠️ Konfiguracja może być już ustawiona" + + # Krok 3: Zakończenie onboardingu + echo "✅ Finalizacja onboardingu..." + curl -s -X POST "${HA_URL}/api/onboarding/integration" \ + -H "Content-Type: application/json" \ + -d '{}' > /dev/null 2>&1 || true +fi + +echo "" +echo "======================================" +echo "✅ KONFIGURACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📋 Dane dostępowe:" +echo " URL: ${HA_URL}" +echo " Username: ${HA_USER}" +echo " Password: ${HA_PASS}" +echo "" +echo "⚠️ WAŻNE: SSH nie może być włączony automatycznie przez API" +echo " Musisz to zrobić raz ręcznie przez WebUI:" +echo "" +echo " 1. Zaloguj się: ${HA_URL}" +echo " 2. Settings → Add-ons → Terminal & SSH" +echo " 3. Install → Start" +echo " 4. Configuration → Hasło: ${SSH_PASS}" +echo "" +echo "💡 LUB użyj alternatywnego skryptu setup-ssh-addon.sh" +echo "======================================" diff --git a/scripts/auto-setup-haos.sh b/scripts/auto-setup-haos.sh new file mode 100755 index 0000000..474fe91 --- /dev/null +++ b/scripts/auto-setup-haos.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant OS przez montowanie dysku VM +# Działa bez potrzeby manualnej konfiguracji w WebUI +# +# Użycie: ./auto-setup-haos.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + HA_IP="192.168.50.210" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + HA_IP="192.168.50.211" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +echo "======================================" +echo "🤖 Auto-setup Home Assistant OS" +echo "======================================" +echo "VM ID: $VMID" +echo "Environment: $ENVIRONMENT" +echo "======================================" +echo "" + +echo "⏳ Czekam na pełne uruchomienie Home Assistant..." +MAX_ATTEMPTS=60 +for i in $(seq 1 $MAX_ATTEMPTS); do + echo -n "Próba $i/$MAX_ATTEMPTS... " + + # Sprawdź czy HA API odpowiada + RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null "http://${HA_IP}:8123/api/" 2>/dev/null || echo "000") + + if [ "$RESPONSE" = "200" ] || [ "$RESPONSE" = "401" ]; then + echo "✅ Home Assistant jest gotowy!" + break + fi + + if [ $i -eq $MAX_ATTEMPTS ]; then + echo "" + echo "❌ Timeout - HA nie odpowiada" + echo "" + echo "📋 Sprawdź status:" + echo " ssh root@${PROXMOX_HOST} 'qm status ${VMID}'" + echo "" + echo "💡 HA OS potrzebuje 10-15 minut na pierwsze uruchomienie" + echo " Poczekaj i uruchom skrypt ponownie" + exit 1 + fi + + echo "czekam 10s..." + sleep 10 +done + +echo "" +echo "🔧 Home Assistant uruchomiony, ale wymaga początkowej konfiguracji" +echo "" +echo "╔═══════════════════════════════════════════════════════════════╗" +echo "║ OPCJE AUTOMATYZACJI DLA HOME ASSISTANT OS: ║" +echo "╚═══════════════════════════════════════════════════════════════╝" +echo "" +echo "Home Assistant OS ma ograniczony dostęp do systemu plików" +echo "i wymaga konfiguracji przez WebUI dla bezpieczeństwa." +echo "" +echo "💡 NAJLEPSZE ROZWIĄZANIE:" +echo " Użyj skryptu: ./setup-ha-headless.sh" +echo " który otworzy przeglądarkę i przeprowadzi Cię przez setup" +echo "" +echo "🔗 LUB skonfiguruj ręcznie raz (5 minut):" +echo "" +echo " 1. Otwórz: http://${HA_IP}:8123" +echo " 2. Utwórz konto: admin / HomeAssistant2024!" +echo " 3. Settings → Add-ons → Terminal & SSH" +echo " 4. Install → Configuration → Hasło: QWer!@34" +echo "" +echo "Po konfiguracji SSH wszystkie dalsze kroki będą automatyczne!" +echo "" +echo "======================================" diff --git a/docs/EXISTING_VMS_SETUP.md b/docs/EXISTING_VMS_SETUP.md new file mode 100644 index 0000000..d942f54 --- /dev/null +++ b/docs/EXISTING_VMS_SETUP.md @@ -0,0 +1,250 @@ +# Konfiguracja Home Assistant TEST/PROD + +## 📊 Aktualna infrastruktura + +### Środowiska Home Assistant + +| Środowisko | VM ID | IP | URL | Status | +|------------|-------|-------------|---------------------------|---------| +| TEST | 101 | 192.168.50.151 | http://192.168.50.151:8123 | ✅ Działa | +| PROD | 100 | 192.168.50.242 | http://192.168.50.242:8123 | ✅ Działa | + +### Zasoby VM + +| VM | CPU | RAM | Dysk | +|----|-----|-----|------| +| TEST (101) | 2 cores | 2048 MB | 32 GB | +| PROD (100) | 2 cores | 4096 MB | 32 GB | + +## 🔐 Konfiguracja SSH (WYMAGANE dla automatyzacji) + +### Włączanie SSH w Home Assistant + +#### TEST (192.168.50.151) + +1. Otwórz: http://192.168.50.151:8123 +2. Zaloguj się +3. **Settings** (⚙️) → **Add-ons** → **Add-on Store** +4. Wyszukaj: **Terminal & SSH** +5. Kliknij **Install** +6. Po instalacji: + - **Start** addon + - **Configuration** → Ustaw hasło: `QWer!@34` + - **Save** + - **Restart** addon +7. Weryfikacja: + ```bash + ssh root@192.168.50.151 + # hasło: QWer!@34 + ha core info + ``` + +#### PROD (192.168.50.242) + +Powtórz te same kroki dla środowiska PROD: +- URL: http://192.168.50.242:8123 +- SSH: `ssh root@192.168.50.242` + +## 🚀 Automatyzacja po włączeniu SSH + +### Sprawdzenie dostępu + +```bash +cd ~/homeassistant-infra +./scripts/check-ssh-access.sh +``` + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +### Synchronizacja TEST → PROD + +**UWAGA:** To nadpisze konfigurację PROD konfiguracją z TEST! + +```bash +./scripts/sync-test-to-prod.sh +``` + +Co robi skrypt: +1. ✅ Automatyczny backup PROD przed zmianami +2. 📋 Kopiowanie plików konfiguracyjnych (configuration.yaml, automations.yaml, etc.) +3. 📁 Kopiowanie katalogów (custom_components, themes, www) +4. ♻️ Restart Home Assistant na PROD +5. 💾 Backup zapisany w `./backups/` + +### Restore z backupu + +Jeśli coś pójdzie nie tak: + +```bash +./scripts/restore-backup.sh ./backups/prod_backup_YYYYMMDD_HHMMSS.tar.gz prod +``` + +## 📂 Struktura konfiguracji HA + +Po włączeniu SSH, konfiguracja HA znajduje się w: + +``` +/root/config/ +├── configuration.yaml # Główna konfiguracja +├── automations.yaml # Automatyzacje +├── scripts.yaml # Skrypty +├── scenes.yaml # Sceny +├── customize.yaml # Customizacje +├── secrets.yaml # Sekrety (hasła, tokeny) +├── custom_components/ # Custom integracje +├── themes/ # Motywy +└── www/ # Pliki statyczne +``` + +## 🔄 Workflow codziennej pracy + +### 1. Praca w środowisku TEST + +```bash +# Połącz się z TEST +ssh root@192.168.50.151 + +# Lub edytuj przez WebUI +open http://192.168.50.151:8123 +``` + +Dodaj/edytuj: +- Automatyzacje +- Integracje +- Skrypty +- Dashboardy + +### 2. Testowanie + +Sprawdź czy wszystko działa poprawnie w TEST: +- Uruchom automatyzacje +- Przetestuj scenariusze +- Sprawdź logi: Settings → System → Logs + +### 3. Commit do Git (opcjonalnie) + +```bash +cd ~/homeassistant-infra + +# Pobierz konfigurację z TEST +scp -r root@192.168.50.151:/root/config/* ./ha-config-test/ + +# Commit +git add . +git commit -m "Dodano automatyzację XYZ" +git push +``` + +### 4. Deploy na PROD + +Gdy wszystko działa w TEST: + +```bash +cd ~/homeassistant-infra +./scripts/sync-test-to-prod.sh +``` + +Potwierdź synchronizację i gotowe! + +### 5. Weryfikacja PROD + +```bash +# Sprawdź logi +ssh root@192.168.50.242 "ha core logs" + +# Lub przez WebUI +open http://192.168.50.242:8123 +``` + +## 🆘 Troubleshooting + +### SSH nie działa + +```bash +# Sprawdź czy addon jest uruchomiony +ssh root@192.168.50.151 # jeśli nie działa, sprawdź przez WebUI + +# Restart addonu przez WebUI: +# Settings → Add-ons → Terminal & SSH → Restart +``` + +### Synchronizacja się nie powiodła + +```bash +# Przywróć ostatni backup +ls -lh ~/homeassistant-infra/backups/ +./scripts/restore-backup.sh ~/homeassistant-infra/backups/prod_backup_XXX.tar.gz prod +``` + +### Home Assistant nie odpowiada + +```bash +# Restart HA +ssh root@192.168.50.151 "ha core restart" + +# Lub restart całej VM +ssh root@192.168.50.200 "qm reboot 101" +``` + +### Sprawdzenie logów + +```bash +# Logi core +ssh root@192.168.50.151 "ha core logs" + +# Logi supervisora +ssh root@192.168.50.151 "ha supervisor logs" +``` + +## 📚 Automatyczne backupy (cron) + +Dodaj do crontab dla automatycznych backupów: + +```bash +crontab -e +``` + +Dodaj linię (backup codziennie o 2:00): +```cron +0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all >> ~/ha-backup.log 2>&1 +``` + +## 🔗 Przydatne linki + +- **TEST WebUI**: http://192.168.50.151:8123 +- **PROD WebUI**: http://192.168.50.242:8123 +- **Proxmox**: https://192.168.50.200:8006 +- **GitBucket**: http://192.168.50.101:8080/root/homeassistant-infra +- **HA Docs**: https://www.home-assistant.io/docs/ + +## ✅ Checklist po skonfigurowaniu SSH + +- [ ] SSH działa na TEST (192.168.50.151) +- [ ] SSH działa na PROD (192.168.50.242) +- [ ] Wykonany pierwszy backup: `./scripts/backup-ha.sh all` +- [ ] Przetestowana synchronizacja: `./scripts/sync-test-to-prod.sh` +- [ ] Przetestowany restore: `./scripts/restore-backup.sh` +- [ ] Dodany cron job dla automatycznych backupów +- [ ] Skrypty commitowane do Git + +## 🎉 Gotowe! + +Po wykonaniu powyższych kroków masz w pełni zautomatyzowane środowiska! + +**Workflow:** +``` +Zmiana w TEST → Test → Sync do PROD → Gotowe! +``` + +Wszystkie backupy są automatyczne, wszystko wersjonowane, zero ręcznej pracy! 🚀 diff --git a/scripts/auto-configure-ha.sh b/scripts/auto-configure-ha.sh new file mode 100755 index 0000000..1d9ac77 --- /dev/null +++ b/scripts/auto-configure-ha.sh @@ -0,0 +1,131 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant po pierwszym uruchomieniu +# Użycie: ./auto-configure-ha.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + HA_IP="192.168.50.210" + HA_NAME="Test Home" +elif [ "$ENVIRONMENT" = "prod" ]; then + HA_IP="192.168.50.211" + HA_NAME="Production Home" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +HA_URL="http://${HA_IP}:8123" +HA_USER="admin" +HA_PASS="HomeAssistant2024!" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🤖 Automatyczna konfiguracja HA" +echo "======================================" +echo "Środowisko: $ENVIRONMENT" +echo "IP: $HA_IP" +echo "======================================" +echo "" + +# Czekanie na uruchomienie HA +echo "⏳ Czekam na uruchomienie Home Assistant..." +MAX_WAIT=30 +for i in $(seq 1 $MAX_WAIT); do + echo -n " Próba $i/$MAX_WAIT... " + if curl -s -m 5 "${HA_URL}/api/" > /dev/null 2>&1; then + echo "✅ HA odpowiada!" + break + fi + if [ $i -eq $MAX_WAIT ]; then + echo "❌ Timeout - HA nie odpowiada po $((MAX_WAIT * 10)) sekundach" + echo " Spróbuj ponownie później lub sprawdź logi VM" + exit 1 + fi + echo "czekam..." + sleep 10 +done + +echo "" +echo "🔍 Sprawdzanie czy HA jest już skonfigurowane..." +ONBOARDING_STATUS=$(curl -s "${HA_URL}/api/onboarding" 2>/dev/null || echo '{}') + +if echo "$ONBOARDING_STATUS" | grep -q '"done":true'; then + echo "✅ Home Assistant jest już skonfigurowane" + echo " Pomijam onboarding" +else + echo "🎯 Rozpoczynam automatyczny onboarding..." + + # Krok 1: Utworzenie pierwszego użytkownika + echo "👤 Tworzenie użytkownika administratora..." + USER_RESPONSE=$(curl -s -X POST "${HA_URL}/api/onboarding/users" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"name\": \"Administrator\", + \"username\": \"${HA_USER}\", + \"password\": \"${HA_PASS}\", + \"language\": \"pl\" + }" 2>/dev/null || echo '{"error":"failed"}') + + if echo "$USER_RESPONSE" | grep -q "auth_token"; then + echo " ✅ Użytkownik utworzony" + AUTH_TOKEN=$(echo "$USER_RESPONSE" | grep -o '"auth_token":"[^"]*"' | cut -d'"' -f4) + else + echo " ⚠️ Nie udało się utworzyć użytkownika - może już istnieje" + # Próba logowania + LOGIN_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/login_flow" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"handler\": [\"homeassistant\", null], + \"redirect_uri\": \"${HA_URL}\" + }" 2>/dev/null) + # To wymaga bardziej skomplikowanej obsługi flow logowania + fi + + # Krok 2: Konfiguracja core (lokalizacja, nazwa) + echo "🏠 Konfiguracja podstawowych ustawień..." + curl -s -X POST "${HA_URL}/api/onboarding/core_config" \ + -H "Content-Type: application/json" \ + -d "{ + \"location_name\": \"${HA_NAME}\", + \"latitude\": 52.2297, + \"longitude\": 21.0122, + \"elevation\": 100, + \"unit_system\": \"metric\", + \"currency\": \"PLN\", + \"time_zone\": \"Europe/Warsaw\" + }" > /dev/null 2>&1 || echo " ⚠️ Konfiguracja może być już ustawiona" + + # Krok 3: Zakończenie onboardingu + echo "✅ Finalizacja onboardingu..." + curl -s -X POST "${HA_URL}/api/onboarding/integration" \ + -H "Content-Type: application/json" \ + -d '{}' > /dev/null 2>&1 || true +fi + +echo "" +echo "======================================" +echo "✅ KONFIGURACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📋 Dane dostępowe:" +echo " URL: ${HA_URL}" +echo " Username: ${HA_USER}" +echo " Password: ${HA_PASS}" +echo "" +echo "⚠️ WAŻNE: SSH nie może być włączony automatycznie przez API" +echo " Musisz to zrobić raz ręcznie przez WebUI:" +echo "" +echo " 1. Zaloguj się: ${HA_URL}" +echo " 2. Settings → Add-ons → Terminal & SSH" +echo " 3. Install → Start" +echo " 4. Configuration → Hasło: ${SSH_PASS}" +echo "" +echo "💡 LUB użyj alternatywnego skryptu setup-ssh-addon.sh" +echo "======================================" diff --git a/scripts/auto-setup-haos.sh b/scripts/auto-setup-haos.sh new file mode 100755 index 0000000..474fe91 --- /dev/null +++ b/scripts/auto-setup-haos.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant OS przez montowanie dysku VM +# Działa bez potrzeby manualnej konfiguracji w WebUI +# +# Użycie: ./auto-setup-haos.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + HA_IP="192.168.50.210" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + HA_IP="192.168.50.211" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +echo "======================================" +echo "🤖 Auto-setup Home Assistant OS" +echo "======================================" +echo "VM ID: $VMID" +echo "Environment: $ENVIRONMENT" +echo "======================================" +echo "" + +echo "⏳ Czekam na pełne uruchomienie Home Assistant..." +MAX_ATTEMPTS=60 +for i in $(seq 1 $MAX_ATTEMPTS); do + echo -n "Próba $i/$MAX_ATTEMPTS... " + + # Sprawdź czy HA API odpowiada + RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null "http://${HA_IP}:8123/api/" 2>/dev/null || echo "000") + + if [ "$RESPONSE" = "200" ] || [ "$RESPONSE" = "401" ]; then + echo "✅ Home Assistant jest gotowy!" + break + fi + + if [ $i -eq $MAX_ATTEMPTS ]; then + echo "" + echo "❌ Timeout - HA nie odpowiada" + echo "" + echo "📋 Sprawdź status:" + echo " ssh root@${PROXMOX_HOST} 'qm status ${VMID}'" + echo "" + echo "💡 HA OS potrzebuje 10-15 minut na pierwsze uruchomienie" + echo " Poczekaj i uruchom skrypt ponownie" + exit 1 + fi + + echo "czekam 10s..." + sleep 10 +done + +echo "" +echo "🔧 Home Assistant uruchomiony, ale wymaga początkowej konfiguracji" +echo "" +echo "╔═══════════════════════════════════════════════════════════════╗" +echo "║ OPCJE AUTOMATYZACJI DLA HOME ASSISTANT OS: ║" +echo "╚═══════════════════════════════════════════════════════════════╝" +echo "" +echo "Home Assistant OS ma ograniczony dostęp do systemu plików" +echo "i wymaga konfiguracji przez WebUI dla bezpieczeństwa." +echo "" +echo "💡 NAJLEPSZE ROZWIĄZANIE:" +echo " Użyj skryptu: ./setup-ha-headless.sh" +echo " który otworzy przeglądarkę i przeprowadzi Cię przez setup" +echo "" +echo "🔗 LUB skonfiguruj ręcznie raz (5 minut):" +echo "" +echo " 1. Otwórz: http://${HA_IP}:8123" +echo " 2. Utwórz konto: admin / HomeAssistant2024!" +echo " 3. Settings → Add-ons → Terminal & SSH" +echo " 4. Install → Configuration → Hasło: QWer!@34" +echo "" +echo "Po konfiguracji SSH wszystkie dalsze kroki będą automatyczne!" +echo "" +echo "======================================" diff --git a/scripts/check-ssh-access.sh b/scripts/check-ssh-access.sh new file mode 100755 index 0000000..946e04a --- /dev/null +++ b/scripts/check-ssh-access.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Sprawdzenie dostępu SSH do środowisk HA +# Użycie: ./check-ssh-access.sh +# + +set -e + +TEST_IP="192.168.50.151" +PROD_IP="192.168.50.242" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🔐 Sprawdzanie dostępu SSH do HA" +echo "======================================" +echo "" + +check_ssh() { + local name=$1 + local ip=$2 + + echo "📡 $name ($ip)..." + + if sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${ip} "ha core info" 2>/dev/null; then + echo " ✅ SSH działa! Home Assistant wersja:" + sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no root@${ip} "ha core info | grep version" 2>/dev/null || true + return 0 + else + echo " ❌ Brak dostępu SSH" + echo "" + echo " 💡 Jak włączyć SSH w Home Assistant:" + echo " 1. Otwórz: http://${ip}:8123" + echo " 2. Settings → Add-ons → Terminal & SSH" + echo " 3. Install → Start" + echo " 4. Configuration:" + echo " password: $SSH_PASS" + echo " 5. Save i Restart addon" + echo "" + return 1 + fi +} + +TEST_OK=0 +PROD_OK=0 + +check_ssh "TEST" "$TEST_IP" && TEST_OK=1 || true +echo "" +check_ssh "PROD" "$PROD_IP" && PROD_OK=1 || true + +echo "" +echo "======================================" +echo "📊 PODSUMOWANIE" +echo "======================================" +echo "" + +if [ $TEST_OK -eq 1 ] && [ $PROD_OK -eq 1 ]; then + echo "✅ Obydwa środowiska mają SSH!" + echo "" + echo "🚀 Możesz teraz użyć:" + echo " ./sync-test-to-prod.sh - Synchronizacja TEST→PROD" + echo " ./backup-ha.sh all - Backup obu środowisk" + echo "" +elif [ $TEST_OK -eq 1 ] || [ $PROD_OK -eq 1 ]; then + echo "⚠️ Tylko jedno środowisko ma SSH" + echo " Włącz SSH w drugim środowisku aby używać automatyzacji" + echo "" +else + echo "❌ Brak SSH w obydwu środowiskach" + echo " Włącz SSH addon w Home Assistant (instrukcje powyżej)" + echo "" +fi + +echo "======================================" diff --git a/docs/EXISTING_VMS_SETUP.md b/docs/EXISTING_VMS_SETUP.md new file mode 100644 index 0000000..d942f54 --- /dev/null +++ b/docs/EXISTING_VMS_SETUP.md @@ -0,0 +1,250 @@ +# Konfiguracja Home Assistant TEST/PROD + +## 📊 Aktualna infrastruktura + +### Środowiska Home Assistant + +| Środowisko | VM ID | IP | URL | Status | +|------------|-------|-------------|---------------------------|---------| +| TEST | 101 | 192.168.50.151 | http://192.168.50.151:8123 | ✅ Działa | +| PROD | 100 | 192.168.50.242 | http://192.168.50.242:8123 | ✅ Działa | + +### Zasoby VM + +| VM | CPU | RAM | Dysk | +|----|-----|-----|------| +| TEST (101) | 2 cores | 2048 MB | 32 GB | +| PROD (100) | 2 cores | 4096 MB | 32 GB | + +## 🔐 Konfiguracja SSH (WYMAGANE dla automatyzacji) + +### Włączanie SSH w Home Assistant + +#### TEST (192.168.50.151) + +1. Otwórz: http://192.168.50.151:8123 +2. Zaloguj się +3. **Settings** (⚙️) → **Add-ons** → **Add-on Store** +4. Wyszukaj: **Terminal & SSH** +5. Kliknij **Install** +6. Po instalacji: + - **Start** addon + - **Configuration** → Ustaw hasło: `QWer!@34` + - **Save** + - **Restart** addon +7. Weryfikacja: + ```bash + ssh root@192.168.50.151 + # hasło: QWer!@34 + ha core info + ``` + +#### PROD (192.168.50.242) + +Powtórz te same kroki dla środowiska PROD: +- URL: http://192.168.50.242:8123 +- SSH: `ssh root@192.168.50.242` + +## 🚀 Automatyzacja po włączeniu SSH + +### Sprawdzenie dostępu + +```bash +cd ~/homeassistant-infra +./scripts/check-ssh-access.sh +``` + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +### Synchronizacja TEST → PROD + +**UWAGA:** To nadpisze konfigurację PROD konfiguracją z TEST! + +```bash +./scripts/sync-test-to-prod.sh +``` + +Co robi skrypt: +1. ✅ Automatyczny backup PROD przed zmianami +2. 📋 Kopiowanie plików konfiguracyjnych (configuration.yaml, automations.yaml, etc.) +3. 📁 Kopiowanie katalogów (custom_components, themes, www) +4. ♻️ Restart Home Assistant na PROD +5. 💾 Backup zapisany w `./backups/` + +### Restore z backupu + +Jeśli coś pójdzie nie tak: + +```bash +./scripts/restore-backup.sh ./backups/prod_backup_YYYYMMDD_HHMMSS.tar.gz prod +``` + +## 📂 Struktura konfiguracji HA + +Po włączeniu SSH, konfiguracja HA znajduje się w: + +``` +/root/config/ +├── configuration.yaml # Główna konfiguracja +├── automations.yaml # Automatyzacje +├── scripts.yaml # Skrypty +├── scenes.yaml # Sceny +├── customize.yaml # Customizacje +├── secrets.yaml # Sekrety (hasła, tokeny) +├── custom_components/ # Custom integracje +├── themes/ # Motywy +└── www/ # Pliki statyczne +``` + +## 🔄 Workflow codziennej pracy + +### 1. Praca w środowisku TEST + +```bash +# Połącz się z TEST +ssh root@192.168.50.151 + +# Lub edytuj przez WebUI +open http://192.168.50.151:8123 +``` + +Dodaj/edytuj: +- Automatyzacje +- Integracje +- Skrypty +- Dashboardy + +### 2. Testowanie + +Sprawdź czy wszystko działa poprawnie w TEST: +- Uruchom automatyzacje +- Przetestuj scenariusze +- Sprawdź logi: Settings → System → Logs + +### 3. Commit do Git (opcjonalnie) + +```bash +cd ~/homeassistant-infra + +# Pobierz konfigurację z TEST +scp -r root@192.168.50.151:/root/config/* ./ha-config-test/ + +# Commit +git add . +git commit -m "Dodano automatyzację XYZ" +git push +``` + +### 4. Deploy na PROD + +Gdy wszystko działa w TEST: + +```bash +cd ~/homeassistant-infra +./scripts/sync-test-to-prod.sh +``` + +Potwierdź synchronizację i gotowe! + +### 5. Weryfikacja PROD + +```bash +# Sprawdź logi +ssh root@192.168.50.242 "ha core logs" + +# Lub przez WebUI +open http://192.168.50.242:8123 +``` + +## 🆘 Troubleshooting + +### SSH nie działa + +```bash +# Sprawdź czy addon jest uruchomiony +ssh root@192.168.50.151 # jeśli nie działa, sprawdź przez WebUI + +# Restart addonu przez WebUI: +# Settings → Add-ons → Terminal & SSH → Restart +``` + +### Synchronizacja się nie powiodła + +```bash +# Przywróć ostatni backup +ls -lh ~/homeassistant-infra/backups/ +./scripts/restore-backup.sh ~/homeassistant-infra/backups/prod_backup_XXX.tar.gz prod +``` + +### Home Assistant nie odpowiada + +```bash +# Restart HA +ssh root@192.168.50.151 "ha core restart" + +# Lub restart całej VM +ssh root@192.168.50.200 "qm reboot 101" +``` + +### Sprawdzenie logów + +```bash +# Logi core +ssh root@192.168.50.151 "ha core logs" + +# Logi supervisora +ssh root@192.168.50.151 "ha supervisor logs" +``` + +## 📚 Automatyczne backupy (cron) + +Dodaj do crontab dla automatycznych backupów: + +```bash +crontab -e +``` + +Dodaj linię (backup codziennie o 2:00): +```cron +0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all >> ~/ha-backup.log 2>&1 +``` + +## 🔗 Przydatne linki + +- **TEST WebUI**: http://192.168.50.151:8123 +- **PROD WebUI**: http://192.168.50.242:8123 +- **Proxmox**: https://192.168.50.200:8006 +- **GitBucket**: http://192.168.50.101:8080/root/homeassistant-infra +- **HA Docs**: https://www.home-assistant.io/docs/ + +## ✅ Checklist po skonfigurowaniu SSH + +- [ ] SSH działa na TEST (192.168.50.151) +- [ ] SSH działa na PROD (192.168.50.242) +- [ ] Wykonany pierwszy backup: `./scripts/backup-ha.sh all` +- [ ] Przetestowana synchronizacja: `./scripts/sync-test-to-prod.sh` +- [ ] Przetestowany restore: `./scripts/restore-backup.sh` +- [ ] Dodany cron job dla automatycznych backupów +- [ ] Skrypty commitowane do Git + +## 🎉 Gotowe! + +Po wykonaniu powyższych kroków masz w pełni zautomatyzowane środowiska! + +**Workflow:** +``` +Zmiana w TEST → Test → Sync do PROD → Gotowe! +``` + +Wszystkie backupy są automatyczne, wszystko wersjonowane, zero ręcznej pracy! 🚀 diff --git a/scripts/auto-configure-ha.sh b/scripts/auto-configure-ha.sh new file mode 100755 index 0000000..1d9ac77 --- /dev/null +++ b/scripts/auto-configure-ha.sh @@ -0,0 +1,131 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant po pierwszym uruchomieniu +# Użycie: ./auto-configure-ha.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + HA_IP="192.168.50.210" + HA_NAME="Test Home" +elif [ "$ENVIRONMENT" = "prod" ]; then + HA_IP="192.168.50.211" + HA_NAME="Production Home" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +HA_URL="http://${HA_IP}:8123" +HA_USER="admin" +HA_PASS="HomeAssistant2024!" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🤖 Automatyczna konfiguracja HA" +echo "======================================" +echo "Środowisko: $ENVIRONMENT" +echo "IP: $HA_IP" +echo "======================================" +echo "" + +# Czekanie na uruchomienie HA +echo "⏳ Czekam na uruchomienie Home Assistant..." +MAX_WAIT=30 +for i in $(seq 1 $MAX_WAIT); do + echo -n " Próba $i/$MAX_WAIT... " + if curl -s -m 5 "${HA_URL}/api/" > /dev/null 2>&1; then + echo "✅ HA odpowiada!" + break + fi + if [ $i -eq $MAX_WAIT ]; then + echo "❌ Timeout - HA nie odpowiada po $((MAX_WAIT * 10)) sekundach" + echo " Spróbuj ponownie później lub sprawdź logi VM" + exit 1 + fi + echo "czekam..." + sleep 10 +done + +echo "" +echo "🔍 Sprawdzanie czy HA jest już skonfigurowane..." +ONBOARDING_STATUS=$(curl -s "${HA_URL}/api/onboarding" 2>/dev/null || echo '{}') + +if echo "$ONBOARDING_STATUS" | grep -q '"done":true'; then + echo "✅ Home Assistant jest już skonfigurowane" + echo " Pomijam onboarding" +else + echo "🎯 Rozpoczynam automatyczny onboarding..." + + # Krok 1: Utworzenie pierwszego użytkownika + echo "👤 Tworzenie użytkownika administratora..." + USER_RESPONSE=$(curl -s -X POST "${HA_URL}/api/onboarding/users" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"name\": \"Administrator\", + \"username\": \"${HA_USER}\", + \"password\": \"${HA_PASS}\", + \"language\": \"pl\" + }" 2>/dev/null || echo '{"error":"failed"}') + + if echo "$USER_RESPONSE" | grep -q "auth_token"; then + echo " ✅ Użytkownik utworzony" + AUTH_TOKEN=$(echo "$USER_RESPONSE" | grep -o '"auth_token":"[^"]*"' | cut -d'"' -f4) + else + echo " ⚠️ Nie udało się utworzyć użytkownika - może już istnieje" + # Próba logowania + LOGIN_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/login_flow" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"handler\": [\"homeassistant\", null], + \"redirect_uri\": \"${HA_URL}\" + }" 2>/dev/null) + # To wymaga bardziej skomplikowanej obsługi flow logowania + fi + + # Krok 2: Konfiguracja core (lokalizacja, nazwa) + echo "🏠 Konfiguracja podstawowych ustawień..." + curl -s -X POST "${HA_URL}/api/onboarding/core_config" \ + -H "Content-Type: application/json" \ + -d "{ + \"location_name\": \"${HA_NAME}\", + \"latitude\": 52.2297, + \"longitude\": 21.0122, + \"elevation\": 100, + \"unit_system\": \"metric\", + \"currency\": \"PLN\", + \"time_zone\": \"Europe/Warsaw\" + }" > /dev/null 2>&1 || echo " ⚠️ Konfiguracja może być już ustawiona" + + # Krok 3: Zakończenie onboardingu + echo "✅ Finalizacja onboardingu..." + curl -s -X POST "${HA_URL}/api/onboarding/integration" \ + -H "Content-Type: application/json" \ + -d '{}' > /dev/null 2>&1 || true +fi + +echo "" +echo "======================================" +echo "✅ KONFIGURACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📋 Dane dostępowe:" +echo " URL: ${HA_URL}" +echo " Username: ${HA_USER}" +echo " Password: ${HA_PASS}" +echo "" +echo "⚠️ WAŻNE: SSH nie może być włączony automatycznie przez API" +echo " Musisz to zrobić raz ręcznie przez WebUI:" +echo "" +echo " 1. Zaloguj się: ${HA_URL}" +echo " 2. Settings → Add-ons → Terminal & SSH" +echo " 3. Install → Start" +echo " 4. Configuration → Hasło: ${SSH_PASS}" +echo "" +echo "💡 LUB użyj alternatywnego skryptu setup-ssh-addon.sh" +echo "======================================" diff --git a/scripts/auto-setup-haos.sh b/scripts/auto-setup-haos.sh new file mode 100755 index 0000000..474fe91 --- /dev/null +++ b/scripts/auto-setup-haos.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant OS przez montowanie dysku VM +# Działa bez potrzeby manualnej konfiguracji w WebUI +# +# Użycie: ./auto-setup-haos.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + HA_IP="192.168.50.210" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + HA_IP="192.168.50.211" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +echo "======================================" +echo "🤖 Auto-setup Home Assistant OS" +echo "======================================" +echo "VM ID: $VMID" +echo "Environment: $ENVIRONMENT" +echo "======================================" +echo "" + +echo "⏳ Czekam na pełne uruchomienie Home Assistant..." +MAX_ATTEMPTS=60 +for i in $(seq 1 $MAX_ATTEMPTS); do + echo -n "Próba $i/$MAX_ATTEMPTS... " + + # Sprawdź czy HA API odpowiada + RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null "http://${HA_IP}:8123/api/" 2>/dev/null || echo "000") + + if [ "$RESPONSE" = "200" ] || [ "$RESPONSE" = "401" ]; then + echo "✅ Home Assistant jest gotowy!" + break + fi + + if [ $i -eq $MAX_ATTEMPTS ]; then + echo "" + echo "❌ Timeout - HA nie odpowiada" + echo "" + echo "📋 Sprawdź status:" + echo " ssh root@${PROXMOX_HOST} 'qm status ${VMID}'" + echo "" + echo "💡 HA OS potrzebuje 10-15 minut na pierwsze uruchomienie" + echo " Poczekaj i uruchom skrypt ponownie" + exit 1 + fi + + echo "czekam 10s..." + sleep 10 +done + +echo "" +echo "🔧 Home Assistant uruchomiony, ale wymaga początkowej konfiguracji" +echo "" +echo "╔═══════════════════════════════════════════════════════════════╗" +echo "║ OPCJE AUTOMATYZACJI DLA HOME ASSISTANT OS: ║" +echo "╚═══════════════════════════════════════════════════════════════╝" +echo "" +echo "Home Assistant OS ma ograniczony dostęp do systemu plików" +echo "i wymaga konfiguracji przez WebUI dla bezpieczeństwa." +echo "" +echo "💡 NAJLEPSZE ROZWIĄZANIE:" +echo " Użyj skryptu: ./setup-ha-headless.sh" +echo " który otworzy przeglądarkę i przeprowadzi Cię przez setup" +echo "" +echo "🔗 LUB skonfiguruj ręcznie raz (5 minut):" +echo "" +echo " 1. Otwórz: http://${HA_IP}:8123" +echo " 2. Utwórz konto: admin / HomeAssistant2024!" +echo " 3. Settings → Add-ons → Terminal & SSH" +echo " 4. Install → Configuration → Hasło: QWer!@34" +echo "" +echo "Po konfiguracji SSH wszystkie dalsze kroki będą automatyczne!" +echo "" +echo "======================================" diff --git a/scripts/check-ssh-access.sh b/scripts/check-ssh-access.sh new file mode 100755 index 0000000..946e04a --- /dev/null +++ b/scripts/check-ssh-access.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Sprawdzenie dostępu SSH do środowisk HA +# Użycie: ./check-ssh-access.sh +# + +set -e + +TEST_IP="192.168.50.151" +PROD_IP="192.168.50.242" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🔐 Sprawdzanie dostępu SSH do HA" +echo "======================================" +echo "" + +check_ssh() { + local name=$1 + local ip=$2 + + echo "📡 $name ($ip)..." + + if sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${ip} "ha core info" 2>/dev/null; then + echo " ✅ SSH działa! Home Assistant wersja:" + sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no root@${ip} "ha core info | grep version" 2>/dev/null || true + return 0 + else + echo " ❌ Brak dostępu SSH" + echo "" + echo " 💡 Jak włączyć SSH w Home Assistant:" + echo " 1. Otwórz: http://${ip}:8123" + echo " 2. Settings → Add-ons → Terminal & SSH" + echo " 3. Install → Start" + echo " 4. Configuration:" + echo " password: $SSH_PASS" + echo " 5. Save i Restart addon" + echo "" + return 1 + fi +} + +TEST_OK=0 +PROD_OK=0 + +check_ssh "TEST" "$TEST_IP" && TEST_OK=1 || true +echo "" +check_ssh "PROD" "$PROD_IP" && PROD_OK=1 || true + +echo "" +echo "======================================" +echo "📊 PODSUMOWANIE" +echo "======================================" +echo "" + +if [ $TEST_OK -eq 1 ] && [ $PROD_OK -eq 1 ]; then + echo "✅ Obydwa środowiska mają SSH!" + echo "" + echo "🚀 Możesz teraz użyć:" + echo " ./sync-test-to-prod.sh - Synchronizacja TEST→PROD" + echo " ./backup-ha.sh all - Backup obu środowisk" + echo "" +elif [ $TEST_OK -eq 1 ] || [ $PROD_OK -eq 1 ]; then + echo "⚠️ Tylko jedno środowisko ma SSH" + echo " Włącz SSH w drugim środowisku aby używać automatyzacji" + echo "" +else + echo "❌ Brak SSH w obydwu środowiskach" + echo " Włącz SSH addon w Home Assistant (instrukcje powyżej)" + echo "" +fi + +echo "======================================" diff --git a/scripts/create-ha-lxc-auto.sh b/scripts/create-ha-lxc-auto.sh new file mode 100755 index 0000000..ba907bb --- /dev/null +++ b/scripts/create-ha-lxc-auto.sh @@ -0,0 +1,203 @@ +#!/bin/bash +# +# Tworzenie w pełni zautomatyzowanego Home Assistant w LXC z Dockerem +# WSZYSTKO BEZ RĘCZNEJ INTERWENCJI +# +# Użycie: ./create-ha-lxc-auto.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" +NODE="prox01" + +if [ "$ENVIRONMENT" = "test" ]; then + CTID=210 + CT_NAME="ha-test" + CT_IP="192.168.50.210" + CORES=2 + MEMORY=4096 + DISK_SIZE="32" +elif [ "$ENVIRONMENT" = "prod" ]; then + CTID=211 + CT_NAME="ha-prod" + CT_IP="192.168.50.211" + CORES=4 + MEMORY=6144 + DISK_SIZE="64" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +GATEWAY="192.168.50.1" +STORAGE="local-lvm" +TEMPLATE="local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst" +ROOT_PASS="QWer!@34" + +echo "======================================" +echo "🏠 Tworzenie Home Assistant ${ENVIRONMENT^^} (LXC)" +echo "======================================" +echo "CT ID: $CTID" +echo "Nazwa: $CT_NAME" +echo "IP: $CT_IP" +echo "======================================" +echo "" + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +# Sprawdzenie czy kontener już istnieje +if pve_cmd "pct status $CTID" 2>/dev/null; then + echo "⚠️ Kontener $CTID już istnieje!" + read -p "Usunąć i utworzyć od nowa? (tak/nie): " confirm + if [ "$confirm" = "tak" ]; then + pve_cmd "pct stop $CTID" 2>/dev/null || true + sleep 3 + pve_cmd "pct destroy $CTID --purge" + else + exit 1 + fi +fi + +# Tworzenie LXC +echo "🔨 Tworzenie kontenera LXC..." +pve_cmd "pct create $CTID $TEMPLATE \ + --hostname $CT_NAME \ + --cores $CORES \ + --memory $MEMORY \ + --swap 2048 \ + --storage $STORAGE \ + --rootfs $STORAGE:$DISK_SIZE \ + --net0 name=eth0,bridge=vmbr0,ip=${CT_IP}/24,gw=${GATEWAY} \ + --password '$ROOT_PASS' \ + --features nesting=1,keyctl=1 \ + --unprivileged 0 \ + --onboot 1 \ + --start 1" + +echo "⏳ Czekam na uruchomienie kontenera..." +sleep 10 + +# Funkcja do wykonywania poleceń w kontenerze +lxc_exec() { + pve_cmd "pct exec $CTID -- bash -c '$*'" +} + +echo "📦 Instalacja Docker i Home Assistant..." + +# Aktualizacja systemu +lxc_exec "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y" + +# Instalacja Docker +lxc_exec "apt-get install -y ca-certificates curl gnupg lsb-release" +lxc_exec "install -m 0755 -d /etc/apt/keyrings" +lxc_exec "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" +lxc_exec "chmod a+r /etc/apt/keyrings/docker.gpg" +lxc_exec 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list' +lxc_exec "apt-get update" +lxc_exec "DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" + +# Tworzenie katalogów dla HA +lxc_exec "mkdir -p /root/homeassistant" + +# Tworzenie docker-compose.yml +echo "📝 Tworzenie konfiguracji Docker Compose..." +pve_cmd "pct exec $CTID -- bash -c 'cat > /root/docker-compose.yml << \"EOFCONFIG\" +version: \"3\" +services: + homeassistant: + container_name: homeassistant + image: ghcr.io/home-assistant/home-assistant:stable + volumes: + - /root/homeassistant:/config + - /etc/localtime:/etc/localtime:ro + restart: unless-stopped + privileged: true + network_mode: host + environment: + - TZ=Europe/Warsaw +EOFCONFIG +'" + +# Uruchomienie Home Assistant +echo "🚀 Uruchamianie Home Assistant..." +lxc_exec "cd /root && docker compose up -d" + +echo "⏳ Czekam na uruchomienie Home Assistant (60s)..." +sleep 60 + +# Automatyczna konfiguracja HA +echo "🤖 Automatyczna konfiguracja Home Assistant..." + +# Tworzenie pliku configuration.yaml +pve_cmd "pct exec $CTID -- bash -c 'cat > /root/homeassistant/configuration.yaml << \"EOFHA\" +# Home Assistant Configuration - ${ENVIRONMENT^^} +homeassistant: + name: ${CT_NAME} + latitude: 52.2297 + longitude: 21.0122 + elevation: 100 + unit_system: metric + currency: PLN + time_zone: Europe/Warsaw + +# HTTP +http: + use_x_forwarded_for: true + trusted_proxies: + - 192.168.50.0/24 + +# Default config +default_config: + +# Automation +automation: !include automations.yaml +script: !include scripts.yaml +scene: !include scenes.yaml + +# Logger +logger: + default: info +EOFHA +'" + +# Tworzenie pustych plików +lxc_exec "touch /root/homeassistant/automations.yaml" +lxc_exec "touch /root/homeassistant/scripts.yaml" +lxc_exec "touch /root/homeassistant/scenes.yaml" + +# Restart HA +echo "♻️ Restart Home Assistant..." +lxc_exec "docker restart homeassistant" + +sleep 30 + +echo "" +echo "======================================" +echo "✅ INSTALACJA ZAKOŃCZONA!" +echo "======================================" +echo "" +echo "🌐 Dostęp:" +echo " URL: http://${CT_IP}:8123" +echo " SSH: ssh root@${CT_IP}" +echo " Hasło: ${ROOT_PASS}" +echo "" +echo "📝 Pierwsze logowanie:" +echo " Otwórz: http://${CT_IP}:8123" +echo " Utwórz konto administratora" +echo "" +echo "💾 Konfiguracja:" +echo " Katalog: /root/homeassistant" +echo " Docker: docker compose (w /root/)" +echo "" +echo "🔧 Zarządzanie:" +echo " Start: pct start $CTID" +echo " Stop: pct stop $CTID" +echo " Restart HA: ssh root@${CT_IP} 'docker restart homeassistant'" +echo "" +echo "======================================" diff --git a/docs/EXISTING_VMS_SETUP.md b/docs/EXISTING_VMS_SETUP.md new file mode 100644 index 0000000..d942f54 --- /dev/null +++ b/docs/EXISTING_VMS_SETUP.md @@ -0,0 +1,250 @@ +# Konfiguracja Home Assistant TEST/PROD + +## 📊 Aktualna infrastruktura + +### Środowiska Home Assistant + +| Środowisko | VM ID | IP | URL | Status | +|------------|-------|-------------|---------------------------|---------| +| TEST | 101 | 192.168.50.151 | http://192.168.50.151:8123 | ✅ Działa | +| PROD | 100 | 192.168.50.242 | http://192.168.50.242:8123 | ✅ Działa | + +### Zasoby VM + +| VM | CPU | RAM | Dysk | +|----|-----|-----|------| +| TEST (101) | 2 cores | 2048 MB | 32 GB | +| PROD (100) | 2 cores | 4096 MB | 32 GB | + +## 🔐 Konfiguracja SSH (WYMAGANE dla automatyzacji) + +### Włączanie SSH w Home Assistant + +#### TEST (192.168.50.151) + +1. Otwórz: http://192.168.50.151:8123 +2. Zaloguj się +3. **Settings** (⚙️) → **Add-ons** → **Add-on Store** +4. Wyszukaj: **Terminal & SSH** +5. Kliknij **Install** +6. Po instalacji: + - **Start** addon + - **Configuration** → Ustaw hasło: `QWer!@34` + - **Save** + - **Restart** addon +7. Weryfikacja: + ```bash + ssh root@192.168.50.151 + # hasło: QWer!@34 + ha core info + ``` + +#### PROD (192.168.50.242) + +Powtórz te same kroki dla środowiska PROD: +- URL: http://192.168.50.242:8123 +- SSH: `ssh root@192.168.50.242` + +## 🚀 Automatyzacja po włączeniu SSH + +### Sprawdzenie dostępu + +```bash +cd ~/homeassistant-infra +./scripts/check-ssh-access.sh +``` + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +### Synchronizacja TEST → PROD + +**UWAGA:** To nadpisze konfigurację PROD konfiguracją z TEST! + +```bash +./scripts/sync-test-to-prod.sh +``` + +Co robi skrypt: +1. ✅ Automatyczny backup PROD przed zmianami +2. 📋 Kopiowanie plików konfiguracyjnych (configuration.yaml, automations.yaml, etc.) +3. 📁 Kopiowanie katalogów (custom_components, themes, www) +4. ♻️ Restart Home Assistant na PROD +5. 💾 Backup zapisany w `./backups/` + +### Restore z backupu + +Jeśli coś pójdzie nie tak: + +```bash +./scripts/restore-backup.sh ./backups/prod_backup_YYYYMMDD_HHMMSS.tar.gz prod +``` + +## 📂 Struktura konfiguracji HA + +Po włączeniu SSH, konfiguracja HA znajduje się w: + +``` +/root/config/ +├── configuration.yaml # Główna konfiguracja +├── automations.yaml # Automatyzacje +├── scripts.yaml # Skrypty +├── scenes.yaml # Sceny +├── customize.yaml # Customizacje +├── secrets.yaml # Sekrety (hasła, tokeny) +├── custom_components/ # Custom integracje +├── themes/ # Motywy +└── www/ # Pliki statyczne +``` + +## 🔄 Workflow codziennej pracy + +### 1. Praca w środowisku TEST + +```bash +# Połącz się z TEST +ssh root@192.168.50.151 + +# Lub edytuj przez WebUI +open http://192.168.50.151:8123 +``` + +Dodaj/edytuj: +- Automatyzacje +- Integracje +- Skrypty +- Dashboardy + +### 2. Testowanie + +Sprawdź czy wszystko działa poprawnie w TEST: +- Uruchom automatyzacje +- Przetestuj scenariusze +- Sprawdź logi: Settings → System → Logs + +### 3. Commit do Git (opcjonalnie) + +```bash +cd ~/homeassistant-infra + +# Pobierz konfigurację z TEST +scp -r root@192.168.50.151:/root/config/* ./ha-config-test/ + +# Commit +git add . +git commit -m "Dodano automatyzację XYZ" +git push +``` + +### 4. Deploy na PROD + +Gdy wszystko działa w TEST: + +```bash +cd ~/homeassistant-infra +./scripts/sync-test-to-prod.sh +``` + +Potwierdź synchronizację i gotowe! + +### 5. Weryfikacja PROD + +```bash +# Sprawdź logi +ssh root@192.168.50.242 "ha core logs" + +# Lub przez WebUI +open http://192.168.50.242:8123 +``` + +## 🆘 Troubleshooting + +### SSH nie działa + +```bash +# Sprawdź czy addon jest uruchomiony +ssh root@192.168.50.151 # jeśli nie działa, sprawdź przez WebUI + +# Restart addonu przez WebUI: +# Settings → Add-ons → Terminal & SSH → Restart +``` + +### Synchronizacja się nie powiodła + +```bash +# Przywróć ostatni backup +ls -lh ~/homeassistant-infra/backups/ +./scripts/restore-backup.sh ~/homeassistant-infra/backups/prod_backup_XXX.tar.gz prod +``` + +### Home Assistant nie odpowiada + +```bash +# Restart HA +ssh root@192.168.50.151 "ha core restart" + +# Lub restart całej VM +ssh root@192.168.50.200 "qm reboot 101" +``` + +### Sprawdzenie logów + +```bash +# Logi core +ssh root@192.168.50.151 "ha core logs" + +# Logi supervisora +ssh root@192.168.50.151 "ha supervisor logs" +``` + +## 📚 Automatyczne backupy (cron) + +Dodaj do crontab dla automatycznych backupów: + +```bash +crontab -e +``` + +Dodaj linię (backup codziennie o 2:00): +```cron +0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all >> ~/ha-backup.log 2>&1 +``` + +## 🔗 Przydatne linki + +- **TEST WebUI**: http://192.168.50.151:8123 +- **PROD WebUI**: http://192.168.50.242:8123 +- **Proxmox**: https://192.168.50.200:8006 +- **GitBucket**: http://192.168.50.101:8080/root/homeassistant-infra +- **HA Docs**: https://www.home-assistant.io/docs/ + +## ✅ Checklist po skonfigurowaniu SSH + +- [ ] SSH działa na TEST (192.168.50.151) +- [ ] SSH działa na PROD (192.168.50.242) +- [ ] Wykonany pierwszy backup: `./scripts/backup-ha.sh all` +- [ ] Przetestowana synchronizacja: `./scripts/sync-test-to-prod.sh` +- [ ] Przetestowany restore: `./scripts/restore-backup.sh` +- [ ] Dodany cron job dla automatycznych backupów +- [ ] Skrypty commitowane do Git + +## 🎉 Gotowe! + +Po wykonaniu powyższych kroków masz w pełni zautomatyzowane środowiska! + +**Workflow:** +``` +Zmiana w TEST → Test → Sync do PROD → Gotowe! +``` + +Wszystkie backupy są automatyczne, wszystko wersjonowane, zero ręcznej pracy! 🚀 diff --git a/scripts/auto-configure-ha.sh b/scripts/auto-configure-ha.sh new file mode 100755 index 0000000..1d9ac77 --- /dev/null +++ b/scripts/auto-configure-ha.sh @@ -0,0 +1,131 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant po pierwszym uruchomieniu +# Użycie: ./auto-configure-ha.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + HA_IP="192.168.50.210" + HA_NAME="Test Home" +elif [ "$ENVIRONMENT" = "prod" ]; then + HA_IP="192.168.50.211" + HA_NAME="Production Home" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +HA_URL="http://${HA_IP}:8123" +HA_USER="admin" +HA_PASS="HomeAssistant2024!" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🤖 Automatyczna konfiguracja HA" +echo "======================================" +echo "Środowisko: $ENVIRONMENT" +echo "IP: $HA_IP" +echo "======================================" +echo "" + +# Czekanie na uruchomienie HA +echo "⏳ Czekam na uruchomienie Home Assistant..." +MAX_WAIT=30 +for i in $(seq 1 $MAX_WAIT); do + echo -n " Próba $i/$MAX_WAIT... " + if curl -s -m 5 "${HA_URL}/api/" > /dev/null 2>&1; then + echo "✅ HA odpowiada!" + break + fi + if [ $i -eq $MAX_WAIT ]; then + echo "❌ Timeout - HA nie odpowiada po $((MAX_WAIT * 10)) sekundach" + echo " Spróbuj ponownie później lub sprawdź logi VM" + exit 1 + fi + echo "czekam..." + sleep 10 +done + +echo "" +echo "🔍 Sprawdzanie czy HA jest już skonfigurowane..." +ONBOARDING_STATUS=$(curl -s "${HA_URL}/api/onboarding" 2>/dev/null || echo '{}') + +if echo "$ONBOARDING_STATUS" | grep -q '"done":true'; then + echo "✅ Home Assistant jest już skonfigurowane" + echo " Pomijam onboarding" +else + echo "🎯 Rozpoczynam automatyczny onboarding..." + + # Krok 1: Utworzenie pierwszego użytkownika + echo "👤 Tworzenie użytkownika administratora..." + USER_RESPONSE=$(curl -s -X POST "${HA_URL}/api/onboarding/users" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"name\": \"Administrator\", + \"username\": \"${HA_USER}\", + \"password\": \"${HA_PASS}\", + \"language\": \"pl\" + }" 2>/dev/null || echo '{"error":"failed"}') + + if echo "$USER_RESPONSE" | grep -q "auth_token"; then + echo " ✅ Użytkownik utworzony" + AUTH_TOKEN=$(echo "$USER_RESPONSE" | grep -o '"auth_token":"[^"]*"' | cut -d'"' -f4) + else + echo " ⚠️ Nie udało się utworzyć użytkownika - może już istnieje" + # Próba logowania + LOGIN_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/login_flow" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"handler\": [\"homeassistant\", null], + \"redirect_uri\": \"${HA_URL}\" + }" 2>/dev/null) + # To wymaga bardziej skomplikowanej obsługi flow logowania + fi + + # Krok 2: Konfiguracja core (lokalizacja, nazwa) + echo "🏠 Konfiguracja podstawowych ustawień..." + curl -s -X POST "${HA_URL}/api/onboarding/core_config" \ + -H "Content-Type: application/json" \ + -d "{ + \"location_name\": \"${HA_NAME}\", + \"latitude\": 52.2297, + \"longitude\": 21.0122, + \"elevation\": 100, + \"unit_system\": \"metric\", + \"currency\": \"PLN\", + \"time_zone\": \"Europe/Warsaw\" + }" > /dev/null 2>&1 || echo " ⚠️ Konfiguracja może być już ustawiona" + + # Krok 3: Zakończenie onboardingu + echo "✅ Finalizacja onboardingu..." + curl -s -X POST "${HA_URL}/api/onboarding/integration" \ + -H "Content-Type: application/json" \ + -d '{}' > /dev/null 2>&1 || true +fi + +echo "" +echo "======================================" +echo "✅ KONFIGURACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📋 Dane dostępowe:" +echo " URL: ${HA_URL}" +echo " Username: ${HA_USER}" +echo " Password: ${HA_PASS}" +echo "" +echo "⚠️ WAŻNE: SSH nie może być włączony automatycznie przez API" +echo " Musisz to zrobić raz ręcznie przez WebUI:" +echo "" +echo " 1. Zaloguj się: ${HA_URL}" +echo " 2. Settings → Add-ons → Terminal & SSH" +echo " 3. Install → Start" +echo " 4. Configuration → Hasło: ${SSH_PASS}" +echo "" +echo "💡 LUB użyj alternatywnego skryptu setup-ssh-addon.sh" +echo "======================================" diff --git a/scripts/auto-setup-haos.sh b/scripts/auto-setup-haos.sh new file mode 100755 index 0000000..474fe91 --- /dev/null +++ b/scripts/auto-setup-haos.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant OS przez montowanie dysku VM +# Działa bez potrzeby manualnej konfiguracji w WebUI +# +# Użycie: ./auto-setup-haos.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + HA_IP="192.168.50.210" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + HA_IP="192.168.50.211" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +echo "======================================" +echo "🤖 Auto-setup Home Assistant OS" +echo "======================================" +echo "VM ID: $VMID" +echo "Environment: $ENVIRONMENT" +echo "======================================" +echo "" + +echo "⏳ Czekam na pełne uruchomienie Home Assistant..." +MAX_ATTEMPTS=60 +for i in $(seq 1 $MAX_ATTEMPTS); do + echo -n "Próba $i/$MAX_ATTEMPTS... " + + # Sprawdź czy HA API odpowiada + RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null "http://${HA_IP}:8123/api/" 2>/dev/null || echo "000") + + if [ "$RESPONSE" = "200" ] || [ "$RESPONSE" = "401" ]; then + echo "✅ Home Assistant jest gotowy!" + break + fi + + if [ $i -eq $MAX_ATTEMPTS ]; then + echo "" + echo "❌ Timeout - HA nie odpowiada" + echo "" + echo "📋 Sprawdź status:" + echo " ssh root@${PROXMOX_HOST} 'qm status ${VMID}'" + echo "" + echo "💡 HA OS potrzebuje 10-15 minut na pierwsze uruchomienie" + echo " Poczekaj i uruchom skrypt ponownie" + exit 1 + fi + + echo "czekam 10s..." + sleep 10 +done + +echo "" +echo "🔧 Home Assistant uruchomiony, ale wymaga początkowej konfiguracji" +echo "" +echo "╔═══════════════════════════════════════════════════════════════╗" +echo "║ OPCJE AUTOMATYZACJI DLA HOME ASSISTANT OS: ║" +echo "╚═══════════════════════════════════════════════════════════════╝" +echo "" +echo "Home Assistant OS ma ograniczony dostęp do systemu plików" +echo "i wymaga konfiguracji przez WebUI dla bezpieczeństwa." +echo "" +echo "💡 NAJLEPSZE ROZWIĄZANIE:" +echo " Użyj skryptu: ./setup-ha-headless.sh" +echo " który otworzy przeglądarkę i przeprowadzi Cię przez setup" +echo "" +echo "🔗 LUB skonfiguruj ręcznie raz (5 minut):" +echo "" +echo " 1. Otwórz: http://${HA_IP}:8123" +echo " 2. Utwórz konto: admin / HomeAssistant2024!" +echo " 3. Settings → Add-ons → Terminal & SSH" +echo " 4. Install → Configuration → Hasło: QWer!@34" +echo "" +echo "Po konfiguracji SSH wszystkie dalsze kroki będą automatyczne!" +echo "" +echo "======================================" diff --git a/scripts/check-ssh-access.sh b/scripts/check-ssh-access.sh new file mode 100755 index 0000000..946e04a --- /dev/null +++ b/scripts/check-ssh-access.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Sprawdzenie dostępu SSH do środowisk HA +# Użycie: ./check-ssh-access.sh +# + +set -e + +TEST_IP="192.168.50.151" +PROD_IP="192.168.50.242" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🔐 Sprawdzanie dostępu SSH do HA" +echo "======================================" +echo "" + +check_ssh() { + local name=$1 + local ip=$2 + + echo "📡 $name ($ip)..." + + if sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${ip} "ha core info" 2>/dev/null; then + echo " ✅ SSH działa! Home Assistant wersja:" + sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no root@${ip} "ha core info | grep version" 2>/dev/null || true + return 0 + else + echo " ❌ Brak dostępu SSH" + echo "" + echo " 💡 Jak włączyć SSH w Home Assistant:" + echo " 1. Otwórz: http://${ip}:8123" + echo " 2. Settings → Add-ons → Terminal & SSH" + echo " 3. Install → Start" + echo " 4. Configuration:" + echo " password: $SSH_PASS" + echo " 5. Save i Restart addon" + echo "" + return 1 + fi +} + +TEST_OK=0 +PROD_OK=0 + +check_ssh "TEST" "$TEST_IP" && TEST_OK=1 || true +echo "" +check_ssh "PROD" "$PROD_IP" && PROD_OK=1 || true + +echo "" +echo "======================================" +echo "📊 PODSUMOWANIE" +echo "======================================" +echo "" + +if [ $TEST_OK -eq 1 ] && [ $PROD_OK -eq 1 ]; then + echo "✅ Obydwa środowiska mają SSH!" + echo "" + echo "🚀 Możesz teraz użyć:" + echo " ./sync-test-to-prod.sh - Synchronizacja TEST→PROD" + echo " ./backup-ha.sh all - Backup obu środowisk" + echo "" +elif [ $TEST_OK -eq 1 ] || [ $PROD_OK -eq 1 ]; then + echo "⚠️ Tylko jedno środowisko ma SSH" + echo " Włącz SSH w drugim środowisku aby używać automatyzacji" + echo "" +else + echo "❌ Brak SSH w obydwu środowiskach" + echo " Włącz SSH addon w Home Assistant (instrukcje powyżej)" + echo "" +fi + +echo "======================================" diff --git a/scripts/create-ha-lxc-auto.sh b/scripts/create-ha-lxc-auto.sh new file mode 100755 index 0000000..ba907bb --- /dev/null +++ b/scripts/create-ha-lxc-auto.sh @@ -0,0 +1,203 @@ +#!/bin/bash +# +# Tworzenie w pełni zautomatyzowanego Home Assistant w LXC z Dockerem +# WSZYSTKO BEZ RĘCZNEJ INTERWENCJI +# +# Użycie: ./create-ha-lxc-auto.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" +NODE="prox01" + +if [ "$ENVIRONMENT" = "test" ]; then + CTID=210 + CT_NAME="ha-test" + CT_IP="192.168.50.210" + CORES=2 + MEMORY=4096 + DISK_SIZE="32" +elif [ "$ENVIRONMENT" = "prod" ]; then + CTID=211 + CT_NAME="ha-prod" + CT_IP="192.168.50.211" + CORES=4 + MEMORY=6144 + DISK_SIZE="64" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +GATEWAY="192.168.50.1" +STORAGE="local-lvm" +TEMPLATE="local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst" +ROOT_PASS="QWer!@34" + +echo "======================================" +echo "🏠 Tworzenie Home Assistant ${ENVIRONMENT^^} (LXC)" +echo "======================================" +echo "CT ID: $CTID" +echo "Nazwa: $CT_NAME" +echo "IP: $CT_IP" +echo "======================================" +echo "" + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +# Sprawdzenie czy kontener już istnieje +if pve_cmd "pct status $CTID" 2>/dev/null; then + echo "⚠️ Kontener $CTID już istnieje!" + read -p "Usunąć i utworzyć od nowa? (tak/nie): " confirm + if [ "$confirm" = "tak" ]; then + pve_cmd "pct stop $CTID" 2>/dev/null || true + sleep 3 + pve_cmd "pct destroy $CTID --purge" + else + exit 1 + fi +fi + +# Tworzenie LXC +echo "🔨 Tworzenie kontenera LXC..." +pve_cmd "pct create $CTID $TEMPLATE \ + --hostname $CT_NAME \ + --cores $CORES \ + --memory $MEMORY \ + --swap 2048 \ + --storage $STORAGE \ + --rootfs $STORAGE:$DISK_SIZE \ + --net0 name=eth0,bridge=vmbr0,ip=${CT_IP}/24,gw=${GATEWAY} \ + --password '$ROOT_PASS' \ + --features nesting=1,keyctl=1 \ + --unprivileged 0 \ + --onboot 1 \ + --start 1" + +echo "⏳ Czekam na uruchomienie kontenera..." +sleep 10 + +# Funkcja do wykonywania poleceń w kontenerze +lxc_exec() { + pve_cmd "pct exec $CTID -- bash -c '$*'" +} + +echo "📦 Instalacja Docker i Home Assistant..." + +# Aktualizacja systemu +lxc_exec "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y" + +# Instalacja Docker +lxc_exec "apt-get install -y ca-certificates curl gnupg lsb-release" +lxc_exec "install -m 0755 -d /etc/apt/keyrings" +lxc_exec "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" +lxc_exec "chmod a+r /etc/apt/keyrings/docker.gpg" +lxc_exec 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list' +lxc_exec "apt-get update" +lxc_exec "DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" + +# Tworzenie katalogów dla HA +lxc_exec "mkdir -p /root/homeassistant" + +# Tworzenie docker-compose.yml +echo "📝 Tworzenie konfiguracji Docker Compose..." +pve_cmd "pct exec $CTID -- bash -c 'cat > /root/docker-compose.yml << \"EOFCONFIG\" +version: \"3\" +services: + homeassistant: + container_name: homeassistant + image: ghcr.io/home-assistant/home-assistant:stable + volumes: + - /root/homeassistant:/config + - /etc/localtime:/etc/localtime:ro + restart: unless-stopped + privileged: true + network_mode: host + environment: + - TZ=Europe/Warsaw +EOFCONFIG +'" + +# Uruchomienie Home Assistant +echo "🚀 Uruchamianie Home Assistant..." +lxc_exec "cd /root && docker compose up -d" + +echo "⏳ Czekam na uruchomienie Home Assistant (60s)..." +sleep 60 + +# Automatyczna konfiguracja HA +echo "🤖 Automatyczna konfiguracja Home Assistant..." + +# Tworzenie pliku configuration.yaml +pve_cmd "pct exec $CTID -- bash -c 'cat > /root/homeassistant/configuration.yaml << \"EOFHA\" +# Home Assistant Configuration - ${ENVIRONMENT^^} +homeassistant: + name: ${CT_NAME} + latitude: 52.2297 + longitude: 21.0122 + elevation: 100 + unit_system: metric + currency: PLN + time_zone: Europe/Warsaw + +# HTTP +http: + use_x_forwarded_for: true + trusted_proxies: + - 192.168.50.0/24 + +# Default config +default_config: + +# Automation +automation: !include automations.yaml +script: !include scripts.yaml +scene: !include scenes.yaml + +# Logger +logger: + default: info +EOFHA +'" + +# Tworzenie pustych plików +lxc_exec "touch /root/homeassistant/automations.yaml" +lxc_exec "touch /root/homeassistant/scripts.yaml" +lxc_exec "touch /root/homeassistant/scenes.yaml" + +# Restart HA +echo "♻️ Restart Home Assistant..." +lxc_exec "docker restart homeassistant" + +sleep 30 + +echo "" +echo "======================================" +echo "✅ INSTALACJA ZAKOŃCZONA!" +echo "======================================" +echo "" +echo "🌐 Dostęp:" +echo " URL: http://${CT_IP}:8123" +echo " SSH: ssh root@${CT_IP}" +echo " Hasło: ${ROOT_PASS}" +echo "" +echo "📝 Pierwsze logowanie:" +echo " Otwórz: http://${CT_IP}:8123" +echo " Utwórz konto administratora" +echo "" +echo "💾 Konfiguracja:" +echo " Katalog: /root/homeassistant" +echo " Docker: docker compose (w /root/)" +echo "" +echo "🔧 Zarządzanie:" +echo " Start: pct start $CTID" +echo " Stop: pct stop $CTID" +echo " Restart HA: ssh root@${CT_IP} 'docker restart homeassistant'" +echo "" +echo "======================================" diff --git a/scripts/create-haos-community.sh b/scripts/create-haos-community.sh new file mode 100755 index 0000000..744f512 --- /dev/null +++ b/scripts/create-haos-community.sh @@ -0,0 +1,127 @@ +#!/bin/bash +# +# Wrapper dla community HAOS script z automatycznymi odpowiedziami +# Użycie: ./create-haos-community.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_PASS="QWer!@34" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + VM_NAME="haos-test" + CORES=2 + RAM=4096 + DISK=32 +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + VM_NAME="haos-prod" + CORES=4 + RAM=6144 + DISK=64 +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +echo "======================================" +echo "🏠 Tworzenie Home Assistant OS VM" +echo "======================================" +echo "Environment: $ENVIRONMENT" +echo "VM ID: $VMID" +echo "Name: $VM_NAME" +echo "CPU: $CORES cores" +echo "RAM: ${RAM}MB" +echo "Disk: ${DISK}GB" +echo "======================================" +echo "" + +# Pobierz najnowszą wersję HAOS +echo "📥 Pobieranie informacji o najnowszej wersji HAOS..." +HAOS_VERSION=$(curl -s https://api.github.com/repos/home-assistant/operating-system/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")') +echo " Najnowsza wersja: $HAOS_VERSION" + +HAOS_IMAGE_URL="https://github.com/home-assistant/operating-system/releases/download/${HAOS_VERSION}/haos_ova-${HAOS_VERSION}.qcow2.xz" + +echo "" +echo "🔧 Tworzenie VM na Proxmox..." + +# Skrypt do wykonania na Proxmox +REMOTE_SCRIPT=$(cat <<'EOFSCRIPT' +#!/bin/bash +set -e + +VMID="$1" +VM_NAME="$2" +CORES="$3" +RAM="$4" +DISK="$5" +HAOS_IMAGE_URL="$6" +STORAGE="local-lvm" + +echo "📦 Pobieranie obrazu HAOS..." +cd /tmp +HAOS_FILE="haos_ova.qcow2" +if [ ! -f "${HAOS_FILE}" ]; then + wget -q --show-progress "${HAOS_IMAGE_URL}" -O "${HAOS_FILE}.xz" + echo "📂 Rozpakowywanie..." + xz -d "${HAOS_FILE}.xz" +fi + +echo "🔨 Tworzenie VM..." +qm create ${VMID} \ + --name ${VM_NAME} \ + --cores ${CORES} \ + --memory ${RAM} \ + --net0 virtio,bridge=vmbr0 \ + --ostype l26 \ + --scsihw virtio-scsi-pci + +echo "💾 Importowanie dysku..." +qm importdisk ${VMID} /tmp/${HAOS_FILE} ${STORAGE} + +echo "⚙️ Konfiguracja VM..." +qm set ${VMID} --scsi0 ${STORAGE}:vm-${VMID}-disk-0 +qm set ${VMID} --boot c --bootdisk scsi0 +qm set ${VMID} --agent enabled=1 +qm set ${VMID} --serial0 socket --vga serial0 +qm set ${VMID} --onboot 1 + +echo "📦 Rozszerzanie dysku do ${DISK}GB..." +qm resize ${VMID} scsi0 ${DISK}G + +echo "🚀 Uruchamianie VM..." +qm start ${VMID} + +echo "🧹 Czyszczenie..." +rm -f /tmp/${HAOS_FILE}* + +echo "" +echo "✅ VM utworzone pomyślnie!" +echo " ID: ${VMID}" +echo " Nazwa: ${VM_NAME}" +echo "" +echo "⏳ Czekaj 10-15 minut na pierwsze uruchomienie" +echo "🌐 Dostęp przez Proxmox console lub czekaj na DHCP" +EOFSCRIPT +) + +# Wykonaj na Proxmox +sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no root@${PROXMOX_HOST} "bash -s" <<< "$REMOTE_SCRIPT" "$VMID" "$VM_NAME" "$CORES" "$RAM" "$DISK" "$HAOS_IMAGE_URL" + +echo "" +echo "======================================" +echo "✅ INSTALACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📊 Sprawdź VM:" +echo " ssh root@${PROXMOX_HOST} 'qm status ${VMID}'" +echo "" +echo "🌐 Po uruchomieniu sprawdź IP:" +echo " ssh root@${PROXMOX_HOST} 'qm guest cmd ${VMID} network-get-interfaces'" +echo "" +echo "💡 Lub przypisz statyczne IP przez Proxmox/Router" +echo "======================================" diff --git a/docs/EXISTING_VMS_SETUP.md b/docs/EXISTING_VMS_SETUP.md new file mode 100644 index 0000000..d942f54 --- /dev/null +++ b/docs/EXISTING_VMS_SETUP.md @@ -0,0 +1,250 @@ +# Konfiguracja Home Assistant TEST/PROD + +## 📊 Aktualna infrastruktura + +### Środowiska Home Assistant + +| Środowisko | VM ID | IP | URL | Status | +|------------|-------|-------------|---------------------------|---------| +| TEST | 101 | 192.168.50.151 | http://192.168.50.151:8123 | ✅ Działa | +| PROD | 100 | 192.168.50.242 | http://192.168.50.242:8123 | ✅ Działa | + +### Zasoby VM + +| VM | CPU | RAM | Dysk | +|----|-----|-----|------| +| TEST (101) | 2 cores | 2048 MB | 32 GB | +| PROD (100) | 2 cores | 4096 MB | 32 GB | + +## 🔐 Konfiguracja SSH (WYMAGANE dla automatyzacji) + +### Włączanie SSH w Home Assistant + +#### TEST (192.168.50.151) + +1. Otwórz: http://192.168.50.151:8123 +2. Zaloguj się +3. **Settings** (⚙️) → **Add-ons** → **Add-on Store** +4. Wyszukaj: **Terminal & SSH** +5. Kliknij **Install** +6. Po instalacji: + - **Start** addon + - **Configuration** → Ustaw hasło: `QWer!@34` + - **Save** + - **Restart** addon +7. Weryfikacja: + ```bash + ssh root@192.168.50.151 + # hasło: QWer!@34 + ha core info + ``` + +#### PROD (192.168.50.242) + +Powtórz te same kroki dla środowiska PROD: +- URL: http://192.168.50.242:8123 +- SSH: `ssh root@192.168.50.242` + +## 🚀 Automatyzacja po włączeniu SSH + +### Sprawdzenie dostępu + +```bash +cd ~/homeassistant-infra +./scripts/check-ssh-access.sh +``` + +### Backup + +Backup wszystkich środowisk: +```bash +./scripts/backup-ha.sh all +``` + +Backup pojedynczego: +```bash +./scripts/backup-ha.sh test +./scripts/backup-ha.sh prod +``` + +### Synchronizacja TEST → PROD + +**UWAGA:** To nadpisze konfigurację PROD konfiguracją z TEST! + +```bash +./scripts/sync-test-to-prod.sh +``` + +Co robi skrypt: +1. ✅ Automatyczny backup PROD przed zmianami +2. 📋 Kopiowanie plików konfiguracyjnych (configuration.yaml, automations.yaml, etc.) +3. 📁 Kopiowanie katalogów (custom_components, themes, www) +4. ♻️ Restart Home Assistant na PROD +5. 💾 Backup zapisany w `./backups/` + +### Restore z backupu + +Jeśli coś pójdzie nie tak: + +```bash +./scripts/restore-backup.sh ./backups/prod_backup_YYYYMMDD_HHMMSS.tar.gz prod +``` + +## 📂 Struktura konfiguracji HA + +Po włączeniu SSH, konfiguracja HA znajduje się w: + +``` +/root/config/ +├── configuration.yaml # Główna konfiguracja +├── automations.yaml # Automatyzacje +├── scripts.yaml # Skrypty +├── scenes.yaml # Sceny +├── customize.yaml # Customizacje +├── secrets.yaml # Sekrety (hasła, tokeny) +├── custom_components/ # Custom integracje +├── themes/ # Motywy +└── www/ # Pliki statyczne +``` + +## 🔄 Workflow codziennej pracy + +### 1. Praca w środowisku TEST + +```bash +# Połącz się z TEST +ssh root@192.168.50.151 + +# Lub edytuj przez WebUI +open http://192.168.50.151:8123 +``` + +Dodaj/edytuj: +- Automatyzacje +- Integracje +- Skrypty +- Dashboardy + +### 2. Testowanie + +Sprawdź czy wszystko działa poprawnie w TEST: +- Uruchom automatyzacje +- Przetestuj scenariusze +- Sprawdź logi: Settings → System → Logs + +### 3. Commit do Git (opcjonalnie) + +```bash +cd ~/homeassistant-infra + +# Pobierz konfigurację z TEST +scp -r root@192.168.50.151:/root/config/* ./ha-config-test/ + +# Commit +git add . +git commit -m "Dodano automatyzację XYZ" +git push +``` + +### 4. Deploy na PROD + +Gdy wszystko działa w TEST: + +```bash +cd ~/homeassistant-infra +./scripts/sync-test-to-prod.sh +``` + +Potwierdź synchronizację i gotowe! + +### 5. Weryfikacja PROD + +```bash +# Sprawdź logi +ssh root@192.168.50.242 "ha core logs" + +# Lub przez WebUI +open http://192.168.50.242:8123 +``` + +## 🆘 Troubleshooting + +### SSH nie działa + +```bash +# Sprawdź czy addon jest uruchomiony +ssh root@192.168.50.151 # jeśli nie działa, sprawdź przez WebUI + +# Restart addonu przez WebUI: +# Settings → Add-ons → Terminal & SSH → Restart +``` + +### Synchronizacja się nie powiodła + +```bash +# Przywróć ostatni backup +ls -lh ~/homeassistant-infra/backups/ +./scripts/restore-backup.sh ~/homeassistant-infra/backups/prod_backup_XXX.tar.gz prod +``` + +### Home Assistant nie odpowiada + +```bash +# Restart HA +ssh root@192.168.50.151 "ha core restart" + +# Lub restart całej VM +ssh root@192.168.50.200 "qm reboot 101" +``` + +### Sprawdzenie logów + +```bash +# Logi core +ssh root@192.168.50.151 "ha core logs" + +# Logi supervisora +ssh root@192.168.50.151 "ha supervisor logs" +``` + +## 📚 Automatyczne backupy (cron) + +Dodaj do crontab dla automatycznych backupów: + +```bash +crontab -e +``` + +Dodaj linię (backup codziennie o 2:00): +```cron +0 2 * * * cd ~/homeassistant-infra && ./scripts/backup-ha.sh all >> ~/ha-backup.log 2>&1 +``` + +## 🔗 Przydatne linki + +- **TEST WebUI**: http://192.168.50.151:8123 +- **PROD WebUI**: http://192.168.50.242:8123 +- **Proxmox**: https://192.168.50.200:8006 +- **GitBucket**: http://192.168.50.101:8080/root/homeassistant-infra +- **HA Docs**: https://www.home-assistant.io/docs/ + +## ✅ Checklist po skonfigurowaniu SSH + +- [ ] SSH działa na TEST (192.168.50.151) +- [ ] SSH działa na PROD (192.168.50.242) +- [ ] Wykonany pierwszy backup: `./scripts/backup-ha.sh all` +- [ ] Przetestowana synchronizacja: `./scripts/sync-test-to-prod.sh` +- [ ] Przetestowany restore: `./scripts/restore-backup.sh` +- [ ] Dodany cron job dla automatycznych backupów +- [ ] Skrypty commitowane do Git + +## 🎉 Gotowe! + +Po wykonaniu powyższych kroków masz w pełni zautomatyzowane środowiska! + +**Workflow:** +``` +Zmiana w TEST → Test → Sync do PROD → Gotowe! +``` + +Wszystkie backupy są automatyczne, wszystko wersjonowane, zero ręcznej pracy! 🚀 diff --git a/scripts/auto-configure-ha.sh b/scripts/auto-configure-ha.sh new file mode 100755 index 0000000..1d9ac77 --- /dev/null +++ b/scripts/auto-configure-ha.sh @@ -0,0 +1,131 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant po pierwszym uruchomieniu +# Użycie: ./auto-configure-ha.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" + +if [ "$ENVIRONMENT" = "test" ]; then + HA_IP="192.168.50.210" + HA_NAME="Test Home" +elif [ "$ENVIRONMENT" = "prod" ]; then + HA_IP="192.168.50.211" + HA_NAME="Production Home" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +HA_URL="http://${HA_IP}:8123" +HA_USER="admin" +HA_PASS="HomeAssistant2024!" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🤖 Automatyczna konfiguracja HA" +echo "======================================" +echo "Środowisko: $ENVIRONMENT" +echo "IP: $HA_IP" +echo "======================================" +echo "" + +# Czekanie na uruchomienie HA +echo "⏳ Czekam na uruchomienie Home Assistant..." +MAX_WAIT=30 +for i in $(seq 1 $MAX_WAIT); do + echo -n " Próba $i/$MAX_WAIT... " + if curl -s -m 5 "${HA_URL}/api/" > /dev/null 2>&1; then + echo "✅ HA odpowiada!" + break + fi + if [ $i -eq $MAX_WAIT ]; then + echo "❌ Timeout - HA nie odpowiada po $((MAX_WAIT * 10)) sekundach" + echo " Spróbuj ponownie później lub sprawdź logi VM" + exit 1 + fi + echo "czekam..." + sleep 10 +done + +echo "" +echo "🔍 Sprawdzanie czy HA jest już skonfigurowane..." +ONBOARDING_STATUS=$(curl -s "${HA_URL}/api/onboarding" 2>/dev/null || echo '{}') + +if echo "$ONBOARDING_STATUS" | grep -q '"done":true'; then + echo "✅ Home Assistant jest już skonfigurowane" + echo " Pomijam onboarding" +else + echo "🎯 Rozpoczynam automatyczny onboarding..." + + # Krok 1: Utworzenie pierwszego użytkownika + echo "👤 Tworzenie użytkownika administratora..." + USER_RESPONSE=$(curl -s -X POST "${HA_URL}/api/onboarding/users" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"name\": \"Administrator\", + \"username\": \"${HA_USER}\", + \"password\": \"${HA_PASS}\", + \"language\": \"pl\" + }" 2>/dev/null || echo '{"error":"failed"}') + + if echo "$USER_RESPONSE" | grep -q "auth_token"; then + echo " ✅ Użytkownik utworzony" + AUTH_TOKEN=$(echo "$USER_RESPONSE" | grep -o '"auth_token":"[^"]*"' | cut -d'"' -f4) + else + echo " ⚠️ Nie udało się utworzyć użytkownika - może już istnieje" + # Próba logowania + LOGIN_RESPONSE=$(curl -s -X POST "${HA_URL}/auth/login_flow" \ + -H "Content-Type: application/json" \ + -d "{ + \"client_id\": \"${HA_URL}\", + \"handler\": [\"homeassistant\", null], + \"redirect_uri\": \"${HA_URL}\" + }" 2>/dev/null) + # To wymaga bardziej skomplikowanej obsługi flow logowania + fi + + # Krok 2: Konfiguracja core (lokalizacja, nazwa) + echo "🏠 Konfiguracja podstawowych ustawień..." + curl -s -X POST "${HA_URL}/api/onboarding/core_config" \ + -H "Content-Type: application/json" \ + -d "{ + \"location_name\": \"${HA_NAME}\", + \"latitude\": 52.2297, + \"longitude\": 21.0122, + \"elevation\": 100, + \"unit_system\": \"metric\", + \"currency\": \"PLN\", + \"time_zone\": \"Europe/Warsaw\" + }" > /dev/null 2>&1 || echo " ⚠️ Konfiguracja może być już ustawiona" + + # Krok 3: Zakończenie onboardingu + echo "✅ Finalizacja onboardingu..." + curl -s -X POST "${HA_URL}/api/onboarding/integration" \ + -H "Content-Type: application/json" \ + -d '{}' > /dev/null 2>&1 || true +fi + +echo "" +echo "======================================" +echo "✅ KONFIGURACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📋 Dane dostępowe:" +echo " URL: ${HA_URL}" +echo " Username: ${HA_USER}" +echo " Password: ${HA_PASS}" +echo "" +echo "⚠️ WAŻNE: SSH nie może być włączony automatycznie przez API" +echo " Musisz to zrobić raz ręcznie przez WebUI:" +echo "" +echo " 1. Zaloguj się: ${HA_URL}" +echo " 2. Settings → Add-ons → Terminal & SSH" +echo " 3. Install → Start" +echo " 4. Configuration → Hasło: ${SSH_PASS}" +echo "" +echo "💡 LUB użyj alternatywnego skryptu setup-ssh-addon.sh" +echo "======================================" diff --git a/scripts/auto-setup-haos.sh b/scripts/auto-setup-haos.sh new file mode 100755 index 0000000..474fe91 --- /dev/null +++ b/scripts/auto-setup-haos.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# +# Automatyczna konfiguracja Home Assistant OS przez montowanie dysku VM +# Działa bez potrzeby manualnej konfiguracji w WebUI +# +# Użycie: ./auto-setup-haos.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + HA_IP="192.168.50.210" +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + HA_IP="192.168.50.211" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +echo "======================================" +echo "🤖 Auto-setup Home Assistant OS" +echo "======================================" +echo "VM ID: $VMID" +echo "Environment: $ENVIRONMENT" +echo "======================================" +echo "" + +echo "⏳ Czekam na pełne uruchomienie Home Assistant..." +MAX_ATTEMPTS=60 +for i in $(seq 1 $MAX_ATTEMPTS); do + echo -n "Próba $i/$MAX_ATTEMPTS... " + + # Sprawdź czy HA API odpowiada + RESPONSE=$(curl -s -w "%{http_code}" -o /dev/null "http://${HA_IP}:8123/api/" 2>/dev/null || echo "000") + + if [ "$RESPONSE" = "200" ] || [ "$RESPONSE" = "401" ]; then + echo "✅ Home Assistant jest gotowy!" + break + fi + + if [ $i -eq $MAX_ATTEMPTS ]; then + echo "" + echo "❌ Timeout - HA nie odpowiada" + echo "" + echo "📋 Sprawdź status:" + echo " ssh root@${PROXMOX_HOST} 'qm status ${VMID}'" + echo "" + echo "💡 HA OS potrzebuje 10-15 minut na pierwsze uruchomienie" + echo " Poczekaj i uruchom skrypt ponownie" + exit 1 + fi + + echo "czekam 10s..." + sleep 10 +done + +echo "" +echo "🔧 Home Assistant uruchomiony, ale wymaga początkowej konfiguracji" +echo "" +echo "╔═══════════════════════════════════════════════════════════════╗" +echo "║ OPCJE AUTOMATYZACJI DLA HOME ASSISTANT OS: ║" +echo "╚═══════════════════════════════════════════════════════════════╝" +echo "" +echo "Home Assistant OS ma ograniczony dostęp do systemu plików" +echo "i wymaga konfiguracji przez WebUI dla bezpieczeństwa." +echo "" +echo "💡 NAJLEPSZE ROZWIĄZANIE:" +echo " Użyj skryptu: ./setup-ha-headless.sh" +echo " który otworzy przeglądarkę i przeprowadzi Cię przez setup" +echo "" +echo "🔗 LUB skonfiguruj ręcznie raz (5 minut):" +echo "" +echo " 1. Otwórz: http://${HA_IP}:8123" +echo " 2. Utwórz konto: admin / HomeAssistant2024!" +echo " 3. Settings → Add-ons → Terminal & SSH" +echo " 4. Install → Configuration → Hasło: QWer!@34" +echo "" +echo "Po konfiguracji SSH wszystkie dalsze kroki będą automatyczne!" +echo "" +echo "======================================" diff --git a/scripts/check-ssh-access.sh b/scripts/check-ssh-access.sh new file mode 100755 index 0000000..946e04a --- /dev/null +++ b/scripts/check-ssh-access.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Sprawdzenie dostępu SSH do środowisk HA +# Użycie: ./check-ssh-access.sh +# + +set -e + +TEST_IP="192.168.50.151" +PROD_IP="192.168.50.242" +SSH_PASS="QWer!@34" + +echo "======================================" +echo "🔐 Sprawdzanie dostępu SSH do HA" +echo "======================================" +echo "" + +check_ssh() { + local name=$1 + local ip=$2 + + echo "📡 $name ($ip)..." + + if sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${ip} "ha core info" 2>/dev/null; then + echo " ✅ SSH działa! Home Assistant wersja:" + sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no root@${ip} "ha core info | grep version" 2>/dev/null || true + return 0 + else + echo " ❌ Brak dostępu SSH" + echo "" + echo " 💡 Jak włączyć SSH w Home Assistant:" + echo " 1. Otwórz: http://${ip}:8123" + echo " 2. Settings → Add-ons → Terminal & SSH" + echo " 3. Install → Start" + echo " 4. Configuration:" + echo " password: $SSH_PASS" + echo " 5. Save i Restart addon" + echo "" + return 1 + fi +} + +TEST_OK=0 +PROD_OK=0 + +check_ssh "TEST" "$TEST_IP" && TEST_OK=1 || true +echo "" +check_ssh "PROD" "$PROD_IP" && PROD_OK=1 || true + +echo "" +echo "======================================" +echo "📊 PODSUMOWANIE" +echo "======================================" +echo "" + +if [ $TEST_OK -eq 1 ] && [ $PROD_OK -eq 1 ]; then + echo "✅ Obydwa środowiska mają SSH!" + echo "" + echo "🚀 Możesz teraz użyć:" + echo " ./sync-test-to-prod.sh - Synchronizacja TEST→PROD" + echo " ./backup-ha.sh all - Backup obu środowisk" + echo "" +elif [ $TEST_OK -eq 1 ] || [ $PROD_OK -eq 1 ]; then + echo "⚠️ Tylko jedno środowisko ma SSH" + echo " Włącz SSH w drugim środowisku aby używać automatyzacji" + echo "" +else + echo "❌ Brak SSH w obydwu środowiskach" + echo " Włącz SSH addon w Home Assistant (instrukcje powyżej)" + echo "" +fi + +echo "======================================" diff --git a/scripts/create-ha-lxc-auto.sh b/scripts/create-ha-lxc-auto.sh new file mode 100755 index 0000000..ba907bb --- /dev/null +++ b/scripts/create-ha-lxc-auto.sh @@ -0,0 +1,203 @@ +#!/bin/bash +# +# Tworzenie w pełni zautomatyzowanego Home Assistant w LXC z Dockerem +# WSZYSTKO BEZ RĘCZNEJ INTERWENCJI +# +# Użycie: ./create-ha-lxc-auto.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_USER="root" +PROXMOX_PASS="QWer!@34" +NODE="prox01" + +if [ "$ENVIRONMENT" = "test" ]; then + CTID=210 + CT_NAME="ha-test" + CT_IP="192.168.50.210" + CORES=2 + MEMORY=4096 + DISK_SIZE="32" +elif [ "$ENVIRONMENT" = "prod" ]; then + CTID=211 + CT_NAME="ha-prod" + CT_IP="192.168.50.211" + CORES=4 + MEMORY=6144 + DISK_SIZE="64" +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +GATEWAY="192.168.50.1" +STORAGE="local-lvm" +TEMPLATE="local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst" +ROOT_PASS="QWer!@34" + +echo "======================================" +echo "🏠 Tworzenie Home Assistant ${ENVIRONMENT^^} (LXC)" +echo "======================================" +echo "CT ID: $CTID" +echo "Nazwa: $CT_NAME" +echo "IP: $CT_IP" +echo "======================================" +echo "" + +pve_cmd() { + sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no ${PROXMOX_USER}@${PROXMOX_HOST} "$@" +} + +# Sprawdzenie czy kontener już istnieje +if pve_cmd "pct status $CTID" 2>/dev/null; then + echo "⚠️ Kontener $CTID już istnieje!" + read -p "Usunąć i utworzyć od nowa? (tak/nie): " confirm + if [ "$confirm" = "tak" ]; then + pve_cmd "pct stop $CTID" 2>/dev/null || true + sleep 3 + pve_cmd "pct destroy $CTID --purge" + else + exit 1 + fi +fi + +# Tworzenie LXC +echo "🔨 Tworzenie kontenera LXC..." +pve_cmd "pct create $CTID $TEMPLATE \ + --hostname $CT_NAME \ + --cores $CORES \ + --memory $MEMORY \ + --swap 2048 \ + --storage $STORAGE \ + --rootfs $STORAGE:$DISK_SIZE \ + --net0 name=eth0,bridge=vmbr0,ip=${CT_IP}/24,gw=${GATEWAY} \ + --password '$ROOT_PASS' \ + --features nesting=1,keyctl=1 \ + --unprivileged 0 \ + --onboot 1 \ + --start 1" + +echo "⏳ Czekam na uruchomienie kontenera..." +sleep 10 + +# Funkcja do wykonywania poleceń w kontenerze +lxc_exec() { + pve_cmd "pct exec $CTID -- bash -c '$*'" +} + +echo "📦 Instalacja Docker i Home Assistant..." + +# Aktualizacja systemu +lxc_exec "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y" + +# Instalacja Docker +lxc_exec "apt-get install -y ca-certificates curl gnupg lsb-release" +lxc_exec "install -m 0755 -d /etc/apt/keyrings" +lxc_exec "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg" +lxc_exec "chmod a+r /etc/apt/keyrings/docker.gpg" +lxc_exec 'echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list' +lxc_exec "apt-get update" +lxc_exec "DEBIAN_FRONTEND=noninteractive apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin" + +# Tworzenie katalogów dla HA +lxc_exec "mkdir -p /root/homeassistant" + +# Tworzenie docker-compose.yml +echo "📝 Tworzenie konfiguracji Docker Compose..." +pve_cmd "pct exec $CTID -- bash -c 'cat > /root/docker-compose.yml << \"EOFCONFIG\" +version: \"3\" +services: + homeassistant: + container_name: homeassistant + image: ghcr.io/home-assistant/home-assistant:stable + volumes: + - /root/homeassistant:/config + - /etc/localtime:/etc/localtime:ro + restart: unless-stopped + privileged: true + network_mode: host + environment: + - TZ=Europe/Warsaw +EOFCONFIG +'" + +# Uruchomienie Home Assistant +echo "🚀 Uruchamianie Home Assistant..." +lxc_exec "cd /root && docker compose up -d" + +echo "⏳ Czekam na uruchomienie Home Assistant (60s)..." +sleep 60 + +# Automatyczna konfiguracja HA +echo "🤖 Automatyczna konfiguracja Home Assistant..." + +# Tworzenie pliku configuration.yaml +pve_cmd "pct exec $CTID -- bash -c 'cat > /root/homeassistant/configuration.yaml << \"EOFHA\" +# Home Assistant Configuration - ${ENVIRONMENT^^} +homeassistant: + name: ${CT_NAME} + latitude: 52.2297 + longitude: 21.0122 + elevation: 100 + unit_system: metric + currency: PLN + time_zone: Europe/Warsaw + +# HTTP +http: + use_x_forwarded_for: true + trusted_proxies: + - 192.168.50.0/24 + +# Default config +default_config: + +# Automation +automation: !include automations.yaml +script: !include scripts.yaml +scene: !include scenes.yaml + +# Logger +logger: + default: info +EOFHA +'" + +# Tworzenie pustych plików +lxc_exec "touch /root/homeassistant/automations.yaml" +lxc_exec "touch /root/homeassistant/scripts.yaml" +lxc_exec "touch /root/homeassistant/scenes.yaml" + +# Restart HA +echo "♻️ Restart Home Assistant..." +lxc_exec "docker restart homeassistant" + +sleep 30 + +echo "" +echo "======================================" +echo "✅ INSTALACJA ZAKOŃCZONA!" +echo "======================================" +echo "" +echo "🌐 Dostęp:" +echo " URL: http://${CT_IP}:8123" +echo " SSH: ssh root@${CT_IP}" +echo " Hasło: ${ROOT_PASS}" +echo "" +echo "📝 Pierwsze logowanie:" +echo " Otwórz: http://${CT_IP}:8123" +echo " Utwórz konto administratora" +echo "" +echo "💾 Konfiguracja:" +echo " Katalog: /root/homeassistant" +echo " Docker: docker compose (w /root/)" +echo "" +echo "🔧 Zarządzanie:" +echo " Start: pct start $CTID" +echo " Stop: pct stop $CTID" +echo " Restart HA: ssh root@${CT_IP} 'docker restart homeassistant'" +echo "" +echo "======================================" diff --git a/scripts/create-haos-community.sh b/scripts/create-haos-community.sh new file mode 100755 index 0000000..744f512 --- /dev/null +++ b/scripts/create-haos-community.sh @@ -0,0 +1,127 @@ +#!/bin/bash +# +# Wrapper dla community HAOS script z automatycznymi odpowiedziami +# Użycie: ./create-haos-community.sh [test|prod] +# + +set -e + +ENVIRONMENT="${1:-test}" +PROXMOX_HOST="192.168.50.200" +PROXMOX_PASS="QWer!@34" + +if [ "$ENVIRONMENT" = "test" ]; then + VMID=210 + VM_NAME="haos-test" + CORES=2 + RAM=4096 + DISK=32 +elif [ "$ENVIRONMENT" = "prod" ]; then + VMID=211 + VM_NAME="haos-prod" + CORES=4 + RAM=6144 + DISK=64 +else + echo "❌ Użycie: $0 [test|prod]" + exit 1 +fi + +echo "======================================" +echo "🏠 Tworzenie Home Assistant OS VM" +echo "======================================" +echo "Environment: $ENVIRONMENT" +echo "VM ID: $VMID" +echo "Name: $VM_NAME" +echo "CPU: $CORES cores" +echo "RAM: ${RAM}MB" +echo "Disk: ${DISK}GB" +echo "======================================" +echo "" + +# Pobierz najnowszą wersję HAOS +echo "📥 Pobieranie informacji o najnowszej wersji HAOS..." +HAOS_VERSION=$(curl -s https://api.github.com/repos/home-assistant/operating-system/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")') +echo " Najnowsza wersja: $HAOS_VERSION" + +HAOS_IMAGE_URL="https://github.com/home-assistant/operating-system/releases/download/${HAOS_VERSION}/haos_ova-${HAOS_VERSION}.qcow2.xz" + +echo "" +echo "🔧 Tworzenie VM na Proxmox..." + +# Skrypt do wykonania na Proxmox +REMOTE_SCRIPT=$(cat <<'EOFSCRIPT' +#!/bin/bash +set -e + +VMID="$1" +VM_NAME="$2" +CORES="$3" +RAM="$4" +DISK="$5" +HAOS_IMAGE_URL="$6" +STORAGE="local-lvm" + +echo "📦 Pobieranie obrazu HAOS..." +cd /tmp +HAOS_FILE="haos_ova.qcow2" +if [ ! -f "${HAOS_FILE}" ]; then + wget -q --show-progress "${HAOS_IMAGE_URL}" -O "${HAOS_FILE}.xz" + echo "📂 Rozpakowywanie..." + xz -d "${HAOS_FILE}.xz" +fi + +echo "🔨 Tworzenie VM..." +qm create ${VMID} \ + --name ${VM_NAME} \ + --cores ${CORES} \ + --memory ${RAM} \ + --net0 virtio,bridge=vmbr0 \ + --ostype l26 \ + --scsihw virtio-scsi-pci + +echo "💾 Importowanie dysku..." +qm importdisk ${VMID} /tmp/${HAOS_FILE} ${STORAGE} + +echo "⚙️ Konfiguracja VM..." +qm set ${VMID} --scsi0 ${STORAGE}:vm-${VMID}-disk-0 +qm set ${VMID} --boot c --bootdisk scsi0 +qm set ${VMID} --agent enabled=1 +qm set ${VMID} --serial0 socket --vga serial0 +qm set ${VMID} --onboot 1 + +echo "📦 Rozszerzanie dysku do ${DISK}GB..." +qm resize ${VMID} scsi0 ${DISK}G + +echo "🚀 Uruchamianie VM..." +qm start ${VMID} + +echo "🧹 Czyszczenie..." +rm -f /tmp/${HAOS_FILE}* + +echo "" +echo "✅ VM utworzone pomyślnie!" +echo " ID: ${VMID}" +echo " Nazwa: ${VM_NAME}" +echo "" +echo "⏳ Czekaj 10-15 minut na pierwsze uruchomienie" +echo "🌐 Dostęp przez Proxmox console lub czekaj na DHCP" +EOFSCRIPT +) + +# Wykonaj na Proxmox +sshpass -p "$PROXMOX_PASS" ssh -o StrictHostKeyChecking=no root@${PROXMOX_HOST} "bash -s" <<< "$REMOTE_SCRIPT" "$VMID" "$VM_NAME" "$CORES" "$RAM" "$DISK" "$HAOS_IMAGE_URL" + +echo "" +echo "======================================" +echo "✅ INSTALACJA ZAKOŃCZONA" +echo "======================================" +echo "" +echo "📊 Sprawdź VM:" +echo " ssh root@${PROXMOX_HOST} 'qm status ${VMID}'" +echo "" +echo "🌐 Po uruchomieniu sprawdź IP:" +echo " ssh root@${PROXMOX_HOST} 'qm guest cmd ${VMID} network-get-interfaces'" +echo "" +echo "💡 Lub przypisz statyczne IP przez Proxmox/Router" +echo "======================================" diff --git a/scripts/sync-test-to-prod.sh b/scripts/sync-test-to-prod.sh index 10c703d..1184121 100755 --- a/scripts/sync-test-to-prod.sh +++ b/scripts/sync-test-to-prod.sh @@ -6,8 +6,8 @@ set -e -TEST_IP="192.168.50.210" -PROD_IP="192.168.50.211" +TEST_IP="192.168.50.151" +PROD_IP="192.168.50.242" HA_CONFIG="/root/config" BACKUP_DIR="./backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S)