Кластер на M4 Mac mini: как сэкономить до 50 000 рублей в месяц на облачных подписках

Подробный гайд по созданию мощного и экономичного кластера на Mac mini M4 для самохостинга. Узнайте, как заменить дорогие облачные подписки на собственный homelab и сократить ежемесячные расходы.

Не указано

Первоначальная настройка оборудования

Подготовьте Mac mini для работы 24/7. Включите удаленный доступ (SSH) и назначьте статические IP-адреса для каждого узла кластера. Отключите автоматический сон в настройках энергосбережения.

1. Системные настройки -> Общие -> Доступ -> Удаленный доступ (SSH)
2. Системные настройки -> Энергосбережение -> Отключить «Предотвращать сон при отключении экрана»
3. Сетевые настройки -> Назначить IP вручную (например, 192.168.1.10 для Master, 192.168.1.11 для Worker)

Установка Docker на macOS

Установите Docker Desktop для управления контейнерами. Это основа для запуска Nextcloud, Home Assistant и других сервисов.

# Установка через Homebrew (рекомендуемый способ)
brew install --cask docker

# Проверка установки
docker --version
# Docker version 24.0.0+, build...

Настройка общего хранилища (NFS)

Для отказоустойчивости данные должны быть доступны всем узлам. Настройте общий доступ к папке на одном из Mac mini (или NAS) через протокол NFS. Это позволит контейнерам на разных узлах видеть одни и те же файлы.

# На узле-хранилище (macOS)
sudo -s
mkdir -p /Shared/Storage

# Экспорт папки (требует редактирования конфига или использования UI)
# Включите общий доступ к папке через Системные настройки -> Общий доступ -> Файлы -> NFS
# Добавьте запись типа: -mapall=501:20 192.168.1.0/24

# На остальных узлах (монтирование)
# Добавьте в /etc/fstab или монтируйте вручную
mkdir -p /mnt/nas
df -h

Создание Docker Swarm кластера

Инициализируйте кластер Docker Swarm для оркестрации контейнеров. Это позволит управлять сервисами и балансировать нагрузку между узлами.

# На Master-узле (IP 192.168.1.10)
docker swarm init --advertise-addr 192.168.1.10

# Скопируйте токен, который вернет команда, и выполните на Worker-узлах
# Пример токена:
docker swarm join --token SWMTKN-1-xyz... 192.168.1.10:2377

# Проверка статуса Swarm
docker node ls

Развертывание Nextcloud

Создайте Docker Compose файл для развертывания Nextcloud с подключением к общему хранилищу и базе данных (например, MariaDB). Запустите стек как сервис Swarm.

version: '3.8'
services:
  nextcloud:
    image: nextcloud:latest
    ports:
      - "8080:80"
    volumes:
      - /mnt/nas/nextcloud_data:/var/www/html/data
    environment:
      - MYSQL_HOST=db
      - MYSQL_PASSWORD=password
    networks:
      - backend
    deploy:
      replicas: 1

  db:
    image: mariadb:10.5
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=nextcloud
    volumes:
      - /mnt/nas/db_data:/var/lib/mysql
    networks:
      - backend
    deploy:
      replicas: 1

networks:
  backend:
    driver: overlay

Управление приложением Home Assistant

Запустите Home Assistant в отдельном контейнере. Убедитесь, что у контейнера есть доступ к USB-координаторам (Zigbee/Z-Wave) через параметр --device или volume.

# Запуск Home Assistant в Docker Swarm
docker service create \
  --name homeassistant \
  --mount type=bind,source=/mnt/nas/hass_config,target=/config \
  --constraint 'node.role == worker' \
  -p 8123:8123 \
  --env TZ=Europe/Moscow \
  ghcr.io/home-assistant/home-assistant:stable

# Для доступа к USB (если подключен к узлу):
# Используйте утилиту UTM или добавьте --device /dev/ttyUSB0 при создании сервиса.

Балансировка нагрузки и SSL (Nginx Proxy Manager)

Установите Nginx Proxy Manager в Docker для доступа к сервисам по доменным именам и автоматического получения SSL-сертификатов (Let's Encrypt).

version: '3.8'
services:
  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - /mnt/nas/npm_data:/data
      - /mnt/nas/npm_letsencrypt:/etc/letsencrypt
    deploy:
      placement:
        constraints:
          - node.role == master

Мониторинг ресурсов (Prometheus + Grafana)

Разверните стек мониторинга для наблюдения за нагрузкой CPU, RAM и сетью на каждом Mac mini.

version: '3.8'
services:
  prometheus:
    image: prom/prometheus
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - /mnt/nas/prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana
    volumes:
      - /mnt/nas/grafana_data:/var/lib/grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin