Files
configure_nginx_manager/README.md

50 KiB
Raw Blame History

Руководство по использованию скриптов для управления SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru 12344444

🆕 Новое в версии 2.0

Автоматическая интеграция с Nginx Proxy Manager!

Python скрипт теперь автоматически загружает созданные сертификаты в Nginx Proxy Manager.

  • Автоматическая загрузка сертификатов в NPM
  • Автоматическое обновление существующих сертификатов
  • Полная интеграция через API NPM
  • Поддержка wildcard сертификатов

Содержание

  1. Введение
  2. Быстрый старт
  3. Установка через Makefile
  4. Создание тестовых сертификатов
  5. Требования
  6. Установка зависимостей
  7. Настройка
  8. Использование Bash скрипта
  9. Использование Python скрипта
  10. Интеграция с Nginx Proxy Manager
  11. Автоматическая проверка и обновление сертификатов
  12. Автоматизация обновления
  13. Устранение неполадок

Введение

В проекте представлены два скрипта для автоматического создания и обновления SSL сертификатов Let's Encrypt с использованием DNS-валидации через API reg.ru:

  1. letsencrypt_regru_dns.sh - Bash скрипт с использованием плагина certbot-dns-regru
  2. letsencrypt_regru_api.py - Python скрипт с прямым взаимодействием с API reg.ru и интеграцией с NPM

Оба скрипта поддерживают:

  • Создание wildcard сертификатов (*.domain.com)
  • Автоматическое обновление сертификатов
  • DNS-валидацию через API reg.ru
  • Логирование всех операций
  • Перезагрузку веб-сервера после обновления

Дополнительно Python скрипт поддерживает:

  • Автоматическую загрузку в Nginx Proxy Manager
  • Автоматическое обновление сертификатов в NPM
  • API интеграцию с NPM

🚀 Установка через 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

  1. Создает директории

    • /opt/letsencrypt-regru/ - директория установки
    • /var/log/letsencrypt/ - директория логов
  2. Устанавливает зависимости

    pip3 install certbot requests cryptography
    
  3. Копирует скрипт

    • Копирует letsencrypt_regru_api.py в /opt/letsencrypt-regru/
    • Устанавливает права на выполнение
  4. Создает конфигурацию

    • Создает /etc/letsencrypt/regru_config.json (если не существует)
    • Устанавливает права 600 для безопасности
  5. Настраивает systemd

    • Создает letsencrypt-regru.service - разовый запуск
    • Создает letsencrypt-regru.timer - таймер для ежедневного запуска
    • Включает и запускает таймер
  6. Настраивает 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

  1. Останавливает и удаляет службы

    • Останавливает systemd timer и service
    • Удаляет файлы служб из /etc/systemd/system/
    • Перезагружает конфигурацию systemd
  2. Удаляет cron-задание

    • Удаляет запись из crontab
  3. Удаляет файлы (с подтверждением)

    • Удаляет /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

Команда автоматически:

  1. Генерирует RSA ключ 2048 бит
  2. Создает самоподписанный сертификат на 90 дней
  3. Поддерживает wildcard домены (если настроено)
  4. Создает все необходимые файлы (privkey.pem, cert.pem, fullchain.pem, chain.pem)
  5. Опционально загружает в 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

  1. Войдите в личный кабинет на сайте reg.ru
  2. Перейдите в раздел "Управление API"
  3. Используйте ваше имя пользователя и пароль для доступа к API
  4. Убедитесь, что у вас есть права на управление 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": "dfv24.com",
    "wildcard": true,
    "email": "admin@dfv24.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="dfv24.com"
WILDCARD_DOMAIN="*.dfv24.com"
EMAIL="admin@dfv24.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

Скрипт автоматически:

  1. Проверит зависимости
  2. Создаст файл с учетными данными
  3. Установит плагин certbot-dns-regru (если не установлен)
  4. Проверит наличие существующего сертификата
  5. Получит новый сертификат или обновит существующий
  6. Перезагрузит веб-сервер

Просмотр логов

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           Подробный вывод

🚀 Быстрый старт

За 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": "dfv24.com",
    "wildcard": true,
    "email": "admin@dfv24.com",
    
    "npm_enabled": true,
    "npm_host": "http://192.168.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

Ваш сертификат *.dfv24.com готов к использованию! 🎉

Что произошло:

  1. Создан wildcard сертификат через Let's Encrypt
  2. Выполнена DNS-валидация через API reg.ru
  3. Сертификат автоматически загружен в Nginx Proxy Manager
  4. Веб-сервер перезагружен

Интеграция с 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://192.168.10.14:81
npm_email Email для входа в NPM admin@example.com
npm_password Пароль администратора NPM changeme

2. Получение учетных данных NPM

  1. Войдите в Nginx Proxy Manager: http://192.168.10.14:81
  2. Используйте email и пароль администратора
  3. По умолчанию:
    • Email: admin@example.com
    • Password: changeme
  4. ВАЖНО: Измените пароль по умолчанию!

Использование

Автоматическая синхронизация

После создания или обновления сертификата скрипт автоматически:

  1. Авторизуется в Nginx Proxy Manager
  2. Проверит, существует ли сертификат для домена
  3. Создаст новый сертификат или обновит существующий
  4. Загрузит файлы сертификата в 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://192.168.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("dfv24.com")

# Синхронизация сертификата
npm_api.sync_certificate("dfv24.com", "/etc/letsencrypt/live/dfv24.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 - Загрузка сертификата для dfv24.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://192.168.10.14:81/api/

# Проверьте учетные данные
# Войдите в NPM через браузер с теми же учетными данными

Ошибка: Сертификат не загружен в NPM

Причины:

  • Файлы сертификата не найдены
  • Неправильный формат сертификата
  • Проблемы с API NPM

Решение:

# Проверьте наличие файлов сертификата
ls -la /etc/letsencrypt/live/dfv24.com/

# Проверьте права доступа
sudo chmod 644 /etc/letsencrypt/live/dfv24.com/*.pem

# Попробуйте вручную
sudo python3 -c "
from letsencrypt_regru_api import NginxProxyManagerAPI
import logging
logger = logging.getLogger()
npm = NginxProxyManagerAPI('http://192.168.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

Рекомендации

  1. Измените пароль NPM по умолчанию

    Старый пароль: changeme
    Новый пароль: надежный_пароль
    
  2. Используйте HTTPS для NPM (если доступно)

    "npm_host": "https://192.168.10.14:443"
    
  3. Ограничьте доступ к API NPM

    • Настройте firewall
    • Используйте VPN для удаленного доступа

Проверка результата

В логах скрипта

sudo tail -n 50 /var/log/letsencrypt_regru.log | grep -i npm

В веб-интерфейсе NPM

  1. Откройте NPM: http://192.168.10.14:81
  2. Войдите в систему
  3. Перейдите в SSL Certificates
  4. Проверьте наличие сертификата для вашего домена
  5. Проверьте дату истечения

В командной строке

# Список сертификатов в NPM через API
curl -X POST http://192.168.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://192.168.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

Что будет происходить каждый день:

  1. 🕒 В 3:00 утра запускается скрипт
  2. 🔍 Проверяет наличие и срок действия сертификата
  3. 📊 Записывает результат в лог
  4. 🔄 Обновляет сертификат только если нужно (< 30 дней)
  5. Синхронизирует с 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@dfv24.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@dfv24.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.dfv24.com
# или
dig TXT _acme-challenge.dfv24.com

Проблема: 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/dfv24.com/cert.pem -text -noout

# Проверка даты истечения
sudo openssl x509 -enddate -noout -in /etc/letsencrypt/live/dfv24.com/cert.pem

Проверка сертификата в браузере

  1. Откройте ваш сайт в браузере: https://dfv24.com
  2. Нажмите на иконку замка в адресной строке
  3. Проверьте информацию о сертификате
  4. Убедитесь, что сертификат выдан Let's Encrypt и покрывает wildcard домен

Онлайн проверка SSL


Использование сертификата в Nginx Proxy Manager

После получения сертификата вы можете использовать его в Nginx Proxy Manager:

Вариант 1: Импорт существующего сертификата

  1. Войдите в Nginx Proxy Manager: http://192.168.10.14:81/
  2. Перейдите в SSL CertificatesAdd SSL Certificate
  3. Выберите Custom
  4. Вставьте содержимое файлов:
    • Certificate Key: /etc/letsencrypt/live/dfv24.com/privkey.pem
    • Certificate: /etc/letsencrypt/live/dfv24.com/fullchain.pem
  5. Сохраните сертификат

Вариант 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;
    
    # ... остальная конфигурация
}

Дополнительная документация

  • 📘 TESTING_GUIDE.md - Полное руководство по созданию и использованию тестовых сертификатов
  • <EFBFBD> GITEA_SYNC.md - Настройка автоматической синхронизации Gitea → GitHub
  • 📘 CHEATSHEET.md - Быстрая шпаргалка по командам
  • <EFBFBD>🚀 Makefile - Автоматизация установки и управления
  • 📝 config.json.example - Пример конфигурации

Поддержка и вопросы

При возникновении проблем:

  1. Проверьте логи: /var/log/letsencrypt_regru.log
  2. Проверьте логи certbot: /var/log/letsencrypt/letsencrypt.log
  3. Используйте подробный режим: -v для Python скрипта
  4. Проверьте документацию reg.ru API: https://www.reg.ru/support/api
  5. Проверьте документацию Let's Encrypt: https://letsencrypt.org/docs/
  6. Для тестирования: См. TESTING_GUIDE.md

Заключение

Оба скрипта предоставляют надежное решение для автоматического управления 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