bolt Valebyte VPS від $4/міс — NVMe, запуск за 60 секунд.

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення Portainer

calendar_month Jun 09, 2026 schedule 24 хв. читання visibility 70 переглядів
Установка Portainer на VPS: удобное управление Docker-контейнерами
info

Потрібен сервер для цього гайду? Ми пропонуємо виділені сервери та VPS у 50+ країнах з миттєвим налаштуванням.

Потрібен сервер для цього гайду?

Розгорніть VPS або виділений сервер за хвилини.

Встановлення Portainer на VPS: зручне керування Docker-контейнерами

TL;DR

У цьому посібнику ми налаштуємо Portainer CE на вашому віртуальному приватному сервері (VPS), надавши вам потужний та інтуїтивно зрозумілий веб-інтерфейс для керування всіма вашими Docker-контейнерами, образами, томами та мережами. Це значно спростить розгортання та моніторинг ваших застосунків, позбавляючи від необхідності постійно використовувати командний рядок.

  • Portainer CE встановлюється як Docker-контейнер на ваш VPS.
  • Ви отримаєте централізований GUI для керування всіма аспектами Docker.
  • Посібник включає підготовку сервера, встановлення Docker та Portainer, налаштування TLS через Caddy.
  • Особлива увага приділяється безпеці, резервному копіюванню та обслуговуванню системи.
  • Усі команди актуальні для Ubuntu 24.04 LTS та версій ПЗ на 2026 рік.

Що ми налаштовуємо і навіщо

Схема: Що ми налаштовуємо і навіщо
Схема: Що ми налаштовуємо і навіщо

Ми будемо встановлювати Portainer Community Edition (CE) на ваш VPS. Portainer — це потужний, легковажний інструмент для керування Docker-середовищами, що надає інтуїтивно зрозумілий веб-інтерфейс. Якщо ви вже працюєте з Docker, то знаєте, що керування контейнерами, образами, мережами та томами через командний рядок може бути досить трудомістким, особливо при роботі з кількома проєктами або складними конфігураціями.

У підсумку ви отримаєте централізовану панель керування, яка дозволить вам:

  • Розгортати та зупиняти контейнери в кілька кліків.
  • Керувати Docker-образами та реєстрами.
  • Налаштовувати мережі та томи для ваших застосунків.
  • Моніторити стан контейнерів та їхні логи.
  • Керувати стеками Docker Compose, створювати та редагувати їх прямо з інтерфейсу.
  • Налаштовувати доступ для кількох користувачів з різними ролями.

Чому self-hosted на VPS, а не хмарні альтернативи?

На ринку існують різні альтернативи для керування контейнерами. Це можуть бути хмарні керовані сервіси, такі як AWS Elastic Container Service (ECS), Google Kubernetes Engine (GKE) або Azure Kubernetes Service (AKS). Ці платформи пропонують високу масштабованість та абстрагують вас від інфраструктурних деталей, але часто обходяться значно дорожче і можуть бути надмірними для невеликих та середніх проєктів.

Самостійне розгортання Portainer на VPS має низку переваг:

  • Повний контроль: Ви повністю контролюєте свою інфраструктуру, дані та конфігурації.
  • Економія витрат: VPS значно дешевший, ніж хмарні керовані сервіси, особливо для невеликих навантажень.
  • Гнучкість: Ви можете налаштувати сервер під свої специфічні потреби, встановити будь-яке додаткове ПЗ.
  • Досвід та навчання: Керування власним сервером дає цінні навички в адмініструванні систем та Docker.
  • Приватність: Ваші дані залишаються на вашому сервері, під вашим контролем, що важливо для чутливих проєктів.

Portainer ідеально підходить для розробників, яким потрібно швидко підняти тестові середовища, для соло-фаундерів, що керують своїми SaaS-застосунками, для геймерів, що розгортають ігрові сервери, або для криптоентузіастів, що запускають ноди. Він надає баланс між простотою використання та потужністю, роблячи Docker доступним навіть для тих, хто не є експертом у DevOps.

Який VPS-конфіг потрібен під це завдання

Схема: Який VPS-конфіг потрібен під це завдання
Схема: Який VPS-конфіг потрібен під це завдання

Portainer сам по собі є досить легковажним застосунком і споживає мінімум ресурсів. Однак, обираючи VPS, важливо враховувати не тільки вимоги Portainer, а й потенційні навантаження від Docker-контейнерів, якими ви будете керувати. У 2026 році типові вимоги до ресурсів для невеликих та середніх завдань залишаються відносно стабільними.

Мінімальні вимоги для Portainer та кількох невеликих контейнерів (наприклад, веб-сервер, база даних, невеликий застосунок):

  • CPU: Мінімум 2 vCPU. Це забезпечить достатню продуктивність для роботи Docker Engine, Portainer та кількох активних контейнерів без уповільнень.
  • RAM: 2-4 ГБ. Portainer використовує близько 50-100 МБ RAM. Решта знадобиться для операційної системи та ваших контейнерів. Наприклад, веб-сервер (Nginx/Apache), база даних (PostgreSQL/MySQL) та невеликий Node.js/Python застосунок можуть легко використовувати 1-2 ГБ RAM.
  • Диск: 50-100 ГБ SSD. SSD-диски критично важливі для продуктивності Docker, оскільки вони прискорюють операції з образами та томами. 50 ГБ буде достатньо для ОС, Docker Engine, кількох образів та даних застосунків. Якщо ви плануєте зберігати великі обсяги даних (наприклад, логи, медіафайли, великі бази даних), обирайте 100 ГБ або більше.
  • Мережа: 1 Гбіт/с порт. Більшість сучасних VPS-провайдерів пропонують таку швидкість за замовчуванням. Це забезпечить швидке завантаження образів Docker та стабільну роботу ваших застосунків.

Конкретний VPS-план під завдання

Для більшості користувачів, які бажають встановити Portainer та керувати 3-5 не дуже ресурсоємними контейнерами (наприклад, веб-сервер, база даних, CI/CD агент, невеликий бекенд), оптимально підійде VPS з характеристиками:

  • 2-4 vCPU
  • 4 ГБ RAM
  • 100 ГБ SSD
  • 1 Гбіт/с мережевий порт

Ви можете знайти VPS із зазначеними характеристиками у більшості провайдерів, що пропонують надійні та продуктивні рішення для віртуальних серверів.

Коли потрібен dedicated, а не VPS

У деяких випадках звичайного VPS може бути недостатньо, і варто розглянути оренду виділеного сервера (dedicated server):

  • Високі та постійні навантаження: Якщо ви плануєте запускати десятки контейнерів, високонавантажені бази даних, стрімінгові сервіси або обробляти дуже великий трафік.
  • Вимоги до продуктивності: Для завдань, що вимагають максимальної продуктивності CPU (наприклад, компіляція коду, машинне навчання) або дуже великого обсягу оперативної пам'яті (наприклад, in-memory бази даних).
  • Специфічне обладнання: Якщо вам потрібні GPU для обчислень, специфічні RAID-масиви або інші апаратні особливості, недоступні на VPS.
  • Суворі SLA та ізоляція: Dedicated сервер забезпечує повну ізоляцію ресурсів, що може бути критично для деяких корпоративних застосунків або для дотримання суворих вимог безпеки.

Для керування Portainer та десятками контейнерів на виділеному сервері, вам знадобиться відповідний dedicated сервер з потужним багатоядерним процесором, 32-64 ГБ RAM та кількома SSD великої ємності.

Локація: на що впливає

Вибір локації VPS-сервера також важливий і залежить від цільової аудиторії ваших застосунків:

  • Затримка (Latency): Чим ближче сервер до ваших користувачів, тим нижчою буде затримка і швидшим завантаження сторінок або відгук застосунків. Якщо ваша основна аудиторія знаходиться в Європі, обирайте європейський дата-центр.
  • Законодавство та дотримання вимог: У деяких випадках (наприклад, для обробки персональних даних) може знадобитися зберігати дані в певній юрисдикції. Переконайтеся, що обрана локація відповідає всім нормативним вимогам (наприклад, GDPR для ЄС).
  • Вартість: Ціни на VPS можуть незначно відрізнятися залежно від локації дата-центру.

Зазвичай рекомендується обирати локацію, яка географічно найближча до більшості ваших користувачів, щоб забезпечити найкращий користувацький досвід.

Підготовка сервера

Схема: Підготовка сервера
Схема: Підготовка сервера

Перш ніж встановлювати Docker та Portainer, необхідно виконати базове налаштування та посилення безпеки вашого VPS. Ми будемо використовувати Ubuntu 24.04 LTS (Long Term Support) як актуальну та стабільну операційну систему на 2026 рік. Усі команди виконуються від імені користувача root або з використанням sudo.

1. Підключення до сервера

Підключіться до вашого VPS за допомогою SSH. Замініть your_vps_ip на реальну IP-адресу вашого сервера.


ssh root@your_vps_ip

Якщо це перше підключення, вас можуть попросити підтвердити відбиток SSH-ключа сервера.

2. Оновлення системи

Завжди починайте з оновлення списку пакетів та встановлення доступних оновлень, щоб переконатися, що ваша система використовує найактуальніші версії ПЗ.


sudo apt update && sudo apt upgrade -y

Ця команда оновить кеш пакетів та встановить усі доступні оновлення без запиту підтвердження.

3. Створення нового користувача з правами sudo

Робота під користувачем root не рекомендується для повсякденних завдань з міркувань безпеки. Створіть нового користувача та надайте йому права sudo.


adduser your_username

Дотримуйтесь інструкцій на екрані, щоб задати пароль та іншу інформацію (можна залишити порожнім). Потім додайте користувача до групи sudo:


sudo usermod -aG sudo your_username

Тепер ви можете переключитися на нового користувача та виконувати команди з sudo.


su - your_username

4. Налаштування автентифікації за SSH-ключами (рекомендується)

Автентифікація за SSH-ключами значно безпечніша, ніж використання паролів. Якщо ви ще не використовуєте SSH-ключі, згенеруйте їх на своїй локальній машині.

Скопіюйте ваш публічний SSH-ключ на сервер (замініть ~/.ssh/id_rsa.pub на шлях до вашого ключа, а your_username та your_vps_ip на свої значення):


ssh-copy-id your_username@your_vps_ip

Якщо ssh-copy-id недоступна, ви можете зробити це вручну:


mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys

Вставте вміст вашого публічного ключа (зазвичай починається з ssh-rsa AAAA...) у файл authorized_keys та збережіть його. Потім встановіть правильні права:


chmod 600 ~/.ssh/authorized_keys

5. Вимкнення входу для користувача root за SSH

Після налаштування входу за SSH-ключами для нового користувача, вимкніть можливість входу за SSH для root, щоб підвищити безпеку.


sudo nano /etc/ssh/sshd_config

Знайдіть рядок PermitRootLogin та змініть його на:


PermitRootLogin no

Також рекомендується змінити порт SSH за замовчуванням (22) на інший, менш поширений, щоб зменшити кількість автоматичних атак. Знайдіть рядок #Port 22, розкоментуйте його та змініть на, наприклад, Port 2222. Якщо ви змінили порт, не забудьте вказати його при підключенні: ssh -p 2222 your_username@your_vps_ip.

Перезапустіть SSH-сервіс, щоб зміни набули чинності:


sudo systemctl restart sshd

6. Налаштування брандмауера (UFW)

UFW (Uncomplicated Firewall) — це зручний інструмент для керування брандмауером у Linux. Налаштуйте його, щоб дозволити лише необхідні підключення:


sudo apt install ufw -y              # Встановлення UFW, якщо ще не встановлено
sudo ufw allow OpenSSH               # Дозволити SSH (за замовчуванням порт 22, або ваш новий порт)
sudo ufw allow http                  # Дозволити HTTP (порт 80)
sudo ufw allow https                 # Дозволити HTTPS (порт 443)
sudo ufw allow 9000/tcp              # Дозволити порт для Portainer Edge Agent (необов'язково, але корисно)
sudo ufw allow 9443/tcp              # Дозволити порт для веб-інтерфейсу Portainer (за замовчуванням HTTPS)
sudo ufw enable                      # Увімкнути UFW
sudo ufw status verbose              # Перевірити статус брандмауера

При запиті підтвердження після sudo ufw enable введіть y.

7. Встановлення Fail2Ban

Fail2Ban сканує логи сервера (наприклад, логи SSH, веб-сервера) та автоматично блокує IP-адреси, з яких були помічені спроби підбору паролів або інші шкідливі дії. Це значно підвищує безпеку вашого сервера.


sudo apt install fail2ban -y         # Встановлення Fail2Ban
sudo systemctl enable fail2ban       # Увімкнення автозапуску сервісу
sudo systemctl start fail2ban        # Запуск сервісу

Fail2Ban за замовчуванням налаштований для захисту SSH. Ви можете налаштувати його додатково, скопіювавши файл конфігурації:


sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

У цьому файлі ви можете налаштувати параметри, такі як bantime (час блокування), findtime (період, за який рахуються невдалі спроби) та maxretry (максимальна кількість невдалих спроб). Для більшості випадків налаштування за замовчуванням у jail.local достатні.

8. Налаштування синхронізації часу

Правильна синхронізація часу критично важлива для роботи багатьох сервісів, включаючи TLS-сертифікати, логи та розподілені системи.


sudo timedatectl set-ntp true        # Увімкнення синхронізації часу за NTP
sudo timedatectl status              # Перевірка статусу синхронізації

Тепер ваш сервер готовий до встановлення Docker та Portainer. Виконуйте подальші кроки, використовуючи вашого нового користувача та sudo.

Встановлення ПЗ — покроково

Схема: Встановлення ПЗ — покроково
Схема: Встановлення ПЗ — покроково

Тепер, коли ваш сервер підготовлений та захищений, можна приступати до встановлення Docker Engine та Portainer CE. Ми будемо використовувати актуальні версії ПЗ на 2026 рік, орієнтуючись на останні стабільні релізи.

1. Встановлення Docker Engine (версія 26.0.x)

Docker Engine — це основа, на якій працюватиме Portainer та всі ваші контейнери. Ми встановимо його з офіційного репозиторію Docker, щоб завжди мати доступ до актуальних версій.

1.1. Видалення старих версій Docker (якщо вони є)

Якщо раніше на сервері був встановлений Docker, рекомендується видалити всі старі версії, щоб уникнути конфліктів.


for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done
1.2. Встановлення необхідних утиліт

Встановіть пакети, необхідні для роботи з HTTPS-репозиторіями та GPG-ключами.


sudo apt update
sudo apt install ca-certificates curl gnupg -y
1.3. Додавання офіційного GPG-ключа Docker

Додайте GPG-ключ Docker, щоб ваша система могла перевіряти справжність пакетів з репозиторію Docker.


sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
1.4. Додавання репозиторію Docker до APT-джерел

Додайте офіційний репозиторій Docker для Ubuntu 24.04 (кодове ім'я Noble Numbat) до списку джерел пакетів вашої системи.


echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
1.5. Встановлення Docker Engine, Containerd та Docker Compose

Оновіть список пакетів та встановіть Docker Engine, а також Containerd (середовище виконання контейнерів) та Docker Compose (інструмент для визначення та запуску багатоконтейнерних Docker-додатків).


sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
1.6. Додавання користувача до групи docker

Щоб мати можливість запускати команди Docker без sudo, додайте вашого користувача до групи docker.


sudo usermod -aG docker $USER
newgrp docker # Применить изменения к текущей сессии без перелогина

Після виконання newgrp docker, спробуйте виконати команду Docker без sudo. Якщо ви не використовували newgrp docker, вам потрібно буде вийти з SSH-сесії та зайти знову, щоб зміни набули чинності.

1.7. Перевірка встановлення Docker

Переконайтеся, що Docker Engine встановлений та працює коректно, запустивши тестовий контейнер hello-world.


docker run hello-world

Вивід повинен містити повідомлення про те, що ваш Docker встановлений та працює.

2. Встановлення Portainer CE (версія 2.21.x)

Тепер, коли Docker встановлений, можна розгорнути Portainer CE як Docker-контейнер. Ми будемо використовувати останню стабільну версію Portainer CE, яка буде актуальна для 2026 року (наприклад, 2.21.x).

2.1. Створення тому для даних Portainer

Portainer зберігає свої конфігураційні дані, бази даних та налаштування у постійному томі. Створіть його, щоб дані зберігалися навіть при оновленні або перестворенні контейнера Portainer.


docker volume create portainer_data
2.2. Запуск контейнера Portainer

Запустіть Portainer CE у контейнері. Ми налаштуємо його на автоматичний запуск при старті сервера та прив'яжемо необхідні порти та томи.


docker run -d \
  -p 8000:8000 \
  -p 9443:9443 \
  --name portainer \
  --restart always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Розберемо параметри команди:

  • -d: Запускає контейнер у фоновому режимі (detached mode).
  • -p 8000:8000: Прокидає порт 8000 хоста на порт 8000 контейнера. Використовується для зв'язку з Edge Agent, якщо ви будете керувати віддаленими Docker-середовищами.
  • -p 9443:9443: Прокидає порт 9443 хоста на порт 9443 контейнера. Це основний порт для доступу до веб-інтерфейсу Portainer за HTTPS.
  • --name portainer: Присвоює контейнеру ім'я portainer для зручності керування.
  • --restart always: Гарантує, що контейнер Portainer буде автоматично перезапускатися при зупинці або перезавантаженні сервера.
  • -v /var/run/docker.sock:/var/run/docker.sock: Монтує сокет Docker з хост-системи в контейнер Portainer. Це дозволяє Portainer взаємодіяти з локальним Docker Engine.
  • -v portainer_data:/data: Монтує створений нами том portainer_data у директорію /data всередині контейнера, де Portainer зберігає свої дані.
  • portainer/portainer-ce:latest: Вказує Docker-образ Portainer Community Edition. Тег latest завжди вказуватиме на останню стабільну версію.
2.3. Перевірка статусу контейнера Portainer

Переконайтеся, що контейнер Portainer запущений та працює коректно.


docker ps -a | grep portainer

Вивід повинен показати контейнер з ім'ям portainer у статусі Up.

Тепер Portainer встановлений та запущений. На наступному кроці ми приступимо до його початкового налаштування та забезпечення безпечного доступу через HTTPS.

Встановлення ПЗ — покроково

Конфігурація

Схема: Конфігурація
Схема: Конфігурація

Після успішної установки Portainer настав час для його початкового налаштування та забезпечення безпечного доступу. Ми налаштуємо доступ до веб-інтерфейсу, створимо адміністратора і, найголовніше, забезпечимо HTTPS-з'єднання за допомогою зворотного проксі-сервера Caddy та автоматичних Let's Encrypt сертифікатів.

1. Первинний доступ до Portainer UI

Відкрийте ваш веб-браузер і перейдіть за адресою https://your_vps_ip:9443. Вас зустріне сторінка початкового налаштування Portainer.

  1. Створіть користувача-адміністратора: Введіть ім'я користувача (наприклад, admin) та надійний пароль. Обов'язково використовуйте складний пароль.
  2. Вибір середовища: Після створення користувача Portainer запропонує вам вибрати, яким середовищем Docker ви хочете керувати. Виберіть "Get Started" для керування локальним Docker-середовищем на вашому VPS.

Ви потрапите до дашборду Portainer. Зверніть увагу, що за замовчуванням Portainer використовує самопідписаний SSL-сертифікат, тому ваш браузер видаватиме попередження про небезпечне з'єднання. Ми виправимо це, налаштувавши Caddy.

2. Налаштування TLS/HTTPS за допомогою Caddy (рекомендується)

Використання Caddy як зворотного проксі-сервера — це сучасний і дуже зручний спосіб забезпечити HTTPS для Portainer та інших ваших застосунків. Caddy автоматично отримує та оновлює сертифікати Let's Encrypt, що значно спрощує керування TLS.

2.1. Встановлення Caddy

Ми встановимо Caddy з його офіційного репозиторію.


sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy -y

Після встановлення Caddy буде запущено як системний сервіс. Перевірте його статус:


sudo systemctl status caddy

Він має бути в стані active (running).

2.2. Налаштування DNS-запису

Для того щоб Caddy міг отримати сертифікат Let's Encrypt, вам знадобиться доменне ім'я, що вказує на ваш VPS. Створіть A-запис у вашого реєстратора доменів (наприклад, portainer.yourdomain.com) та вкажіть IP-адресу вашого VPS.

Дочекайтеся, доки DNS-запис пошириться мережею (це може зайняти від кількох хвилин до кількох годин).

2.3. Налаштування Caddyfile

Caddyfile — це основний файл конфігурації для Caddy. Ми налаштуємо його для проксіювання запитів з вашого домену на Portainer.


sudo nano /etc/caddy/Caddyfile

Видаліть наявний вміст і вставте наступне, замінивши portainer.yourdomain.com на ваше доменне ім'я:


portainer.yourdomain.com {
    reverse_proxy localhost:9443 {
        transport http {
            tls_trust_panther_root
            insecure_skip_verify
        }
    }
}

Пояснення до Caddyfile:

  • portainer.yourdomain.com: Вказує домен, для якого Caddy оброблятиме запити та автоматично отримуватиме SSL-сертифікат.
  • reverse_proxy localhost:9443: Перенаправляє всі вхідні запити на локальний порт 9443, де працює Portainer.
  • transport http { ... }: Цей блок важливий, оскільки Portainer за замовчуванням використовує внутрішній самопідписаний TLS на порту 9443.
    • tls_trust_panther_root: Додає до довірених сертифікатів кореневий сертифікат Let's Encrypt.
    • insecure_skip_verify: УВАГА! Ця опція вимикає перевірку сертифіката бекенда (Portainer). Використовується тут, тому що Portainer використовує самопідписаний сертифікат. У виробничих умовах для інших застосунків, де бекенд має валідний сертифікат, цю опцію використовувати не слід. Для Portainer це допустимо, оскільки Caddy сам забезпечує зовнішній TLS.

Збережіть файл (Ctrl+O, Enter) та закрийте редактор (Ctrl+X).

2.4. Застосування конфігурації Caddy

Перевірте синтаксис Caddyfile та перезавантажте сервіс Caddy.


sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

Якщо все налаштовано правильно, Caddy перезавантажиться без помилок. Тепер ви можете отримати доступ до Portainer за адресою https://portainer.yourdomain.com. Ваш браузер більше не видаватиме попереджень про безпеку, оскільки Caddy надасть дійсний SSL-сертифікат від Let's Encrypt.

3. Перевірка працездатності

Переконайтеся, що Portainer доступний і працює коректно через доменне ім'я:


curl -I https://portainer.yourdomain.com

Ви маєте побачити HTTP-статус 200 OK або 302 Found (якщо Portainer перенаправляє на сторінку входу), а також заголовки, що вказують на успішне з'єднання через HTTPS.

4. Розгортання тестового контейнера через Portainer

Давайте розгорнемо простий веб-сервер Nginx, щоб переконатися, що Portainer повноцінно керує Docker Engine.

  1. Увійдіть до Portainer через ваш домен (https://portainer.yourdomain.com).
  2. У лівому меню виберіть "Local" (під "Environments").
  3. Перейдіть до "Containers", потім натисніть "Add container".
  4. Заповніть поля:
    • Name: test-nginx
    • Image: nginx:latest
    • Port mappings: Натисніть "publish a new network port".
      • Host port: 8080 (або будь-який вільний)
      • Container port: 80
      • Protocol: tcp
  5. Натисніть "Deploy the container".

Через кілька секунд контейнер test-nginx має бути запущений. Перевірте його, відкривши в браузері http://your_vps_ip:8080. Ви маєте побачити стандартну вітальну сторінку Nginx.

Тепер у вас є повністю налаштований Portainer із безпечним доступом, готовий до керування вашими Docker-застосунками.

Резервні копії та обслуговування

Схема: Резервні копії та обслуговування
Схема: Резервні копії та обслуговування

Забезпечення регулярного резервного копіювання та своєчасного обслуговування є критично важливим для будь-якої робочої системи. У цьому розділі ми розглянемо, що саме потрібно резервувати, як автоматизувати цей процес і як підтримувати вашу систему в актуальному стані.

1. Що резервувати

Для Portainer та ваших Docker-застосунків необхідно регулярно створювати резервні копії наступних компонентів:

  • Дані Portainer: Це найважливіший елемент. Том portainer_data містить всю конфігурацію Portainer, інформацію про користувачів, реєстри, стеки, мережі та томи. Без нього відновлення Portainer означатиме втрату всіх налаштувань.
  • Docker-томи ваших застосунків: Всі постійні дані, що використовуються вашими контейнерами (бази даних, файли користувачів, завантаження), зберігаються в Docker-томах. Кожен том, позначений як "persistent" або явно створений, має бути зарезервований.
  • Файли Docker Compose: Якщо ви використовуєте docker-compose.yml для визначення ваших застосунків, ці файли є їхнім "вихідним кодом". Зберігайте їх у системі контролю версій (наприклад, Git) та/або включайте в регулярні резервні копії.
  • Конфігураційні файли: Конфігурації Caddy (/etc/caddy/Caddyfile), налаштування Fail2Ban (/etc/fail2ban/jail.local) та будь-які інші кастомні налаштування ОС або застосунків.

2. Простий скрипт авторезервування з використанням Restic

Ми будемо використовувати Restic — сучасний, швидкий, ефективний та зашифрований інструмент для резервного копіювання. Restic підтримує безліч бекендів для зберігання, включаючи S3-сумісні сховища, SFTP, Backblaze B2 та інші.

2.1. Встановлення Restic

Завантажте останню версію Restic та перемістіть виконуваний файл до /usr/local/bin.


# Проверьте актуальную версию на https://github.com/restic/restic/releases
RESTIC_VERSION="0.16.4" # Актуально на 2026, может меняться
wget https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_amd64.bz2
bzip2 -d restic_${RESTIC_VERSION}_linux_amd64.bz2
sudo mv restic_${RESTIC_VERSION}_linux_amd64 /usr/local/bin/restic
sudo chmod +x /usr/local/bin/restic
2.2. Налаштування репозиторію Restic

Створіть репозиторій Restic. Як приклад ми будемо використовувати локальну директорію, але для продакшену вкрай рекомендується використовувати віддалене сховище (S3, Backblaze B2, SFTP).


# Створюємо директорію для локального репозиторію (тільки для прикладу)
sudo mkdir -p /mnt/backups/restic_repo
sudo chown $USER:$USER /mnt/backups/restic_repo

# Ініціалізуємо репозиторій. Замініть 'your_strong_password' на ДУЖЕ надійний пароль.
# Цей пароль буде потрібен для доступу до всіх ваших резервних копій.
export RESTIC_PASSWORD="your_strong_password"
restic init --repo /mnt/backups/restic_repo

Для S3-сумісного сховища (наприклад, MinIO, AWS S3, DigitalOcean Spaces):


# Замініть на свої дані
export AWS_ACCESS_KEY_ID="your_s3_access_key"
export AWS_SECRET_ACCESS_KEY="your_s3_secret_key"
export RESTIC_PASSWORD="your_strong_password"
restic init --repo s3:https://s3.your-region.amazonaws.com/your-bucket-name
2.3. Створення скрипта резервування

Створіть файл /usr/local/bin/backup_script.sh:


sudo nano /usr/local/bin/backup_script.sh

Вставте наступний вміст:


#!/bin/bash

# --- Налаштування ---
# Шлях до репозиторію Restic
RESTIC_REPO="/mnt/backups/restic_repo" # Або s3:https://... для віддаленого
# Пароль для репозиторію Restic
export RESTIC_PASSWORD="your_strong_password"
# Директорія для тимчасових файлів резервування (якщо потрібно)
BACKUP_TEMP_DIR="/tmp/docker_backups"

# Що резервувати
PATHS_TO_BACKUP=(
  "/var/lib/docker/volumes/portainer_data" # Дані Portainer
  "/var/lib/docker/volumes/your_app_data_volume" # Приклад: том для вашого застосунку
  "/etc/caddy/Caddyfile"                  # Конфігурація Caddy
  "/etc/fail2ban/jail.local"              # Конфігурація Fail2Ban
  "/opt/docker-compose-projects"          # Директорія з docker-compose.yml файлами
)

# --- Функції ---
# Функція для створення знімків Docker-томів (Portainer сам не зупиняємо)
backup_docker_volume() {
    local volume_path=$1
    local volume_name=$(basename "$volume_path")
    echo "Створення тимчасового архіву для Docker-тома: $volume_name"
    # Для Portainer_data достатньо просто резервувати директорію
    # Для інших томів, можливо, знадобиться зупинка контейнера
    # або використання 'docker run --rm -v $volume_name:/volume -v $BACKUP_TEMP_DIR:/backup alpine tar cvf /backup/$volume_name.tar /volume'
}

# --- Основний скрипт ---
echo "--- Запуск резервування $(date) ---"

# Створюємо тимчасову директорію, якщо вона потрібна для складних резервувань томів
# mkdir -p "$BACKUP_TEMP_DIR"

# Виконуємо резервування з Restic
/usr/local/bin/restic backup \
  "${PATHS_TO_BACKUP[@]}" \
  --repo "$RESTIC_REPO" \
  --verbose \
  --tag "daily-backup" \
  --exclude-file /root/.restic_exclude.txt # Приклад файлу виключень, якщо потрібен

# Очищення старих резервних копій (політика збереження)
echo "Очищення старих знімків..."
/usr/local/bin/restic forget \
  --repo "$RESTIC_REPO" \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6 \
  --prune \
  --verbose

echo "--- Резервування завершено $(date) ---"

# Видаляємо тимчасову директорію
# rm -rf "$BACKUP_TEMP_DIR"

Зробіть скрипт виконуваним:


sudo chmod +x /usr/local/bin/backup_script.sh

Важливо: Замініть your_strong_password на ваш реальний пароль від репозиторію Restic. Ніколи не зберігайте паролі у відкритому вигляді в продакшені; краще використовуйте змінні оточення або секрети Docker. Для cron-завдання можна задати RESTIC_PASSWORD прямо в crontab.

Для резервування Docker-томів, крім portainer_data, може знадобитися зупинка пов'язаних контейнерів або використання команди docker run --rm -v :/volume -v /tmp/backup:/backup alpine tar cvf /backup/.tar /volume для створення знімка тому. Однак для більшості застосунків, які коректно обробляють IO, достатньо прямого резервування директорії тому.

3. Автоматизація резервування за допомогою Cron

Додайте скрипт до Cron для щоденного автоматичного виконання.


crontab -e

Виберіть редактор (якщо запропонує) та додайте наступний рядок в кінець файлу, щоб скрипт запускався щодня о 3:00 ранку:


0 3 * * * /usr/local/bin/backup_script.sh >> /var/log/backup.log 2>&1

Цей рядок запускатиме скрипт щодня о 3 годині ночі та перенаправлятиме весь вивід у файл /var/log/backup.log для подальшого аналізу.

4. Куди зберігати резервні копії

Ніколи не зберігайте всі резервні копії на тому ж сервері, що й оригінальні дані. Якщо сервер вийде з ладу, ви втратите і дані, і резервні копії.

  • Зовнішнє S3-сумісне сховище: Рекомендований варіант. Це може бути AWS S3, Backblaze B2, DigitalOcean Spaces, MinIO або будь-який інший провайдер об'єктного сховища. Це надійно, масштабовано та відносно недорого.
  • Окремий VPS: Ви можете налаштувати другий, менш потужний VPS та використовувати його виключно для зберігання резервних копій, наприклад, через SFTP або NFS.
  • Локальний NAS/зовнішній диск: Якщо ви керуєте локальним сервером, можна використовувати мережеве сховище.

5. Обслуговування та оновлення

Регулярні оновлення критично важливі для безпеки та стабільності системи.

  • Оновлення ОС: Регулярно запускайте sudo apt update && sudo apt upgrade -y. Для Ubuntu LTS це можна робити раз на місяць або в міру виходу важливих патчів безпеки.
  • Оновлення Docker Engine: Оновлюється разом з пакетами ОС через apt upgrade. Завжди перевіряйте release notes перед великими оновленнями.
  • Оновлення Portainer:
    1. Зупиніть поточний контейнер Portainer: docker stop portainer
    2. Видаліть поточний контейнер: docker rm portainer
    3. Завантажте новий образ: docker pull portainer/portainer-ce:latest
    4. Запустіть новий контейнер, використовуючи той самий том даних portainer_data:
      
      docker run -d \
        -p 8000:8000 \
        -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 оновиться, використовуючи ваші існуючі дані.

  • Стратегія оновлень:
    • Rolling updates (безперервні): Для некритичних систем можна налаштувати автоматичне оновлення, але це ризиковано.
    • Maintenance window (вікно обслуговування): Рекомендується планувати оновлення на час мінімального навантаження, попередньо протестувавши їх на стейджинг-сервері (якщо є).
  • Моніторинг логів: Регулярно переглядайте логи системи (journalctl -xe), Docker-контейнерів (docker logs ) та Portainer, щоб виявляти проблеми на ранніх стадіях.

Дотримання цих практик забезпечить стабільність, безпеку та можливість відновлення вашої Docker-інфраструктури, керованої Portainer.

Вирішення проблем + FAQ

У цьому розділі зібрані відповіді на часто задавані питання та рішення типових проблем, які можуть виникнути під час встановлення та використання Portainer на VPS.

Не можу отримати доступ до Portainer по HTTPS через домен.

Що перевірити:

  • DNS-запис: Переконайтеся, що ваш A-запис (наприклад, portainer.yourdomain.com) коректно вказує на IP-адресу вашого VPS і повністю поширився по DNS-серверах. Перевірте за допомогою dig portainer.yourdomain.com.
  • UFW (брандмауер): Перевірте, чи дозволено порт 443 (HTTPS) у UFW. Команда sudo ufw status verbose повинна показати 443/tcp ALLOW Anywhere.
  • Caddy-сервіс: Перевірте, чи запущено Caddy і чи немає помилок у його логах. Команди: sudo systemctl status caddy та sudo journalctl -u caddy --no-pager.
  • Caddyfile: Переконайтеся, що конфігурація в /etc/caddy/Caddyfile правильна, доменне ім'я вказано вірно, і ви перезавантажили Caddy після змін (sudo systemctl reload caddy).
  • Portainer-контейнер: Переконайтеся, що контейнер Portainer запущено і він слухає на порту 9443. Перевірте за допомогою docker ps -a | grep portainer та docker logs portainer.

Як виправити: Виправте DNS-запис, додайте правило в UFW, перевірте синтаксис Caddyfile, перезапустіть сервіси.

Контейнери не запускаються або падають відразу після запуску.

Що перевірити:

  • Логи контейнера: Найперший крок — переглянути логи проблемного контейнера. У Portainer це можна зробити, перейшовши до розділу "Containers", вибравши потрібний контейнер і натиснувши "Logs". У командному рядку: docker logs <container_name_or_id>.
  • Наявність ресурсів: Перевірте, чи достатньо RAM та CPU на VPS. Деякі контейнери вимагають більше ресурсів, ніж ви припускали.
  • Налаштування томів (volumes): Переконайтеся, що всі необхідні томи змонтовані правильно і мають потрібні права доступу.
  • Налаштування мережі: Якщо контейнер повинен взаємодіяти з іншими контейнерами або зовнішньою мережею, переконайтеся, що його мережеві налаштування коректні.
  • Помилки в Dockerfile/docker-compose.yml: Якщо ви використовуєте свої образи або Docker Compose, перевірте файли на наявність синтаксичних помилок або невірних шляхів.

Як виправити: Аналізуйте логи, коригуйте Dockerfile/docker-compose.yml, виділяйте більше ресурсів, перевіряйте права доступу до файлів і директорій, що використовуються томами.

Команди Docker вимагають sudo, хоча я додав користувача до групи docker.

Що перевірити:

  • Група docker: Переконайтеся, що ваш користувач дійсно знаходиться в групі docker. Команда groups $USER повинна показати docker серед груп.
  • Перелогін: Після додавання користувача до групи docker необхідно вийти з SSH-сесії та зайти заново, щоб зміни набули чинності. Або виконайте newgrp docker.

Як виправити: Вийдіть з SSH-сесії та залогіньтеся знову, або виконайте newgrp docker, щоб оновити членство в групах для поточної сесії.

Який VPS-конфіг мінімально підійде для Portainer та кількох невеликих застосунків?

Для Portainer та 2-3 невеликих застосунків (наприклад, веб-сервер, база даних, блог на WordPress) вам буде достатньо VPS з 2 vCPU, 2-4 ГБ оперативної пам'яті та 50-80 ГБ SSD-диска. Це забезпечить комфортну роботу Portainer та стабільне функціонування ваших сервісів.

Що вибрати — VPS чи dedicated для цього завдання?

Для керування Docker-контейнерами за допомогою Portainer та запуску більшості середніх проєктів (кілька десятків контейнерів, середнє навантаження) VPS є оптимальним вибором. Він більш економічний, гнучкий і простий в управлінні. Виділений сервер (dedicated) потрібен лише у випадках, якщо ви плануєте запускати дуже високонавантажені застосунки, сотні контейнерів, або якщо вам потрібне специфічне обладнання (наприклад, потужні GPU) чи повна фізична ізоляція ресурсів. Для більшості користувачів VPS буде більш ніж достатнім.

Як оновити Portainer без втрати даних?

Оновлення Portainer зазвичай відбувається без втрати даних, оскільки всі важливі дані зберігаються в Docker-томі portainer_data. Процес виглядає так:

  1. Зупиніть поточний контейнер Portainer: docker stop portainer.
  2. Видаліть старий контейнер: docker rm portainer.
  3. Завантажте останню версію образу Portainer: docker pull portainer/portainer-ce:latest.
  4. Запустіть новий контейнер, використовуючи ті ж параметри та той самий том даних portainer_data:
    
    docker run -d \
      -p 8000:8000 \
      -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 запуститься з новою версією, використовуючи всі ваші попередні налаштування та дані.

Я забув пароль адміністратора Portainer. Як його скинути?

Якщо ви забули пароль адміністратора Portainer, ви можете скинути його, виконавши наступні кроки:


# Зупиніть контейнер Portainer
docker stop portainer

# Запустіть тимчасовий контейнер для скидання пароля
docker run --rm -it \
  -v portainer_data:/data \
  portainer/portainer-ce:latest \
  --admin-password "new_strong_password"

# Замініть "new_strong_password" на ваш новий пароль.
# Після виконання цієї команди тимчасовий контейнер видалиться.

# Запустіть основний контейнер Portainer знову
docker start portainer

Тепер ви можете увійти до Portainer з новим паролем.

Висновки та наступні кроки

Схема: Висновки та наступні кроки
Схема: Висновки та наступні кроки

У цьому детальному посібнику ми успішно налаштували Portainer Community Edition на вашому VPS, перетворивши складний процес керування Docker-контейнерами на інтуїтивно зрозуміле завдання за допомогою веб-інтерфейсу. Ви пройшли через усі етапи: від підготовки сервера та встановлення Docker до налаштування безпечного доступу через Caddy з автоматичними SSL-сертифікатами, а також впровадили базові практики резервного копіювання та обслуговування. Тепер ви повністю контролюєте свою Docker-інфраструктуру, маючи потужний інструмент для розгортання, моніторингу та керування вашими застосунками.

Ось кілька напрямків, куди ви можете рухатися далі, щоб максимально використати можливості вашого нового середовища:

  • Вивчіть додаткові функції Portainer: Portainer пропонує безліч розширених функцій, таких як керування стеками Docker Compose, шаблони застосунків, створення команд та керування доступом на основі ролей (RBAC), інтеграція з реєстрами образів та багато іншого.
  • Впровадьте CI/CD: Інтегруйте Portainer у ваш робочий процес безперервної інтеграції та доставки (CI/CD). Ви можете налаштувати автоматичне розгортання нових версій ваших застосунків у Portainer після успішної збірки.
  • Моніторинг та логування: Розгляньте можливість встановлення стека моніторингу, такого як Prometheus та Grafana, для глибокого аналізу продуктивності ваших контейнерів та VPS. Для централізованого логування можна використовувати ELK Stack (Elasticsearch, Logstash, Kibana) або Grafana Loki.
  • Масштабування: Якщо ваші потреби зростуть, вивчіть можливості Docker Swarm або навіть Kubernetes. Portainer може керувати кластерами Swarm та Kubernetes, надаючи єдиний інтерфейс для масштабування ваших застосунків.

Ваш VPS тепер є потужною та гнучкою платформою для хостингу будь-яких ваших проєктів, а Portainer робить керування цією платформою простим та ефективним.

Поділитися цим записом:

Встановлення Portainer на VPS: зручне керування Docker-контейнерами
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.