Централизиран 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 вижда и управлява всичко.
📖
Подготовка на 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.

Различен 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
- по-лесна миграция
- много по-малко хаос
Намерихте материала за полезен?
Съдържанието на itpraktika.com е безплатно и ще остане такова.
Ако статията ти е помогнала — можеш да подкрепиш сайта с малка доброволна сума.
Всяко дарение помага за поддръжката и развитието на портала.
