# Интеграция с Nginx Proxy Manager (NPM) Проект умеет автоматически загружать (или обновлять) сертификаты в NPM через его API. ## Включение В конфиге: - `npm_enabled: true` - `npm_host`: например `http://192.168.10.14:81` - `npm_email`, `npm_password` После этого: - `--obtain`, `--renew`, `--auto`, `--test-cert` будут пытаться синхронизировать сертификат в NPM. ## Как работает синхронизация 1) Скрипт логинится в NPM (`/api/tokens`) 2) Получает список сертификатов 3) Ищет сертификат по домену (учитывает `` и `*.`) 4) Если найден — обновляет, иначе — загружает новый ### Про “дубликаты” сертификатов Иногда NPM сразу после загрузки ещё не распарсил домены (поле `domain_names` пустое). Скрипт дополнительно пытается сопоставлять по `nice_name`, чтобы не плодить дубли. Команда для диагностики: - `--list-npm` — показывает сертификаты и подсвечивает дубликаты - `--delete-npm ` — удаляет сертификат по ID ## Ручная загрузка существующего сертификата - `--upload-npm ` Скрипт возьмёт `fullchain.pem` и `privkey.pem` из `cert_dir//` и загрузит/обновит сертификат в NPM. ## Один wildcard сертификат на много поддоменов Практический сценарий: - Получить сертификат на `example.com` + `*.example.com` - В NPM импортировать/использовать этот сертификат для всех Proxy Hosts Обратите внимание: - для wildcard Let’s Encrypt нужен DNS-01 challenge - в NPM можно использовать либо встроенный Let’s Encrypt, либо этот проект как внешний менеджер и синхронизатор ## Пошагово: использовать один wildcard сертификат для всех Proxy Hosts Ниже — практический сценарий, когда вам нужен один сертификат (например, `*.example.com`) и вы хотите назначать его на все хосты. ### Вариант A: сертификат выдаёт этот проект (рекомендуется при reg.ru DNS-01) 1) Убедитесь, что DNS API reg.ru работает: - `letsencrypt-regru --test-api -v` - `letsencrypt-regru --test-dns -v` 2) Получите production сертификат: - `letsencrypt-regru --obtain` 3) Если `npm_enabled=true`, сертификат автоматически появится в NPM. 4) В NPM: - Proxy Hosts → Add/Edit Proxy Host - SSL → выберите сертификат (обычно “Custom/Other”) - включите нужные опции (Force SSL, HSTS по необходимости) ### Вариант B: сертификат выдаёт сам NPM Этот вариант подходит, если NPM может сам пройти challenge. 1) SSL Certificates → Add SSL Certificate → Let’s Encrypt 2) Domain Names: добавьте `example.com` и `*.example.com` 3) Выберите challenge: - HTTP-01: требует доступности NPM из интернета по 80/443 и корректных A/AAAA записей - DNS-01: требует поддерживаемого DNS provider в NPM Если нужного DNS провайдера нет (или нет корректной интеграции для reg.ru), проще использовать этот проект как внешний DNS-01 менеджер. ### Вариант C: импорт уже существующего wildcard сертификата (Custom) Если вы приобрели wildcard сертификат у CA или получили его другим способом: 1) SSL Certificates → Add SSL Certificate → Custom 2) Вставьте: - Certificate: сертификат + intermediate chain (если отдельно — добавьте подряд) - Key: приватный ключ 3) Сохраните и назначайте этот сертификат на Proxy Hosts. ## DNS записи для wildcard Для проксирования поддоменов часто достаточно, чтобы DNS указывал на NPM: - `example.com` → IP NPM - `*.example.com` → IP NPM Точная схема зависит от вашей инфраструктуры. ## Траблшутинг - “не логинится” → проверьте `npm_host` (http/https), креды, доступность - “сертификат не появился” → проверьте `npm_enabled`, логи скрипта - staging сертификаты: не предназначены для production (браузер не доверяет)