76 KiB
Руководство по использованию скриптов для управления SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru
🆕 Новое в версии 2.0
Автоматическая интеграция с Nginx Proxy Manager!
Python скрипт теперь автоматически загружает созданные сертификаты в Nginx Proxy Manager.
- ✅ Автоматическая загрузка сертификатов в NPM
- ✅ Автоматическое обновление существующих сертификатов
- ✅ Полная интеграция через API NPM
- ✅ Поддержка wildcard сертификатов
Содержание
- Введение
- ⚡ Быстрая установка (letsencrypt_regru.sh)
- 🔨 Сборка исполняемых файлов
- Быстрый старт
- Установка через Makefile
- Создание тестовых сертификатов
- Требования
- Установка зависимостей
- Настройка
- Использование Bash скрипта
- Использование Python скрипта
- Интеграция с Nginx Proxy Manager
- Автоматическая проверка и обновление сертификатов
- Автоматизация обновления
- Устранение неполадок
Введение
В проекте представлены два скрипта для автоматического создания и обновления SSL сертификатов Let's Encrypt с использованием DNS-валидации через API reg.ru:
- letsencrypt_regru_dns.sh - Bash скрипт с использованием плагина certbot-dns-regru
- letsencrypt_regru_api.py - Python скрипт с прямым взаимодействием с API reg.ru и интеграцией с NPM
Оба скрипта поддерживают:
- Создание wildcard сертификатов (*.domain.com)
- Автоматическое обновление сертификатов
- DNS-валидацию через API reg.ru
- Логирование всех операций
- Перезагрузку веб-сервера после обновления
Дополнительно Python скрипт поддерживает:
- ✨ Автоматическую загрузку в Nginx Proxy Manager
- ✨ Автоматическое обновление сертификатов в NPM
- ✨ API интеграцию с NPM
⚡ Быстрая установка (letsencrypt_regru.sh)
Автоматическая установка всего приложения одной командой!
Скрипт letsencrypt_regru.sh автоматизирует весь процесс развертывания:
- ✅ Установка всех зависимостей (Python, certbot, библиотеки)
- ✅ Создание виртуального окружения Python
- ✅ Интерактивная настройка конфигурации
- ✅ Настройка systemd для автоматического обновления
- ✅ Создание удобных команд
Установка
Вариант 1: Автоматическая установка одной командой
# Метод 1: Через pipe (рекомендуется)
curl -fsSL https://github.com/DFofanov/configure_nginx_manager/raw/refs/heads/master/letsencrypt_regru.sh | sudo bash
# Метод 2: Через bash -c
sudo bash -c "$(curl -fsSL https://github.com/DFofanov/configure_nginx_manager/raw/refs/heads/master/letsencrypt_regru.sh)"
Вариант 2: Клонирование репозитория
# 1. Клонируйте репозиторий
git clone https://github.com/DFofanov/configure_nginx_manager.git
cd configure_nginx_manager
# 2. Запустите установку
sudo bash letsencrypt_regru.sh
Интерактивная настройка:
Скрипт спросит:
- Домен (например, example.com)
- Email для Let's Encrypt
- Учетные данные reg.ru
- Настройки NPM (опционально)
Использование после установки
После установки доступна глобальная команда letsencrypt-regru:
🔧 Основные команды
# Проверить срок действия сертификата
letsencrypt-regru --check
# Получить новый сертификат Let's Encrypt
letsencrypt-regru --obtain
# Обновить существующий сертификат
letsencrypt-regru --renew
# Создать тестовый самоподписанный сертификат
letsencrypt-regru --test-cert
# Автоматическая проверка и обновление при необходимости
letsencrypt-regru --auto
🧪 Команды диагностики и тестирования
# Получить тестовый сертификат Let's Encrypt (staging)
# - Полностью идентичный процесс с production
# - БЕЗ лимитов на количество запросов (неограниченно!)
# - Идеально для тестирования автоматизации и DNS
# - Браузеры не доверяют (staging CA)
# - НЕ загружается в Nginx Proxy Manager
letsencrypt-regru --staging
# Проверить доступ к API reg.ru
# - Тестирует подключение к API
# - Показывает текущий IP адрес
# - Отображает баланс аккаунта reg.ru
letsencrypt-regru --test-api
# Тестовое создание DNS записи TXT
# - Полная симуляция процесса SSL сертификации
# - Создает временную TXT запись _acme-challenge
# - Проверяет распространение DNS (60 секунд)
# - Автоматически удаляет тестовую запись
letsencrypt-regru --test-dns
# Показать справку по всем доступным командам
letsencrypt-regru --help
# Включить подробный вывод (verbose mode)
letsencrypt-regru --obtain -v
letsencrypt-regru --check -v
letsencrypt-regru --staging -v
# Очистить lock-файлы Certbot (если процесс завис)
letsencrypt-regru --force-cleanup
# Показать полную информацию о сертификате
letsencrypt-regru --info
🔄 Работа с Nginx Proxy Manager
# Загрузить существующий сертификат в NPM (вручную)
# Указываете домен, для которого хотите загрузить сертификат
letsencrypt-regru --upload-npm example.com
# Загрузить wildcard сертификат
letsencrypt-regru --upload-npm example.com # для *.example.com
# Команда автоматически:
# - Найдет сертификат в /etc/letsencrypt/live/DOMAIN/
# - Проверит тип (staging/production)
# - Загрузит или обновит в NPM
# - Покажет ID сертификата в NPM
Примечание: При использовании --obtain или --renew сертификат автоматически загружается в NPM (если npm_enabled=true в конфигурации). Команда --upload-npm нужна для ручной загрузки существующих сертификатов.
⚙️ Служебные команды (внутреннее использование)
# Certbot authentication hook (используется certbot)
letsencrypt-regru --auth-hook
# Certbot cleanup hook (используется certbot)
letsencrypt-regru --cleanup-hook
Автоматическое обновление
Скрипт установки настраивает автоматическую проверку сертификатов каждые 12 часов:
# Проверить статус автообновления
systemctl status letsencrypt-regru.timer
# Посмотреть логи
journalctl -u letsencrypt-regru -f
# Или в файле
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
Управление установкой
Обновление
# Способ 1: Из локального репозитория (если клонировали)
cd configure_nginx_manager
git pull # Получить последние изменения
sudo bash letsencrypt_regru.sh update
# Способ 2: Обновление одной командой с GitHub (рекомендуется)
curl -fsSL https://github.com/DFofanov/configure_nginx_manager/raw/refs/heads/master/letsencrypt_regru.sh | sudo bash -s update
# ❌ НЕ РАБОТАЕТ (неправильный синтаксис):
# sudo bash -c "$(curl -fsSL ...) update" # Аргументы не передаются!
Удаление
# Способ 1: Из локального репозитория
sudo bash letsencrypt_regru.sh uninstall
# Способ 2: Удаление одной командой с GitHub
curl -fsSL https://github.com/DFofanov/configure_nginx_manager/raw/refs/heads/master/letsencrypt_regru.sh | sudo bash -s uninstall
💡 Совет: При обновлении/удалении через curl скрипт автоматически скачивает необходимые файлы с GitHub.
📚 Техническая справка: Синтаксис команд
Почему используется | sudo bash -s update вместо bash -c "$(curl ...) update"?
Правильный способ (с аргументами):
curl -fsSL https://url/script.sh | sudo bash -s update
# ↑
# -s передает аргументы скрипту
Неправильный способ (аргументы игнорируются):
sudo bash -c "$(curl -fsSL https://url/script.sh) update"
# ↑
# Это НЕ аргумент для скрипта!
# Это аргумент для bash -c
Объяснение:
bash -c "command"- выполняет команду как строку, дополнительные аргументы становятся позиционными параметрами для bash, а не для скриптаbash -s arg1 arg2- читает скрипт из stdin и передает arg1, arg2 как аргументы скрипту ($1, $2)
Альтернативные способы:
# Вариант 1: Через pipe (рекомендуется)
curl -fsSL https://url/script.sh | sudo bash -s update
# Вариант 2: Через временный файл
curl -fsSL https://url/script.sh -o /tmp/install.sh
sudo bash /tmp/install.sh update
rm /tmp/install.sh
# Вариант 3: Через wget
wget -qO- https://url/script.sh | sudo bash -s update
Расположение файлов
После установки файлы находятся:
| Тип | Путь |
|---|---|
| Приложение | /opt/letsencrypt-regru/ |
| Конфигурация | /etc/letsencrypt-regru/config.json |
| Логи | /var/log/letsencrypt-regru/ |
| Сертификаты | /etc/letsencrypt/live/ |
| Systemd сервис | /etc/systemd/system/letsencrypt-regru.service |
| Systemd таймер | /etc/systemd/system/letsencrypt-regru.timer |
Редактирование конфигурации
# Отредактировать настройки
sudo nano /etc/letsencrypt-regru/config.json
# Перезапустить таймер после изменений
sudo systemctl restart letsencrypt-regru.timer
🚀 Установка через Makefile
Самый быстрый способ установки на Linux!
Makefile автоматизирует весь процесс установки, настройки systemd-сервисов и cron-заданий.
Быстрая установка
# 1. Установка (требует root)
sudo make install
# 2. Редактирование конфигурации
sudo nano /etc/letsencrypt/regru_config.json
# 3. Проверка конфигурации
sudo make check-config
# 4. Тестовый запуск
sudo make test-run
Доступные команды Makefile
Основные команды
# Установка всего: создание директорий, копирование скрипта, настройка systemd и cron
sudo make install
# Полное удаление: удаление службы, cron-задания, файлов
sudo make uninstall
# Показать статус установки, systemd и cron
sudo make status
# Справка по всем командам
make help
Утилиты
# Проверка JSON конфигурации на валидность
sudo make check-config
# Тестовый запуск без обновления cron/systemd
sudo make test-run
# Просмотр логов
sudo make logs
# Запуск скрипта напрямую
sudo make run
# Получение нового сертификата
sudo make obtain
# Обновление существующего сертификата
sudo make renew
# Создание тестового самоподписанного сертификата
sudo make test-cert
# Очистка логов
sudo make clean
Что делает make install
-
Создает директории
/opt/letsencrypt-regru/- директория установки/var/log/letsencrypt/- директория логов
-
Устанавливает зависимости
pip3 install certbot requests cryptography -
Копирует скрипт
- Копирует
letsencrypt_regru_api.pyв/opt/letsencrypt-regru/ - Устанавливает права на выполнение
- Копирует
-
Создает конфигурацию
- Создает
/etc/letsencrypt/regru_config.json(если не существует) - Устанавливает права 600 для безопасности
- Создает
-
Настраивает systemd
- Создает
letsencrypt-regru.service- разовый запуск - Создает
letsencrypt-regru.timer- таймер для ежедневного запуска - Включает и запускает таймер
- Создает
-
Настраивает cron
- Добавляет задание для запуска каждый день в 3:00 AM
0 3 * * * /opt/letsencrypt-regru/letsencrypt_regru_api.py --config /etc/letsencrypt/regru_config.json --auto >> /var/log/letsencrypt/letsencrypt_regru.log 2>&1
Что делает make uninstall
-
Останавливает и удаляет службы
- Останавливает systemd timer и service
- Удаляет файлы служб из
/etc/systemd/system/ - Перезагружает конфигурацию systemd
-
Удаляет cron-задание
- Удаляет запись из crontab
-
Удаляет файлы (с подтверждением)
- Удаляет
/opt/letsencrypt-regru/ - Опционально удаляет конфигурацию и логи
- Удаляет
Пример: Полная установка от А до Я
# 1. Клонируем или скачиваем проект
cd /tmp
git clone <repository-url>
cd configure_nginx_manager
# 2. Устанавливаем через Makefile
sudo make install
# 3. Редактируем конфигурацию
sudo nano /etc/letsencrypt/regru_config.json
# Вставляем реальные данные:
{
"regru_username": "myuser",
"regru_password": "mypassword",
"domain": "example.com",
"wildcard": true,
"email": "admin@example.com",
"renewal_days": 30,
"npm_enabled": true,
"npm_host": "https://npm.example.com",
"npm_email": "admin@example.com",
"npm_password": "npm_password"
}
# 4. Проверяем конфигурацию
sudo make check-config
# 5. Тестируем
sudo make test-run
# 6. Проверяем статус
sudo make status
# 7. Смотрим логи
sudo make logs
Структура после установки
/opt/letsencrypt-regru/
├── letsencrypt_regru_api.py # Основной скрипт
/etc/letsencrypt/
├── regru_config.json # Конфигурация (600)
└── live/ # Сертификаты Let's Encrypt
└── example.com/
├── fullchain.pem
└── privkey.pem
/var/log/letsencrypt/
└── letsencrypt_regru.log # Логи
/etc/systemd/system/
├── letsencrypt-regru.service # Systemd сервис
└── letsencrypt-regru.timer # Systemd таймер (ежедневно)
Проверка работы автоматизации
# Статус systemd таймера
sudo systemctl status letsencrypt-regru.timer
# Когда будет следующий запуск
sudo systemctl list-timers letsencrypt-regru.timer
# Проверка cron
sudo crontab -l | grep letsencrypt
# Ручной запуск службы (для теста)
sudo systemctl start letsencrypt-regru.service
# Просмотр логов службы
sudo journalctl -u letsencrypt-regru.service -f
Удаление
# Полное удаление
sudo make uninstall
# Система спросит подтверждение перед удалением конфигурации и логов
🧪 Создание тестового самоподписанного сертификата
Идеально для тестирования без ограничений Let's Encrypt!
Let's Encrypt имеет ограничения на количество сертификатов (5 в неделю на домен). Для тестирования и разработки можно использовать самоподписанные сертификаты.
Преимущества тестовых сертификатов
✅ Нет ограничений - создавайте сколько угодно сертификатов
✅ Мгновенное создание - без DNS-валидации и ожидания
✅ Тестирование NPM - проверка интеграции с Nginx Proxy Manager
✅ Офлайн работа - не требуется интернет и API reg.ru
✅ Идентичная структура - те же файлы, что и Let's Encrypt
⚠️ Ограничения: Браузеры не доверяют самоподписанным сертификатам
Быстрое создание
# Создать тестовый сертификат
sudo make test-cert
Команда автоматически:
- Генерирует RSA ключ 2048 бит
- Создает самоподписанный сертификат на 90 дней
- Поддерживает wildcard домены (если настроено)
- Создает все необходимые файлы (privkey.pem, cert.pem, fullchain.pem, chain.pem)
- Опционально загружает в Nginx Proxy Manager
Использование Python скрипта напрямую
# Создать тестовый сертификат с подробным выводом
sudo python3 /opt/letsencrypt-regru/letsencrypt_regru_api.py \
--config /etc/letsencrypt/regru_config.json \
--test-cert -v
Что создается
После выполнения команды будут созданы файлы:
/etc/letsencrypt/live/example.com/
├── privkey.pem # Приватный ключ RSA 2048 бит
├── cert.pem # Сертификат
├── fullchain.pem # Полная цепочка (для nginx)
└── chain.pem # Цепочка CA (пустой для самоподписанного)
Интеграция с NPM
Если в конфигурации включена интеграция с NPM (npm_enabled: true), тестовый сертификат автоматически загрузится в Nginx Proxy Manager:
{
"npm_enabled": true,
"npm_host": "https://npm.example.com",
"npm_email": "admin@example.com",
"npm_password": "password"
}
Пример вывода
═══════════════════════════════════════════════════════════════
ГЕНЕРАЦИЯ ТЕСТОВОГО САМОПОДПИСАННОГО СЕРТИФИКАТА
═══════════════════════════════════════════════════════════════
Домен: example.com
Wildcard: True
Срок действия: 90 дней
⚠️ ВНИМАНИЕ: Это тестовый сертификат, не для production!
✓ Приватный ключ сохранен: /etc/letsencrypt/live/example.com/privkey.pem
✓ Сертификат сохранен: /etc/letsencrypt/live/example.com/cert.pem
✓ Fullchain сохранен: /etc/letsencrypt/live/example.com/fullchain.pem
✓ Chain файл создан: /etc/letsencrypt/live/example.com/chain.pem
═══════════════════════════════════════════════════════════════
ИНФОРМАЦИЯ О СЕРТИФИКАТЕ
═══════════════════════════════════════════════════════════════
Домен: example.com
Wildcard: *.example.com
Действителен с: 2025-10-27 12:00:00
Действителен до: 2026-01-25 12:00:00
Когда использовать тестовые сертификаты
✅ Используйте для:
- Локальной разработки и тестирования
- Проверки интеграции с Nginx Proxy Manager
- Тестирования автоматизации
- Разработки без доступа к интернету
- Избежания лимитов Let's Encrypt при частом тестировании
❌ НЕ используйте для:
- Production окружения
- Публичных веб-сайтов
- Любых случаев, где требуется доверие браузеров
Переход с тестового на production
После успешного тестирования легко переключиться на настоящий Let's Encrypt сертификат:
# 1. Удалить тестовый сертификат
sudo rm -rf /etc/letsencrypt/live/example.com/
# 2. Получить настоящий сертификат
sudo make obtain
# Или автоматически
sudo make run
Требования
Общие требования
- Операционная система: Linux (Ubuntu/Debian/CentOS)
- Права: root или sudo
- Домен зарегистрирован на reg.ru
- Доступ к API reg.ru (имя пользователя и пароль)
Для Bash скрипта
- certbot
- certbot-dns-regru (плагин)
- curl
- jq
- openssl
Для Python скрипта
- Python 3.6+
- certbot
- pip3
- Модули Python: requests, cryptography
Установка зависимостей
Ubuntu/Debian
# Обновление пакетов
sudo apt-get update
# Установка базовых зависимостей
sudo apt-get install -y certbot curl jq openssl python3 python3-pip
# Для Python скрипта
sudo pip3 install certbot-dns-regru requests cryptography
# Для Bash скрипта (если используете)
sudo pip3 install certbot-dns-regru
CentOS/RHEL
# Обновление пакетов
sudo yum update -y
# Установка EPEL репозитория
sudo yum install -y epel-release
# Установка базовых зависимостей
sudo yum install -y certbot curl jq openssl python3 python3-pip
# Установка плагина
sudo pip3 install certbot-dns-regru requests cryptography
Настройка
1. Получение учетных данных API reg.ru
- Войдите в личный кабинет на сайте reg.ru
- Перейдите в раздел "Управление API"
- Используйте ваше имя пользователя и пароль для доступа к API
- Убедитесь, что у вас есть права на управление DNS-записями
2. Настройка конфигурации
Для Python скрипта
Создайте файл конфигурации на основе примера:
# Создание примера конфигурации
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json
# Редактирование конфигурации
sudo nano /etc/letsencrypt/regru_config.json
Отредактируйте параметры:
{
"regru_username": "your_actual_username",
"regru_password": "your_actual_password",
"domain": "example.com",
"wildcard": true,
"email": "admin@example.com",
"cert_dir": "/etc/letsencrypt/live",
"log_file": "/var/log/letsencrypt_regru.log",
"dns_propagation_wait": 60,
"dns_check_attempts": 10,
"dns_check_interval": 10
}
Для Bash скрипта
Отредактируйте переменные в начале скрипта:
sudo nano letsencrypt_regru_dns.sh
Измените следующие параметры:
REGRU_USERNAME="your_actual_username"
REGRU_PASSWORD="your_actual_password"
DOMAIN="example.com"
WILDCARD_DOMAIN="*.example.com"
EMAIL="admin@example.com"
3. Установка прав доступа
# Для Bash скрипта
sudo chmod +x letsencrypt_regru_dns.sh
# Для Python скрипта
sudo chmod +x letsencrypt_regru_api.py
# Защита файла конфигурации
sudo chmod 600 /etc/letsencrypt/regru_config.json
Использование Bash скрипта
Первый запуск (получение сертификата)
sudo ./letsencrypt_regru_dns.sh
Скрипт автоматически:
- Проверит зависимости
- Создаст файл с учетными данными
- Установит плагин certbot-dns-regru (если не установлен)
- Проверит наличие существующего сертификата
- Получит новый сертификат или обновит существующий
- Перезагрузит веб-сервер
Просмотр логов
sudo tail -f /var/log/letsencrypt_regru.log
Ручная проверка сертификата
sudo certbot certificates
Использование Python скрипта
Создание примера конфигурации
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json
Получение нового сертификата
# С использованием конфигурационного файла
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain
# С подробным выводом
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain -v
Обновление существующего сертификата
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --renew
Проверка срока действия сертификата
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --check
Автоматический режим (проверка и обновление)
# Скрипт сам определит, нужно ли обновление
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
Опции командной строки
-c, --config FILE Путь к файлу конфигурации (JSON)
--create-config FILE Создать пример файла конфигурации
--obtain Получить новый сертификат
--renew Обновить существующий сертификат
--check Проверить срок действия сертификата
-v, --verbose Подробный вывод
<EFBFBD> Сборка исполняемых файлов
PyInstaller - компиляция в исполняемые файлы
Скрипт можно скомпилировать в исполняемый файл для Linux и Windows с помощью PyInstaller.
Преимущества:
- ✅ Не требуется установленный Python на целевой системе
- ✅ Все зависимости включены в один файл
- ✅ Простота распространения и развертывания
Недостатки:
- ❌ Большой размер (~40-60 MB)
- ❌ Certbot всё равно должен быть установлен в системе
- ❌ Медленный первый запуск
Быстрая сборка
Для Linux:
make build-linux
Для Windows:
make build-windows
Для всех платформ:
make build-all
Полный релиз с пакетами
# Создаст tar.gz для Linux и zip для Windows
make release
Результат:
dist/letsencrypt-regru- Linux executabledist/letsencrypt-regru.exe- Windows executabledist/letsencrypt-regru-linux-x86_64.tar.gzdist/letsencrypt-regru-windows-x86_64.zip
Использование собранного файла
Linux:
# Установка
sudo cp dist/letsencrypt-regru /usr/local/bin/
sudo chmod +x /usr/local/bin/letsencrypt-regru
# Использование
sudo letsencrypt-regru --help
sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
Windows:
# Просто запустить
.\dist\letsencrypt-regru.exe --help
📖 Подробнее: См. BUILD_GUIDE.md для детальных инструкций по сборке.
<EFBFBD>🚀 Быстрый старт
За 3 простых шага получите SSL сертификат в Nginx Proxy Manager!
Шаг 1: Создайте конфигурацию
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json
Шаг 2: Отредактируйте параметры
sudo nano /etc/letsencrypt/regru_config.json
Заполните:
{
"regru_username": "ваш_логин_regru",
"regru_password": "ваш_пароль_regru",
"domain": "example.com",
"wildcard": true,
"email": "admin@example.com",
"npm_enabled": true,
"npm_host": "http://10.10.10.14:81",
"npm_email": "admin@example.com",
"npm_password": "changeme"
}
Шаг 3: Получите сертификат
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain
✅ Готово!
Откройте Nginx Proxy Manager → SSL Certificates
Ваш сертификат *.example.com готов к использованию! 🎉
Что произошло:
- ✅ Создан wildcard сертификат через Let's Encrypt
- ✅ Выполнена DNS-валидация через API reg.ru
- ✅ Сертификат автоматически загружен в Nginx Proxy Manager
- ✅ Веб-сервер перезагружен
Интеграция с Nginx Proxy Manager
Обзор возможностей
Скрипт letsencrypt_regru_api.py поддерживает автоматическое добавление и обновление SSL сертификатов в Nginx Proxy Manager через его API.
Возможности:
- ✅ Автоматическое добавление новых сертификатов в NPM
- ✅ Обновление существующих сертификатов в NPM
- ✅ Поиск сертификатов по доменному имени
- ✅ Поддержка wildcard сертификатов
- ✅ Полная синхронизация после создания/обновления
Настройка интеграции
1. Параметры конфигурации NPM
| Параметр | Описание | Пример |
|---|---|---|
npm_enabled |
Включить интеграцию с NPM | true или false |
npm_host |
URL адрес NPM | http://10.10.10.14:81 |
npm_email |
Email для входа в NPM | admin@example.com |
npm_password |
Пароль администратора NPM | changeme |
2. Получение учетных данных NPM
- Войдите в Nginx Proxy Manager:
http://10.10.10.14:81 - Используйте email и пароль администратора
- По умолчанию:
- Email:
admin@example.com - Password:
changeme
- Email:
- ВАЖНО: Измените пароль по умолчанию!
Использование
Автоматическая синхронизация
После создания или обновления сертификата скрипт автоматически:
- Авторизуется в Nginx Proxy Manager
- Проверит, существует ли сертификат для домена
- Создаст новый сертификат или обновит существующий
- Загрузит файлы сертификата в NPM
Создание нового сертификата с автоматической загрузкой в NPM
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain
Скрипт выполнит:
- ✅ Создание сертификата через Let's Encrypt
- ✅ DNS-валидация через reg.ru API
- ✅ Автоматическая загрузка в NPM
- ✅ Перезагрузка веб-сервера
Обновление существующего сертификата
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --renew
Скрипт выполнит:
- ✅ Обновление сертификата через certbot
- ✅ Автоматическое обновление в NPM
- ✅ Перезагрузка веб-сервера
Автоматический режим
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
Скрипт автоматически определит:
- Нужно ли создать новый сертификат
- Требуется ли обновление (если осталось < 30 дней)
- Выполнит синхронизацию с NPM
Работа с API Nginx Proxy Manager
Класс NginxProxyManagerAPI
Скрипт использует класс NginxProxyManagerAPI для работы с NPM:
from letsencrypt_regru_api import NginxProxyManagerAPI
# Инициализация
npm_api = NginxProxyManagerAPI(
host="http://10.10.10.14:81",
email="admin@example.com",
password="changeme",
logger=logger
)
# Авторизация
npm_api.login()
# Получение списка сертификатов
certificates = npm_api.get_certificates()
# Поиск сертификата по домену
cert = npm_api.find_certificate_by_domain("example.com")
# Синхронизация сертификата
npm_api.sync_certificate("example.com", "/etc/letsencrypt/live/example.com")
API Endpoints
Скрипт использует следующие endpoints NPM API:
| Endpoint | Метод | Описание |
|---|---|---|
/api/tokens |
POST | Авторизация |
/api/nginx/certificates |
GET | Список сертификатов |
/api/nginx/certificates |
POST | Создание сертификата |
/api/nginx/certificates/{id} |
PUT | Обновление сертификата |
Логи и отладка
Просмотр логов
# Основной лог скрипта
sudo tail -f /var/log/letsencrypt_regru.log
# Подробный режим
sudo python3 letsencrypt_regru_api.py -c config.json --obtain -v
Примеры логов при успешной синхронизации
2025-10-27 10:30:15 - INFO - === Синхронизация сертификата с Nginx Proxy Manager ===
2025-10-27 10:30:15 - INFO - Авторизация в Nginx Proxy Manager...
2025-10-27 10:30:16 - INFO - Авторизация в NPM успешна
2025-10-27 10:30:16 - DEBUG - Получение списка сертификатов из NPM...
2025-10-27 10:30:16 - DEBUG - Получено 3 сертификатов
2025-10-27 10:30:16 - INFO - Создание нового сертификата в NPM
2025-10-27 10:30:16 - INFO - Загрузка сертификата для example.com в NPM...
2025-10-27 10:30:17 - INFO - Сертификат успешно загружен в NPM (ID: 4)
2025-10-27 10:30:17 - INFO - Сертификат успешно добавлен в Nginx Proxy Manager
Устранение неполадок NPM
Ошибка: Не удалось авторизоваться в NPM
Причины:
- Неверный email или пароль
- NPM недоступен по указанному адресу
- Сетевые проблемы
Решение:
# Проверьте доступность NPM
curl http://10.10.10.14:81/api/
# Проверьте учетные данные
# Войдите в NPM через браузер с теми же учетными данными
Ошибка: Сертификат не загружен в NPM
Причины:
- Файлы сертификата не найдены
- Неправильный формат сертификата
- Проблемы с API NPM
Решение:
# Проверьте наличие файлов сертификата
ls -la /etc/letsencrypt/live/example.com/
# Проверьте права доступа
sudo chmod 644 /etc/letsencrypt/live/example.com/*.pem
# Попробуйте вручную
sudo python3 -c "
from letsencrypt_regru_api import NginxProxyManagerAPI
import logging
logger = logging.getLogger()
npm = NginxProxyManagerAPI('http://10.10.10.14:81', 'admin@example.com', 'changeme', logger)
npm.login()
print(npm.get_certificates())
"
Ошибка: API NPM возвращает 401 (Unauthorized)
Решение:
- Проверьте учетные данные в конфигурации
- Убедитесь, что пароль был изменен с дефолтного
- Попробуйте войти через веб-интерфейс
Ошибка: Сертификат создан, но не обновляется в NPM
Причина: Скрипт не может найти существующий сертификат
Решение:
# Просмотрите список сертификатов в NPM
# SSL Certificates → найдите сертификат для вашего домена
# Удалите старый сертификат вручную через UI
# Запустите скрипт снова - будет создан новый
Безопасность NPM
Защита учетных данных
# Установите правильные права на конфигурацию
sudo chmod 600 /etc/letsencrypt/regru_config.json
sudo chown root:root /etc/letsencrypt/regru_config.json
Рекомендации
-
Измените пароль NPM по умолчанию
Старый пароль: changeme Новый пароль: надежный_пароль -
Используйте HTTPS для NPM (если доступно)
"npm_host": "https://10.10.10.14:443" -
Ограничьте доступ к API NPM
- Настройте firewall
- Используйте VPN для удаленного доступа
Проверка результата
В логах скрипта
sudo tail -n 50 /var/log/letsencrypt_regru.log | grep -i npm
В веб-интерфейсе NPM
- Откройте NPM:
http://10.10.10.14:81 - Войдите в систему
- Перейдите в SSL Certificates
- Проверьте наличие сертификата для вашего домена
- Проверьте дату истечения
В командной строке
# Список сертификатов в NPM через API
curl -X POST http://10.10.10.14:81/api/tokens \
-H "Content-Type: application/json" \
-d '{"identity":"admin@example.com","secret":"changeme"}' \
| jq -r '.token' > /tmp/npm_token
curl -H "Authorization: Bearer $(cat /tmp/npm_token)" \
http://10.10.10.14:81/api/nginx/certificates \
| jq '.'
Дополнительные возможности
Отключение синхронизации с NPM
Если нужно временно отключить синхронизацию:
{
"npm_enabled": false
}
Использование с несколькими доменами
Создайте отдельные конфигурационные файлы:
# Для домена 1
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/domain1_config.json
# Для домена 2
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/domain2_config.json
Автоматическая проверка и обновление сертификатов
Как это работает
Скрипт в автоматическом режиме (без флагов --obtain или --renew) выполняет интеллектуальную проверку:
1. Проверка наличия сертификата
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
Если сертификата нет:
- ✅ Создает новый сертификат через Let's Encrypt
- ✅ Выполняет DNS-валидацию через reg.ru
- ✅ Загружает сертификат в Nginx Proxy Manager (если включено)
- ✅ Перезагружает веб-сервер
2. Проверка срока действия
Если сертификат существует:
- 🔍 Проверяет сколько дней осталось до истечения
- 📅 Сравнивает с порогом обновления (по умолчанию 30 дней)
Если осталось меньше 30 дней:
- 🔄 Автоматически обновляет сертификат
- ✅ Синхронизирует с Nginx Proxy Manager
- ✅ Перезагружает веб-сервер
Если сертификат действителен (более 30 дней):
- ℹ️ Выводит информацию о сертификате
- ✅ Проверяет наличие в NPM и синхронизирует при необходимости
- ⏭️ Завершает работу (обновление не требуется)
Настройка порога обновления
В конфигурации можно изменить порог обновления:
{
"renewal_days": 30, # За сколько дней до истечения обновлять
}
Рекомендуемые значения:
30- по умолчанию (рекомендуется)14- для более консервативного подхода60- для раннего обновления
Примеры работы скрипта
Сценарий 1: Сертификата нет
$ sudo python3 letsencrypt_regru_api.py -c config.json
============================================================
АВТОМАТИЧЕСКАЯ ПРОВЕРКА И ОБНОВЛЕНИЕ СЕРТИФИКАТА
============================================================
Порог обновления: 30 дней до истечения
Сертификат не найден
============================================================
СТАТУС: Сертификат не найден
ДЕЙСТВИЕ: Создание нового сертификата
============================================================
=== Запрос нового SSL сертификата ===
...
Сертификат успешно получен!
============================================================
СИНХРОНИЗАЦИЯ С NGINX PROXY MANAGER
============================================================
✅ Сертификат успешно создан в Nginx Proxy Manager
============================================================
ОПЕРАЦИЯ ЗАВЕРШЕНА УСПЕШНО
============================================================
Сценарий 2: Сертификат истекает через 20 дней
$ sudo python3 letsencrypt_regru_api.py -c config.json
============================================================
АВТОМАТИЧЕСКАЯ ПРОВЕРКА И ОБНОВЛЕНИЕ СЕРТИФИКАТА
============================================================
Порог обновления: 30 дней до истечения
Сертификат истекает: 2025-11-16
Осталось дней: 20
============================================================
СТАТУС: Сертификат истекает через 20 дней
ДЕЙСТВИЕ: Обновление сертификата (порог: 30 дней)
============================================================
=== Обновление SSL сертификата ===
...
Проверка обновления завершена
============================================================
РЕЗУЛЬТАТ: Сертификат успешно обновлен
============================================================
✅ Сертификат успешно обновлен в Nginx Proxy Manager
Сценарий 3: Сертификат действителен (60 дней)
$ sudo python3 letsencrypt_regru_api.py -c config.json
============================================================
АВТОМАТИЧЕСКАЯ ПРОВЕРКА И ОБНОВЛЕНИЕ СЕРТИФИКАТА
============================================================
Порог обновления: 30 дней до истечения
Сертификат истекает: 2025-12-26
Осталось дней: 60
============================================================
СТАТУС: Сертификат действителен (60 дней)
ДЕЙСТВИЕ: Обновление не требуется
============================================================
Проверка синхронизации с Nginx Proxy Manager...
Сертификат найден в NPM (ID: 4)
Ежедневная автоматическая проверка
Для ежедневной проверки и автоматического обновления настройте cron:
# Редактируем crontab
sudo crontab -e
# Добавляем задачу - проверка каждый день в 3:00 утра
0 3 * * * /usr/bin/python3 /path/to/letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json >> /var/log/letsencrypt_cron.log 2>&1
Что будет происходить каждый день:
- 🕒 В 3:00 утра запускается скрипт
- 🔍 Проверяет наличие и срок действия сертификата
- 📊 Записывает результат в лог
- 🔄 Обновляет сертификат только если нужно (< 30 дней)
- ✅ Синхронизирует с NPM при обновлении
Мониторинг работы
Просмотр логов ежедневной проверки
# Последние проверки
sudo tail -n 100 /var/log/letsencrypt_cron.log
# Фильтр по статусу
sudo grep "СТАТУС:" /var/log/letsencrypt_cron.log
# Фильтр по действиям
sudo grep "ДЕЙСТВИЕ:" /var/log/letsencrypt_cron.log
# Только успешные операции
sudo grep "ОПЕРАЦИЯ ЗАВЕРШЕНА УСПЕШНО" /var/log/letsencrypt_cron.log
Проверка следующего запуска cron
# Список задач cron
sudo crontab -l
# Статус cron службы
sudo systemctl status cron
Уведомления при обновлении
Добавьте email уведомления в cron:
# В начале crontab добавьте
MAILTO=admin@example.com
# Задача с уведомлениями
0 3 * * * /usr/bin/python3 /path/to/letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json 2>&1 | mail -s "SSL Certificate Check - $(date)" admin@example.com
Автоматизация обновления
Let's Encrypt сертификаты действительны 90 дней. Рекомендуется настроить автоматическое обновление.
Использование cron (для обоих скриптов)
Для Python скрипта
# Открыть crontab
sudo crontab -e
# Добавить задачу (проверка каждый день в 3:00 AM)
0 3 * * * /usr/bin/python3 /path/to/letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json >> /var/log/letsencrypt_cron.log 2>&1
Для Bash скрипта
# Открыть crontab
sudo crontab -e
# Добавить задачу (проверка каждый день в 3:00 AM)
0 3 * * * /path/to/letsencrypt_regru_dns.sh >> /var/log/letsencrypt_cron.log 2>&1
Использование systemd timer
Создайте systemd service и timer для более гибкого управления:
Создание service файла
sudo nano /etc/systemd/system/letsencrypt-regru.service
Содержимое:
[Unit]
Description=Let's Encrypt Certificate Renewal with reg.ru DNS
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /path/to/letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Создание timer файла
sudo nano /etc/systemd/system/letsencrypt-regru.timer
Содержимое:
[Unit]
Description=Daily Let's Encrypt Certificate Check and Renewal
Requires=letsencrypt-regru.service
[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=1h
[Install]
WantedBy=timers.target
Активация timer
# Перезагрузка systemd
sudo systemctl daemon-reload
# Включение и запуск timer
sudo systemctl enable letsencrypt-regru.timer
sudo systemctl start letsencrypt-regru.timer
# Проверка статуса
sudo systemctl status letsencrypt-regru.timer
sudo systemctl list-timers
Устранение неполадок
Проблема: Ошибка аутентификации API reg.ru
Решение:
- Проверьте правильность имени пользователя и пароля
- Убедитесь, что у вашего аккаунта есть доступ к API
- Проверьте, что домен находится под управлением вашего аккаунта
# Проверка доступа к API
curl -X POST "https://api.reg.ru/api/regru2/user/get_balance" \
-d "username=YOUR_USERNAME" \
-d "password=YOUR_PASSWORD" \
-d "output_format=json"
Проблема: DNS запись не распространяется
Решение:
- Увеличьте параметр
dns_propagation_waitв конфигурации (например, до 120 секунд) - Проверьте DNS записи вручную:
nslookup -type=TXT _acme-challenge.example.com
# или
dig TXT _acme-challenge.example.com
Проблема: "Another instance of Certbot is already running"
Причина: Предыдущий процесс Certbot не завершился корректно или остались lock-файлы.
Решение:
# Вариант 1: Принудительная очистка lock-файлов (рекомендуется)
letsencrypt-regru --force-cleanup
# Вариант 2: Ручная очистка
# Проверьте запущенные процессы certbot
ps aux | grep certbot
# Остановите зависшие процессы
sudo pkill certbot
# Или принудительно
sudo pkill -9 certbot
# Удалите lock-файлы
sudo rm -f /var/lib/letsencrypt/.certbot.lock
sudo rm -f /etc/letsencrypt/.certbot.lock
# Попробуйте снова
letsencrypt-regru --obtain
Вариант 3: Подождать автоматически Скрипт автоматически:
- Обнаруживает запущенные процессы Certbot
- Ждёт их завершения (60 секунд)
- Пытается очистить lock-файлы
- Выдаёт рекомендации по решению проблемы
Проблема: Certbot не установлен
Решение:
# Ubuntu/Debian
sudo apt-get install certbot
# CentOS/RHEL
sudo yum install certbot
# Или через snap
sudo snap install --classic certbot
Проблема: Плагин certbot-dns-regru не найден
Решение:
# Установка через pip
sudo pip3 install certbot-dns-regru
# Или через pip3 с обновлением
sudo pip3 install --upgrade certbot-dns-regru
Проблема: Недостаточно прав
Решение:
- Убедитесь, что запускаете скрипт от имени root или с sudo
- Проверьте права доступа к директории
/etc/letsencrypt/
sudo chmod 755 /etc/letsencrypt/
sudo chown -R root:root /etc/letsencrypt/
Проблема: Ошибка при перезагрузке веб-сервера
Решение:
- Проверьте, какой веб-сервер используется:
systemctl status nginx
systemctl status apache2
- Вручную перезагрузите веб-сервер:
# Для Nginx
sudo systemctl reload nginx
# Для Apache
sudo systemctl reload apache2
Просмотр подробных логов certbot
# Логи certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log
# Логи скрипта
sudo tail -f /var/log/letsencrypt_regru.log
Тестовый режим (staging)
Для тестирования используйте staging окружение Let's Encrypt:
# Добавьте опцию --staging к команде certbot
certbot certonly --staging --dns-regru ...
Проверка полученного сертификата
Просмотр информации о сертификате
# Просмотр всех сертификатов
sudo certbot certificates
# Просмотр конкретного сертификата
sudo openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout
# Проверка даты истечения
sudo openssl x509 -enddate -noout -in /etc/letsencrypt/live/example.com/cert.pem
Проверка сертификата в браузере
- Откройте ваш сайт в браузере:
https://example.com - Нажмите на иконку замка в адресной строке
- Проверьте информацию о сертификате
- Убедитесь, что сертификат выдан Let's Encrypt и покрывает wildcard домен
Онлайн проверка SSL
Использование сертификата в Nginx Proxy Manager
После получения сертификата вы можете использовать его в Nginx Proxy Manager:
Вариант 1: Импорт существующего сертификата
- Войдите в Nginx Proxy Manager: http://10.10.10.14:81/
- Перейдите в SSL Certificates → Add SSL Certificate
- Выберите Custom
- Вставьте содержимое файлов:
- Certificate Key:
/etc/letsencrypt/live/dfv24.com/privkey.pem - Certificate:
/etc/letsencrypt/live/dfv24.com/fullchain.pem
- Certificate Key:
- Сохраните сертификат
Вариант 2: Прямая настройка Nginx
Если вы используете Nginx напрямую, добавьте в конфигурацию:
server {
listen 443 ssl http2;
server_name dfv24.com *.dfv24.com;
ssl_certificate /etc/letsencrypt/live/dfv24.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dfv24.com/privkey.pem;
# Дополнительные SSL настройки
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# ... остальная конфигурация
}
📚 Полное описание всех команд
Команда --check
Назначение: Проверяет срок действия текущего SSL сертификата.
Что делает:
- Проверяет наличие сертификата в
/etc/letsencrypt/live/[домен]/ - Читает дату истечения из
cert.pem - Показывает сколько дней осталось до истечения
- Рекомендует обновление если осталось < 30 дней
Пример использования:
letsencrypt-regru --check
# Выход: "Certificate expires in 45 days" или "Certificate needs renewal (15 days left)"
Команда --obtain
Назначение: Получает новый SSL сертификат от Let's Encrypt.
Что делает:
- Проверяет доступ к API reg.ru
- Запускает certbot с DNS-01 challenge
- Автоматически создает TXT запись
_acme-challengeчерез API reg.ru - Ожидает распространения DNS (60 секунд)
- Let's Encrypt проверяет DNS запись
- Получает сертификат и сохраняет в
/etc/letsencrypt/live/ - Автоматически удаляет временную TXT запись
- (Опционально) Загружает сертификат в Nginx Proxy Manager
Пример использования:
letsencrypt-regru --obtain
letsencrypt-regru --obtain -v # с подробным выводом
Поддержка wildcard:
- Для
*.example.comсоздается одна TXT запись для основного домена - Сертификат покрывает все поддомены
Команда --renew
Назначение: Обновляет существующий SSL сертификат.
Что делает:
- Проверяет наличие существующего сертификата
- Использует
certbot renewдля обновления - Автоматически создает новые TXT записи через API
- Получает обновленный сертификат
- (Опционально) Обновляет сертификат в Nginx Proxy Manager
Пример использования:
letsencrypt-regru --renew
Когда использовать:
- Сертификат скоро истекает (< 30 дней)
- Автоматически запускается systemd timer
Команда --auto
Назначение: Автоматическая проверка и обновление при необходимости.
Что делает:
- Запускает
--checkдля проверки срока действия - Если осталось < 30 дней - запускает
--renew - Если сертификата нет - запускает
--obtain - Логирует все действия
Пример использования:
letsencrypt-regru --auto
Идеально для:
- Запуска через cron или systemd timer
- Полностью автоматического управления сертификатами
Команда --staging
Назначение: Получает тестовый сертификат из staging окружения Let's Encrypt.
Что делает:
- Запускает полный процесс получения сертификата Let's Encrypt
- Использует staging CA (Certificate Authority) вместо production
- Создает TXT запись через API reg.ru (как и в production)
- Ожидает распространения DNS (60 секунд)
- Let's Encrypt staging проверяет DNS запись
- Получает сертификат от staging CA
- НЕ загружает сертификат в Nginx Proxy Manager
Пример использования:
letsencrypt-regru --staging
letsencrypt-regru --staging -v # с подробным выводом
Преимущества:
- ✅ НЕТ ЛИМИТОВ - неограниченное количество запросов (в отличие от production)
- ✅ Полная идентичность - процесс на 100% идентичен production
- ✅ Реальный DNS - тестирует весь процесс DNS-валидации
- ✅ Безопасное тестирование - не расходует лимиты production (5/неделя)
- ✅ Быстрая отладка - можно запускать сколько угодно раз
⚠️ Ограничения:
- Браузеры не доверяют staging CA (покажут предупреждение)
- Сертификат нельзя использовать на production сайтах
- Подходит только для тестирования автоматизации
Когда использовать:
- ✅ Первая настройка системы
- ✅ Тестирование DNS интеграции
- ✅ Отладка автоматизации
- ✅ Проверка работы hooks
- ✅ Разработка и staging окружения
Переход на production: После успешного тестирования просто запустите:
sudo letsencrypt-regru --obtain
Staging сертификат будет заменен на production.
Команда --test-cert
Назначение: Создает тестовый самоподписанный сертификат.
Что делает:
- Генерирует приватный ключ RSA 2048 бит
- Создает самоподписанный сертификат на 365 дней
- Сохраняет в
/etc/letsencrypt/live/[домен]/ - (Опционально) Загружает в Nginx Proxy Manager
Пример использования:
letsencrypt-regru --test-cert
Преимущества:
- ✅ Не требует интернет соединения
- ✅ Мгновенное создание (1-2 секунды)
- ✅ Не требует API reg.ru
- ✅ Не требует DNS
- ✅ Идеально для локальной разработки
⚠️ Внимание:
- Браузеры покажут предупреждение "сертификат не доверенный"
- Не тестирует DNS и автоматизацию
- Не использовать в production!
Сравнение: --staging vs --test-cert
| Параметр | --staging | --test-cert |
|---|---|---|
| Интернет | ✅ Требуется | ❌ Не требуется |
| API reg.ru | ✅ Требуется | ❌ Не требуется |
| DNS проверка | ✅ Полная | ❌ Нет |
| Лимиты | ✅ Нет | ✅ Нет |
| Время создания | ~2-3 минуты | ~1-2 секунды |
| Тестирует автоматизацию | ✅ Да | ❌ Нет |
| Использование | Тест перед production | Локальная разработка |
Команда --test-api
Назначение: Проверяет доступ к API reg.ru.
Что делает:
- Определяет текущий публичный IP адрес (через ipinfo.io)
- Выполняет тестовый запрос к API reg.ru
- Показывает баланс аккаунта
- Проверяет авторизацию
Пример использования:
letsencrypt-regru --test-api
# Вывод:
# ✓ Ваш текущий IP: 178.218.115.80
# ✓ API reg.ru доступен
# ✓ Баланс аккаунта: 1234.56 руб.
Используйте когда:
- Первая настройка (проверка учетных данных)
- Ошибки "Access to API from this IP denied"
- Нужно узнать текущий IP для whitelist
Команда --test-dns
Назначение: Полная симуляция процесса SSL сертификации с тестовой DNS записью.
Что делает:
- Шаг 1: Проверяет доступ к API reg.ru (
--test-api) - Шаг 2: Создает временную TXT запись
_acme-challenge.[домен]со случайным значением - Шаг 3: Ожидает распространения DNS (60 секунд с прогресс-баром)
- Шаг 4: Проверяет DNS запись через публичные DNS серверы (8.8.8.8, 1.1.1.1)
- Шаг 5: Автоматически удаляет тестовую запись
Пример использования:
letsencrypt-regru --test-dns
# Вывод:
# ✓ API reg.ru доступен
# ✓ TXT запись создана: _acme-challenge.example.com
# ⏳ Ожидание распространения DNS: [===> ] 30/60 секунд
# ✓ DNS запись обнаружена через Google DNS
# ✓ DNS запись обнаружена через Cloudflare DNS
# ✓ Тестовая запись удалена
Используйте для:
- Проверки что API reg.ru работает корректно
- Проверки что DNS записи распространяются
- Тестирования перед реальным получением сертификата
- Диагностики проблем с DNS
Преимущества:
- Не влияет на лимиты Let's Encrypt
- Безопасное тестирование (создает временную запись)
- Показывает весь процесс пошагово
Команда --auth-hook (служебная)
Назначение: Используется certbot для создания DNS записи во время валидации.
Что делает:
- Читает переменные окружения certbot (
CERTBOT_DOMAIN,CERTBOT_VALIDATION) - Создает TXT запись
_acme-challenge.[домен]через API reg.ru - Ожидает распространения DNS (60 секунд)
- Возвращает управление certbot
Используется автоматически: Certbot вызывает этот hook при запуске --obtain или --renew
Команда --cleanup-hook (служебная)
Назначение: Используется certbot для удаления DNS записи после валидации.
Что делает:
- Читает переменные окружения certbot
- Удаляет TXT запись
_acme-challenge.[домен]через API reg.ru - Очищает временные данные
Используется автоматически: Certbot вызывает этот hook после завершения валидации
Команда --help
Назначение: Показывает справку по всем доступным командам.
Пример использования:
letsencrypt-regru --help
Флаг -v (verbose)
Назначение: Включает подробный вывод для диагностики.
Что показывает:
- Все HTTP запросы к API reg.ru
- Ответы API (JSON)
- Шаги выполнения certbot
- Детали проверки DNS
- Подробные ошибки
Пример использования:
letsencrypt-regru --obtain -v
letsencrypt-regru --test-dns -v
letsencrypt-regru --check -v
Дополнительная документация
- 📘 TESTING_GUIDE.md - Полное руководство по созданию и использованию тестовых сертификатов
- 🔄 GITEA_SYNC.md - Настройка автоматической синхронизации Gitea → GitHub
- 📘 CHEATSHEET.md - Быстрая шпаргалка по командам
- <EFBFBD> API_TROUBLESHOOTING.md - Устранение проблем с API reg.ru
- <EFBFBD>🚀 BUILD_GUIDE.md - Сборка исполняемых файлов с PyInstaller
- 📦 INSTALL_GUIDE.md - Подробное руководство по установке
- 🛠️ MAKEFILE_COMMANDS.md - Все команды Makefile
- 🏗️ PROJECT_STRUCTURE.md - Структура проекта
- 📝 config.json.example - Пример конфигурации
Поддержка и вопросы
При возникновении проблем:
-
Проверьте логи:
journalctl -u letsencrypt-regru -f tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log -
Используйте команды диагностики:
letsencrypt-regru --test-api # Проверка API letsencrypt-regru --test-dns # Проверка DNS letsencrypt-regru --check -v # Проверка сертификата -
Проверьте документацию:
- API_TROUBLESHOOTING.md - Решение проблем с API
- TESTING_GUIDE.md - Руководство по тестированию
- Документация reg.ru API: https://www.reg.ru/support/api
- Документация Let's Encrypt: https://letsencrypt.org/docs/
Заключение
Оба скрипта предоставляют надежное решение для автоматического управления SSL сертификатами Let's Encrypt с использованием DNS-валидации через API reg.ru.
Рекомендации:
- Используйте Python скрипт для более гибкой настройки и интеграции
- Используйте Bash скрипт для простоты и минимальных зависимостей
- Используйте тестовые сертификаты для разработки (без лимитов Let's Encrypt)
- Настройте автоматическое обновление через cron или systemd timer
- Регулярно проверяйте логи и статус сертификатов
- Храните учетные данные в безопасности (chmod 600)
Быстрый старт для тестирования:
sudo make install # Установка
sudo make test-cert # Создать тестовый сертификат
sudo make obtain # Получить production сертификат
Успешной автоматизации! 🔒
🔄 Синхронизация Gitea → GitHub
Проект поддерживает автоматическую синхронизацию из Gitea в GitHub.
Быстрая настройка
Метод 1: Git Hook (мгновенно)
# На сервере Gitea скопируйте hook
cp gitea-hooks/post-receive /path/to/repo.git/hooks/
chmod +x /path/to/repo.git/hooks/post-receive
Метод 2: GitHub Actions (каждый час)
- Workflow уже настроен в
.github/workflows/sync-from-gitea.yml - Добавьте секреты
GITEA_URLиGITEA_TOKENв GitHub
Подробная документация: См. GITEA_SYNC.md