Встановлення Nginx Proxy Manager на VPS: Керування Reverse Proxy та SSL через Web UI
TL;DR
У цьому посібнику ми покроково налаштуємо Nginx Proxy Manager (NPM) на вашому VPS. NPM — це потужний інструмент на базі Docker, який спрощує керування зворотними проксі та SSL-сертифікатами (через Let's Encrypt) для ваших веб-сервісів за допомогою зручного веб-інтерфейсу. Ви навчитеся встановлювати Docker, розгортати NPM, налаштовувати проксі-хости для ваших застосунків, отримувати автоматичні SSL-сертифікати та забезпечувати базову безпеку й обслуговування.
- Налаштування Nginx Proxy Manager для централізованого керування проксі-серверами.
- Автоматичне отримання та оновлення SSL/TLS-сертифікатів від Let's Encrypt.
- Керування багатьма доменами та піддоменами через інтуїтивно зрозумілий веб-інтерфейс.
- Базовий захист сервера та резервне копіювання конфігурації NPM.
- Актуальні команди для Ubuntu 24.04 LTS та Docker на 2026 рік.
- Посібник з вибору відповідного VPS-конфігу для ваших завдань.
Що ми налаштовуємо і навіщо
У сучасному світі, де на одному сервері часто розміщується безліч веб-сервісів — від сайтів і блогів до API-серверів і систем керування проєктами — виникає необхідність у централізованому керуванні доступом до них. Саме це завдання вирішує зворотний проксі-сервер. Він виступає посередником між інтернетом та вашими внутрішніми сервісами, спрямовуючи вхідні запити до потрібного застосунку на основі доменного імені або шляху URL.
Nginx Proxy Manager (NPM) — це потужний інструмент, який значно спрощує налаштування та керування Nginx як зворотним проксі. Замість ручного редагування складних конфігураційних файлів Nginx, NPM пропонує інтуїтивно зрозумілий веб-інтерфейс. Через нього ви можете легко додавати нові проксі-хости, керувати SSL/TLS-сертифікатами (зокрема автоматично отримувати їх від Let's Encrypt), налаштовувати перенаправлення, керувати доступом і багато іншого.
У підсумку, після завершення цього посібника, ви отримаєте повністю налаштований Nginx Proxy Manager, здатний маршрутизувати трафік до ваших внутрішніх застосунків, забезпечуючи при цьому безпечне HTTPS-з'єднання для кожного з них. Це дозволить вам легко додавати нові сервіси на ваш VPS, не турбуючись про ручне налаштування Nginx та SSL для кожного з них. Чи то GitLab, Mattermost, Minecraft-сервер з веб-інтерфейсом, нода блокчейну чи ваш власний SaaS-проєкт, NPM стане центральним вузлом для їх публікації в інтернеті.
Які є альтернативи та чому self-hosted на VPS
Існує кілька підходів до керування зворотними проксі та SSL:
- Ручне налаштування Nginx/Apache: Це класичний метод, що вимагає глибоких знань синтаксису конфігураційних файлів. Він дає максимальну гнучкість, але забирає багато часу і схильний до помилок.
- Caddy: Сучасний веб-сервер, який автоматично керує SSL-сертифікатами. Caddy простіший у налаштуванні, ніж Nginx, але може бути менш гнучким у деяких складних сценаріях проксіювання.
- Cloud-managed Load Balancers (AWS ALB, Google Cloud Load Balancer, Azure Application Gateway): Ці рішення пропонують високу доступність, масштабованість та інтегроване керування SSL. Однак вони значно дорожчі, прив'язують вас до конкретного хмарного провайдера і можуть бути надмірними для невеликих та середніх проєктів.
- Інші Docker-based проксі (Traefik, HAProxy): Traefik особливо популярний в екосистемі Docker завдяки своїй здатності автоматично виявляти та проксіювати сервіси. Однак його налаштування може бути складнішим для новачків порівняно з NPM, який орієнтований на простоту використання через GUI.
Вибір self-hosted рішення, такого як Nginx Proxy Manager на VPS, має низку переваг:
- Повний контроль: Ви повністю контролюєте інфраструктуру та дані, що критично важливо для конфіденційності та безпеки.
- Економічність: Вартість VPS часто значно нижча, ніж щомісячні платежі за хмарні Load Balancers, особливо для проєктів з помірним навантаженням.
- Гнучкість: Ви можете розміщувати будь-які застосунки та сервіси, не обмежуючись специфікою хмарних платформ.
- Універсальність: Той самий підхід працює на будь-якому VPS від будь-якого провайдера.
NPM ідеально підходить для тих, хто хоче отримати зручність хмарних рішень, але зберегти контроль та економічність self-hosted інфраструктури. Це чудовий вибір для розробників, соло-фаундерів, гравців та криптоентузіастів, які керують власними серверами.
Який VPS-конфіг потрібен для цього завдання
Nginx Proxy Manager сам по собі досить легковажний, оскільки по суті є зручною обгорткою над Nginx та Certbot. Основні вимоги до ресурсів залежатимуть від кількості проксійованих сервісів, обсягу трафіку та складності конфігурацій Nginx. Однак для більшості завдань, де NPM виступає як єдина точка входу для кількох веб-застосунків, вимоги будуть помірними.
Мінімальні вимоги (для 1-5 невеликих сервісів, низький трафік):
- CPU: 1 vCPU (сучасний процесор, 2.5+ GHz)
- RAM: 1 GB (для NPM, Docker та базової ОС)
- Диск: 25-30 GB SSD (для ОС, образів Docker та даних NPM)
- Мережа: 100 Mbps (мінімум, з необмеженим трафіком або достатнім лімітом)
Рекомендований VPS-план (для 5-20 сервісів, помірний трафік, включаючи легкі застосунки):
- CPU: 2 vCPU
- RAM: 2-4 GB
- Диск: 50-80 GB SSD
- Мережа: 1 Gbps (з достатнім обсягом трафіку, наприклад, 1-2 TB/міс)
Такий конфіг забезпечить комфортну роботу NPM та кількох контейнерів з вашими застосунками. Наприклад, VPS із зазначеними характеристиками буде хорошим вибором для більшості завдань, описаних у цьому посібнику. При виборі провайдера звертайте увагу на можливість швидкого масштабування ресурсів, якщо ваш проєкт почне активно зростати.
Коли потрібен dedicated, а не VPS
Dedicated сервер може знадобитися, якщо:
- Ви плануєте розміщувати дуже велику кількість сервісів (сотні) з високим трафіком.
- Ваші застосунки вимагають максимальної продуктивності CPU або RAM, яку не може забезпечити VPS (наприклад, високонавантажені бази даних, ігрові сервери з великою кількістю гравців).
- Вам потрібні спеціалізовані апаратні ресурси, такі як GPU або RAID-масиви.
- Потрібна повна ізоляція від інших клієнтів провайдера для максимальної безпеки або відповідності суворим регуляторним вимогам.
Для більшості сценаріїв, описаних у цьому гайді, VPS більш ніж достатній і значно вигідніший.
Локація: на що впливає
Вибір локації VPS впливає на:
- Затримка (Latency): Чим ближче сервер до вашої цільової аудиторії, тим менша затримка і швидше завантаження сторінок. Для європейської аудиторії краще вибирати сервери в Європі, для американської — у Північній Америці.
- Відповідність законодавству: Розміщення даних у певних юрисдикціях може бути вимогою для вашого проєкту (наприклад, GDPR в ЄС).
- Вартість: Ціни на VPS можуть незначно відрізнятися залежно від регіону.
Зазвичай рекомендується вибирати локацію, яка географічно ближча до основного пулу ваших користувачів.
Підготовка сервера
Перед встановленням Nginx Proxy Manager необхідно провести базове налаштування та захист вашого нового VPS. Ми будемо використовувати Ubuntu 24.04 LTS, яка буде актуальною у 2026 році та є стабільною та широко підтримуваною операційною системою.
1. Підключення по SSH
Підключіться до вашого сервера по SSH, використовуючи облікові дані, надані провайдером (зазвичай логін root та пароль).
ssh root@ВАШ_IP_АДРЕС_VPS
2. Оновлення системи
Насамперед оновіть усі пакети до останніх версій. Це забезпечить наявність усіх патчів безпеки та актуальних версій програмного забезпечення.
sudo apt update -y # Оновлення списку пакетів
sudo apt upgrade -y # Оновлення встановлених пакетів
sudo apt autoremove -y # Видалення невикористовуваних пакетів
3. Створення нового користувача з правами sudo
Робота під користувачем root небезпечна. Створіть нового користувача та надайте йому права sudo.
adduser ВАШЕ_ІМ'Я_КОРИСТУВАЧА # Створення нового користувача
usermod -aG sudo ВАШЕ_ІМ'Я_КОРИСТУВАЧА # Додавання користувача до групи sudo
Вийдіть із сесії root та увійдіть під новим користувачем:
exit
ssh ВАШЕ_ІМ'Я_КОРИСТУВАЧА@ВАШ_IP_АДРЕС_VPS
4. Налаштування автентифікації за SSH-ключами (рекомендується)
Автентифікація за SSH-ключами значно безпечніша, ніж за паролем. Якщо у вас ще немає пари SSH-ключів, згенеруйте їх на своєму локальному комп'ютері:
ssh-keygen -t ed25519 -b 4096 # Створення нового SSH-ключа (локально)
Потім скопіюйте публічний ключ на ваш VPS. Замініть ВАШЕ_ІМ'Я_КОРИСТУВАЧА та ВАШ_IP_АДРЕСА_VPS на свої дані.
ssh-copy-id ВАШЕ_ІМ'Я_КОРИСТУВАЧА@ВАШ_IP_АДРЕС_VPS # Копіювання публічного ключа
Після цього ви можете вимкнути автентифікацію за паролем у файлі /etc/ssh/sshd_config для підвищення безпеки. Знайдіть рядки PasswordAuthentication yes та PermitRootLogin yes та змініть їх на no.
sudo nano /etc/ssh/sshd_config
Змініть:
#PasswordAuthentication yes
PasswordAuthentication no
PermitRootLogin no
Перезапустіть SSH-сервіс:
sudo systemctl restart sshd
5. Налаштування брандмауера (UFW)
UFW (Uncomplicated Firewall) — це простий інтерфейс для керування iptables. Налаштуємо його, щоб дозволити лише необхідні з'єднання.
sudo apt install ufw -y # Встановлення UFW
sudo ufw allow OpenSSH # Дозволити SSH (порт 22)
sudo ufw allow 'Nginx Full' # Дозволити HTTP (80) та HTTPS (443)
sudo ufw enable # Увімкнення брандмауера
sudo ufw status verbose # Перевірка статусу брандмауера
Вам буде запропоновано підтвердити увімкнення UFW, оскільки це може перервати існуючі SSH-з'єднання. Введіть y та натисніть Enter.
6. Встановлення Fail2Ban
Fail2Ban допомагає захиститися від брутфорс-атак, автоматично блокуючи 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
У файлі jail.local ви можете змінити параметри, такі як bantime (час блокування), findtime (період для виявлення спроб) та maxretry (максимальна кількість спроб). Переконайтеся, що секція [sshd] активна (enabled = true).
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3
bantime = 1h
Після будь-яких змін перезапустіть Fail2Ban:
sudo systemctl restart fail2ban
Тепер ваш сервер готовий до встановлення Docker та Nginx Proxy Manager.
Встановлення ПЗ — покроково
Nginx Proxy Manager працює як Docker-контейнер, тому першим кроком буде встановлення Docker та Docker Compose на ваш VPS.
1. Встановлення Docker Engine
Видаліть старі версії Docker, якщо вони є, щоб уникнути конфліктів:
for pkg in docker.io docker-doc docker-compose docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; do sudo apt remove $pkg; done
Встановіть необхідні пакети для встановлення Docker через HTTPS:
sudo apt update -y
sudo apt install ca-certificates curl gnupg -y
Додайте офіційний GPG-ключ 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
Додайте репозиторій Docker до APT-джерел:
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
Оновіть список пакетів та встановіть Docker Engine (версія актуальна на 2026 рік, наприклад, 26.x):
sudo apt update -y
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Перевірте, що Docker встановлено та він працює:
sudo docker run hello-world # Запуск тестового контейнера
Додайте вашого користувача до групи docker, щоб уникнути використання sudo при кожній команді Docker:
sudo usermod -aG docker $USER # Додавання поточного користувача до групи docker
newgrp docker # Застосування змін для поточної сесії
Тепер ви можете виконувати команди Docker без sudo.
2. Встановлення Nginx Proxy Manager за допомогою Docker Compose
Створіть директорію для Nginx Proxy Manager та перейдіть до неї:
mkdir nginx-proxy-manager
cd nginx-proxy-manager
Створіть файл docker-compose.yml. Це основний файл конфігурації для Docker Compose, який описує сервіси, мережі та томи.
nano docker-compose.yml
Вставте наступний вміст у файл. Зверніть увагу, що ми використовуємо актуальну версію NPM (наприклад, 2.15.0 на 2026 рік) та базу даних MariaDB. Ми також мапуємо порти 80, 443 та 81 на хостову машину, щоб NPM міг обробляти HTTP/HTTPS трафік та надавати свій веб-інтерфейс.
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:2.15.0' # Актуальна версія NPM на 2026 рік
restart: always
ports:
- '80:80' # HTTP порт
- '443:443' # HTTPS порт
- '81:81' # Порт веб-інтерфейсу NPM
environment:
DB_MYSQL_HOST: 'db'
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: 'npm'
DB_MYSQL_PASSWORD: 'npm_password_secure' # Замініть на надійний пароль
DB_MYSQL_NAME: 'npm'
volumes:
- ./data:/data # Збереження даних конфігурації та SSL
- ./letsencrypt:/etc/letsencrypt # Збереження сертифікатів Let's Encrypt
depends_on:
- db
db:
image: 'mariadb:11.3' # Актуальна стабільна версія MariaDB на 2026 рік
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'root_password_secure' # Замініть на надійний пароль
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm_password_secure' # Повинен збігатися з DB_MYSQL_PASSWORD вище
volumes:
- ./data/mysql:/var/lib/mysql # Збереження даних бази даних
Важливо: Обов'язково замініть npm_password_secure та root_password_secure на свої власні, надійні паролі. Використовуйте різні паролі для користувача NPM та користувача root MariaDB.
3. Запуск Nginx Proxy Manager
Збережіть файл (Ctrl+O, Enter, Ctrl+X) та запустіть контейнери Docker Compose:
docker compose up -d # Запуск контейнерів у фоновому режимі
Ця команда завантажить необхідні Docker-образи (Nginx Proxy Manager та MariaDB), створить контейнери, налаштує мережу та запустить їх. Процес може зайняти кілька хвилин залежно від швидкості вашого інтернет-з'єднання.
4. Перевірка статусу контейнерів
Переконайтеся, що обидва контейнери запущені та працюють:
docker compose ps
Ви повинні побачити статус Up для обох сервісів (app та db).
Тепер Nginx Proxy Manager встановлено та він готовий до початкового налаштування через свій веб-інтерфейс.