## Этап 1: Подготовка железа и Proxmox **1.1 Установка Proxmox** - Скачайте Proxmox VE ISO с официального сайта - Создайте загрузочную флешку (Rufus/Etcher) - Установите Proxmox на мини-ПК - После установки заходите в веб-интерфейс: `https://IP-адрес:8006` **1.2 Базовая настройка Proxmox** bash ```bash # Подключитесь по SSH к Proxmox # Отключите enterprise репозиторий (если нет подписки) nano /etc/apt/sources.list.d/pve-enterprise.list # Закомментируйте строку (#) # Добавьте community репозиторий nano /etc/apt/sources.list # Добавьте: deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription # Обновите систему apt update && apt upgrade -y ``` ## Этап 2: Регистрация домена и настройка Cloudflare **2.1 Регистрация домена на reg.ru** - Зарегистрируйте домен (например, `mysmarthome.ru`) - Не настраивайте пока ничего на reg.ru **2.2 Перенос DNS на Cloudflare** - Создайте бесплатный аккаунт на cloudflare.com - Добавьте ваш домен ("Add site") - Cloudflare покажет nameservers (типа `ns1.cloudflare.com`) - Зайдите в личный кабинет reg.ru → Управление доменом → DNS-серверы - Замените DNS-серверы reg.ru на серверы Cloudflare - Ждите 24 часа (обычно происходит быстрее) **2.3 Базовая настройка Cloudflare** - В Cloudflare: SSL/TLS → выберите **"Full (strict)"** - Включите: "Always Use HTTPS" ## Этап 3: Создание LXC контейнера для Home Assistant **3.1 Создание LXC через Proxmox** bash ```bash # В веб-интерфейсе Proxmox: # Create CT → выберите: # - Template: Debian 12 # - RAM: 3072 MB # - CPU: 2 cores # - Disk: 32 GB # - Network: DHCP (запомните IP) # - Unprivileged: снимите галочку (для Home Assistant нужен privileged) ``` **3.2 Установка Home Assistant в LXC** bash ```bash # Подключитесь к LXC через консоль Proxmox apt update && apt upgrade -y # Установите зависимости apt install -y curl wget network-manager apparmor # Установите Home Assistant через скрипт curl -Lo installer.sh https://get.hass.io bash installer.sh ``` Через 10-15 минут Home Assistant будет доступен: `http://IP-LXC:8123` ## Этап 4: Создание VM с Docker **4.1 Создание Ubuntu VM** bash ```bash # В Proxmox веб-интерфейсе: # Скачайте Ubuntu Server 24.04 ISO # Create VM: # - RAM: 10240 MB (10 ГБ) # - CPU: 4 cores # - Disk: 200 GB # - Network: DHCP ``` **4.2 Установка Docker и Portainer** bash ```bash # Подключитесь к VM по SSH # Обновите систему sudo apt update && sudo apt upgrade -y # Установите Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Добавьте текущего пользователя в группу docker sudo usermod -aG docker $USER # Перелогиньтесь # Установите Docker Compose sudo apt install docker-compose-plugin -y # Установите Portainer docker volume create portainer_data docker run -d \ -p 9000:9000 \ -p 9443:9443 \ --name=portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest ``` Portainer доступен: `https://IP-VM:9443` ## Этап 5: Установка сервисов через Docker Compose **5.1 Создайте структуру папок** bash ```bash mkdir -p ~/docker/{gitea,nextcloud,adguard,vaultwarden,cloudflared} cd ~/docker ``` **5.2 Gitea** bash ```bash cd ~/docker/gitea nano docker-compose.yml ``` yaml ```yaml version: "3" services: gitea: image: gitea/gitea:latest container_name: gitea restart: always environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=db:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea_password volumes: - ./data:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" depends_on: - db db: image: postgres:15-alpine restart: always environment: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea_password - POSTGRES_DB=gitea volumes: - ./postgres:/var/lib/postgresql/data ``` bash ```bash docker compose up -d ``` **5.3 Nextcloud** bash ```bash cd ~/docker/nextcloud nano docker-compose.yml ``` yaml ```yaml version: '3' services: db: image: postgres:15-alpine restart: always volumes: - ./db:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=nextcloud_password - POSTGRES_DB=nextcloud - POSTGRES_USER=nextcloud redis: image: redis:alpine restart: always app: image: nextcloud:latest restart: always ports: - 8080:80 volumes: - ./data:/var/www/html environment: - POSTGRES_HOST=db - POSTGRES_PASSWORD=nextcloud_password - POSTGRES_DB=nextcloud - POSTGRES_USER=nextcloud - REDIS_HOST=redis depends_on: - db - redis ``` bash ```bash docker compose up -d ``` **5.4 AdGuard Home** bash ```bash cd ~/docker/adguard nano docker-compose.yml ``` yaml ```yaml version: '3' services: adguard: image: adguard/adguardhome:latest container_name: adguardhome restart: always ports: - "53:53/tcp" - "53:53/udp" - "3001:3000/tcp" volumes: - ./work:/opt/adguardhome/work - ./conf:/opt/adguardhome/conf ``` bash ```bash docker compose up -d ``` **5.5 Vaultwarden** bash ```bash cd ~/docker/vaultwarden nano docker-compose.yml ``` yaml ```yaml version: '3' services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: always ports: - "8081:80" volumes: - ./data:/data environment: - DOMAIN=https://vault.yourdomain.ru ``` bash ```bash docker compose up -d ``` ## Этап 6: Настройка Cloudflare Tunnel **6.1 Создание туннеля** - Зайдите в Cloudflare Dashboard - Zero Trust → Networks → Tunnels → Create a tunnel - Выберите "Cloudflared" → дайте имя (например, "home-server") - Cloudflare покажет команду для установки **6.2 Установка cloudflared на Docker VM** bash ```bash # На вашей Ubuntu VM выполните команду из Cloudflare # Она будет примерно такой: curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb sudo dpkg -i cloudflared.deb # Авторизуйте туннель (скопируйте команду из Cloudflare) sudo cloudflared service install <ваш-токен> ``` **6.3 Настройка маршрутов в Cloudflare** В Cloudflare Dashboard → Tunnels → ваш туннель → Public Hostname: Добавьте маршруты: 1. **Home Assistant** - Subdomain: `ha` - Domain: `yourdomain.ru` - Service: `http://IP-вашего-LXC:8123` 2. **Nextcloud** - Subdomain: `cloud` - Domain: `yourdomain.ru` - Service: `http://IP-вашей-VM:8080` 3. **Gitea** - Subdomain: `git` - Domain: `yourdomain.ru` - Service: `http://IP-вашей-VM:3000` 4. **Vaultwarden** - Subdomain: `vault` - Domain: `yourdomain.ru` - Service: `http://IP-вашей-VM:8081` 5. **AdGuard Home** - Subdomain: `adguard` - Domain: `yourdomain.ru` - Service: `http://IP-вашей-VM:3001` 6. **Portainer** - Subdomain: `portainer` - Domain: `yourdomain.ru` - Service: `https://IP-вашей-VM:9443` - ⚠️ Включите "No TLS Verify" ## Этап 7: Финальные настройки **7.1 Настройка Nextcloud для работы через домен** bash ```bash # Подключитесь к контейнеру Nextcloud docker exec -it nextcloud-app-1 bash # Добавьте trusted domain nano /var/www/html/config/config.php # Добавьте в массив trusted_domains: 'trusted_domains' => array ( 0 => 'localhost', 1 => 'cloud.yourdomain.ru', ), # Выйдите и перезапустите exit docker restart nextcloud-app-1 ``` **7.2 Обновите Vaultwarden с правильным доменом** bash ```bash cd ~/docker/vaultwarden nano docker-compose.yml # Измените DOMAIN на: - DOMAIN=https://vault.yourdomain.ru docker compose down && docker compose up -d ``` ## Этап 8: Проверка и тестирование **8.1 Проверьте доступность сервисов** - `https://ha.yourdomain.ru` - Home Assistant - `https://cloud.yourdomain.ru` - Nextcloud - `https://git.yourdomain.ru` - Gitea - `https://vault.yourdomain.ru` - Vaultwarden - `https://adguard.yourdomain.ru` - AdGuard Home - `https://portainer.yourdomain.ru` - Portainer **8.2 Проверьте SSL сертификаты** Все должны показывать зеленый замочек (Cloudflare автоматически выдает сертификаты) ## Этап 9: Безопасность **9.1 Настройте Cloudflare Access (опционально)** Для дополнительной защиты можете добавить авторизацию перед доступом к сервисам **9.2 Настройте бэкапы в Proxmox** - Datacenter → Backup → Add - Настройте автоматические бэкапы VM и LXC **9.3 Обновите пароли** Замените все пароли в docker-compose файлах на надежные ## Полезные команды для управления bash ```bash # Просмотр логов docker logs -f имя-контейнера # Перезапуск контейнера docker restart имя-контейнера # Обновление образа cd ~/docker/сервис docker compose pull docker compose up -d # Просмотр всех контейнеров docker ps -a # Использование ресурсов docker stats ```