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