Централизиран Portainer за няколко Docker CT контейнера в Proxmox

Централизиран Portainer за няколко Docker CT контейнера в Proxmox

Portainer в Proxmox се оказа едно от най-полезните неща, които съм настройвал в домашната си Docker инфраструктура. От доста време исках да си направя по-подредена Docker инфраструктура в Proxmox VE. Вместо всичко да бъде наблъскано в един Docker host, предпочитам услугите да са разделени в отделни LXC CT контейнери:

  • websites
  • monitoring
  • Nextcloud
  • AI инструменти
  • тестови среди

Проблемът е, че когато Docker host-овете станат повече, управлението започва да става досадно:

  • SSH по различни контейнери
  • различни compose файлове
  • logs на различни места
  • restart-и на ръка
  • трудно следене кое къде е

Решението се оказа централен Portainer в Proxmox с Portainer Agent на всеки Docker CT.

И честно казано — стана изненадващо лесно.


Каква е идеята

Имам:

Proxmox
│
├── CT-101 → Docker → websites
├── CT-102 → Docker → Nextcloud
├── CT-103 → Docker → monitoring
├── CT-104 → Docker → AI
│
└── CT-200 → централен Portainer

На всеки CT:

  • Docker си работи нормално
  • compose-ите си работят нормално

А централният Portainer вижда и управлява всичко.


📖
Може да ви е интересно още
Инсталиране на Docker и Docker Compose на Debian 12 (Ubuntu)

Подготовка на Proxmox CT контейнерите

Много важно:

В Proxmox CT трябва да е включено:

Features → Nesting → ON

Иначе Docker често прави проблеми.


Инсталация на централен Portainer

Първо си създадох отделен CT контейнер само за Portainer.

После:

mkdir -p /root/dockeri/portainer
cd /root/dockeri/portainer
nano docker-compose.yml

Сложих следния compose:

services:
  portainer:
    image: portainer/portainer-ce:lts

    container_name: portainer

    restart: unless-stopped

    command: -H unix:///var/run/docker.sock

    security_opt:
      - no-new-privileges:true

    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/dockeri/portainer/data:/data

    ports:
      - 6868:9000

После:

docker compose up -d

Достъп:

http://IP:6868

Защо използвам HTTP вместо HTTPS

Portainer вече препоръчва HTTPS и порт 9443.

Но при мен:

  • всичко е локално
  • няма public access
  • няма reverse proxy
  • няма външен достъп

Затова предпочетох:

6868:9000

вместо:

6868:9443

Така:

  • няма self-signed SSL warning-и
  • няма certificate драми
  • по-удобно е за локална мрежа

Инсталация на Portainer Agent

Това е най-важната част.

Agent-ът се инсталира на ВСЕКИ Docker CT, който искам да управлявам.

Примерно:

  • CT-101
  • CT-102
  • CT-103
  • CT-104

На всеки от тях:

mkdir -p /root/dockeri/portainer-agent
cd /root/dockeri/portainer-agent
nano docker-compose.yml

Compose файл:

services:
  portainer-agent:
    image: portainer/agent:lts

    container_name: portainer-agent

    restart: unless-stopped

    ports:
      - 9001:9001

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes

Важно уточнение за Portainer Agent портовете

Когато добавям нов Docker CT контейнер в Portainer, не е нужно да използвам различен port за всеки Agent.

Portainer Agent стандартно работи на:

9001

и спокойно мога да използвам същия port на всички Docker CT контейнери, защото всеки контейнер има различен IP адрес.

Пример:

10.20.20.51:9001
10.20.20.52:9001
10.20.20.53:9001
10.20.20.54:9001

Това е напълно нормално и е препоръчителният начин за работа с Portainer Agent.

Portainer Agent портовете

Различен port би бил необходим само ако:

  • няколко Agent-а работят на един и същ IP адрес
  • или има конфликт с друга услуга

При отделни Proxmox CT контейнери няма такъв проблем, защото всеки контейнер си има собствен IP адрес.

После:

docker compose up -d

Проверка:

docker ps

Трябва да виждам:

portainer-agent

Добавяне на Docker host-овете в Portainer

След това вече всичко се прави през web интерфейса.

Влизам в Portainer:

Environments
→ Add environment
→ Docker Standalone
→ Agent

Попълвам:

Name

Примерно:

nextcloud-ct

Environment URL

Примерно:

10.20.20.55:9001

където:

  • 10.20.20.55 е IP-то на Docker CT контейнера
  • 9001 е Portainer Agent портът

Натискам:

Connect

И готово.


Какво виждам след това

Portainer започва да вижда:

  • containers
  • compose stacks
  • images
  • volumes
  • networks
  • logs
  • exec console
  • resource usage

от съответния CT контейнер.


Голямото предимство

Вече:

  • не SSH-вам по 10 контейнера
  • не търся compose файлове навсякъде
  • не restart-вам услуги на ръка
  • не се чудя къде какво беше

Всичко е централизирано.


Важно за сигурността

Portainer Agent:

  • не трябва да е exposed към интернет
  • не трябва да има port forwarding
  • не трябва да е public

Достатъчно е:

  • централният Portainer да вижда вътрешните IP адреси
  • всичко да е само в LAN

Какво НЕ управлява Portainer

Важно уточнение:

Portainer НЕ управлява директно Proxmox.

Той управлява:

  • Docker daemon-а
  • в отделните CT контейнери

Тоест:

  • вижда Docker containers
  • вижда Docker stacks
  • но НЕ вижда LXC контейнерите
  • НЕ вижда VM-ите
  • НЕ вижда Proxmox storage/networking

Крайният резултат

Честно казано — това се оказа една от най-смислените промени в home lab-а ми.

Получих:

  • централизирано управление
  • по-чиста архитектура
  • по-лесни backup-и
  • по-лесен monitoring
  • по-лесна миграция
  • много по-малко хаос

open source spirit
🛠️
$

Намерихте материала за полезен?

Съдържанието на itpraktika.com е безплатно и ще остане такова.
Ако статията ти е помогнала — можеш да подкрепиш сайта с малка доброволна сума. Всяко дарение помага за поддръжката и развитието на портала.

PayPal Revolut

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *


Колко е 7 - 4 ? (въведете числото)