Главная страницаHome AssistantHome Assistant в Docker ContainerDocker часть 2: Docker и Portainer
Docker часть 2: Docker и Portainer

Docker часть 2: Docker и Portainer

В первый части мы установили чистый Debian на виртуальную машину Proxmox. Сейчас добавим Docker и Portainer для управления контейнерами.

Настройка репозитория

Будет использовать метод установки из репозитория. Данный способ является самым оптимальным. И рекомендован разработчиками Docker.

Обновляем все текущие пакеты и добавляем возможность использовать apt через HTTPS:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

Добавляем официальный GPG-ключ

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Настраиваем доступ до репозитория

echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Установка Docker

Устанавливаем все необходимые пакеты для работы с docker

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Чтобы не было ошибки permission denied unix:///var/run/docker.sock необходимо добавить текущего пользователя в группу и назначить права на docker.sock:

sudo usermod -aG docker ${USER}
sudo chmod 666 /var/run/docker.sock

Установка Portainer

Чтобы установить Portainer, мы создадим скрипт docker-compose, который затем запустим, чтобы все настроить. В дальнейшем все дополнительные контейнеры будем хранить в этом файле.

mkdir home-assistant
cd ./home-assistant
sudo nano docker-compose.yaml
# Сохранить и закрыть с помощью Ctrl+O и Ctrl+X

Хранить всю конфигурацию будем в папке home-assistant. Это упрощает резервное копирование всего. Эти тома будут хранить данные из образа Docker локально, поэтому данные не будут потеряны при пересборке контейнера (например, при обновлении).

version: '3.0'

services:
  portainer:
    container_name: portainer
    image: portainer/portainer-ce:latest
    restart: unless-stopped
    ports:
      - "9000:9000/tcp"
      - "9443:9443/tcp"
    environment:
      - TZ=Europe/Moscow
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer/data:/data

Мы также разрешим нашему пользователю без прав администратора изменять этот файл. Опять же, просто чтобы сделать нашу жизнь немного проще.

sudo chown root:docker docker-compose.yaml
sudo chmod g+w docker-compose.yaml

Запуск

Теперь выполняем команду docker compose up -d, и Docker загрузит последний образ и все настроит.

При первом посещении Portainer нас попросят создать учетную запись пользователя. На это будет 10 минут. Если не успеть, то придется перезагружать docker контейнер. Это сделано для безопасности. Так как не всегда Portainer запускается локально.

Когда настройка пройдет у нас появится доступ к web интерфейсу:

https://<ip>:9443 # ошибка сертификата
http://<ip>:9000 # не защищенное соединение

Не обращайте внимание на ошибки. Они появляются так как ssl сертификат является самоподписанным. В этом нет ничего плохого.

Итоговая структура проекта

Папка portainer заполнилась автоматически, после запуска Docker контейнера. В ней хранятся данные, которые в случае перезапуска загрузятся и не придется устанавливаться все с нуля.

home-assistant
├── docker-compose.yaml
└── portainer
    └── data

Список всех частей

Был ли полезен материал?

Мне очень важно получать обратную связь. Пожалуйста, оцените материал. Так я пойму в какую сторону его стоит изменить.

Комментарии
  • Евгений
    Евгений
    20.07.2023 18:35

    Хорошие статьи. А где у Вас можно взять полный docker-compose.yml файл?

    • Alexander Pushkarev
      Alexander Pushkarev
      07.10.2023 19:23
      version: '3.0'
      
      services:
        homeassistant:
          container_name: homeassistant
          image: ghcr.io/home-assistant/home-assistant:stable
          restart: unless-stopped
          privileged: true
          network_mode: host
          environment:
            - TZ=Europe/Moscow
          volumes:
            - ./homeassistant/:/config
            - /etc/localtime:/etc/localtime:ro
            - /run/dbus:/run/dbus:ro
          depends_on:
            - mariadb
      
        mariadb:
          container_name: mariadb
          image: mariadb:latest
          restart: unless-stopped
          environment:
            - TZ=Europe/Moscow
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_DATABASE=${MYSQL_HA_DATABASE}
            - MYSQL_USER=${MYSQL_HA_USER}
            - MYSQL_PASSWORD=${MYSQL_HA_PASSWORD}
          ports:
            - 3306:3306
          volumes:
            - ./mariadb:/var/lib/mysql
      
        phpmyadmin:
          container_name: phpmyadmin
          image: phpmyadmin:latest
          restart: unless-stopped
          environment:
            - PMA_HOST=mariadb
            #- PMA_USER=root
            #- PMA_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
          volumes:
            - ./phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
          ports:
            - 8090:80
          depends_on:
            - mariadb
      
        mosquitto:
          container_name: mosquitto
          image: eclipse-mosquitto:latest
          restart: unless-stopped
          stdin_open: true
          tty: true
          environment:
            - TZ=Europe/Moscow
          volumes:
            - ./mosquitto/config:/mosquitto/config
            - ./mosquitto/data:/mosquitto/data
            - ./mosquitto/log:/mosquitto/log
          ports:
            - 1883:1883/tcp
          
        zigbee2mqtt:
          container_name: zigbee2mqtt
          image: koenkk/zigbee2mqtt:latest
          restart: unless-stopped
          devices:
            - ${ZIGBEE_ADAPTER_TTY}:/dev/ttyACM0
          environment:
            - TZ=Europe/Moscow
          volumes:
            - ./zigbee2mqtt:/app/data
            - /run/udev:/run/udev:ro
          ports:
            - 8020:8020
          depends_on:
            - mosquitto
      
        esphome:
          container_name: esphome
          image: esphome/esphome:latest
          restart: unless-stopped
          privileged: true
          network_mode: host
          environment:
            - TZ=Europe/Moscow
            - ESPHOME_DASHBOARD_USE_PING=true
          volumes:
            - ./esphome/config:/config
            - /etc/localtime:/etc/localtime:ro
      
        nodered:
          container_name: nodered
          image: nodered/node-red:latest
          restart: unless-stopped
          environment:
            - TZ=Europe/Moscow
          volumes:
            - ./nodered:/data
          ports:
            - 1880:1880/tcp
          depends_on:
            - homeassistant
            - mosquitto
        
        code-server:
          image: lscr.io/linuxserver/code-server:latest
          container_name: code-server
          restart: unless-stopped
          environment:
            - PUID=1000
            - PGID=1000
            - TZ=Europe/Moscow
          volumes:
            - ./:/config/workspace
          ports:
            - 8443:8443
Оставить комментарий