Newer
Older
homeassistant-infra / scripts / create-ha-lxc-auto.sh
#!/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 "======================================"