Добавлены новые документы и скрипты для автоматизации создания и управления SSL сертификатами Let's Encrypt с использованием API reg.ru и Nginx Proxy Manager. Обновлены инструкции по тестированию, настройке и использованию сертификатов, включая создание тестовых сертификатов и интеграцию с NPM. Включены примеры использования и устранения неполадок, а также улучшена структура проекта.

This commit is contained in:
Dmitriy Fofanov
2025-10-27 21:47:55 +03:00
parent 07a65ffbba
commit 95dde0c073
14 changed files with 3117 additions and 18 deletions

904
README.md
View File

@@ -1,14 +1,32 @@
# Руководство по использованию скриптов для управления SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru
## 🆕 Новое в версии 2.0
**Автоматическая интеграция с Nginx Proxy Manager!**
Python скрипт теперь автоматически загружает созданные сертификаты в Nginx Proxy Manager.
- ✅ Автоматическая загрузка сертификатов в NPM
- ✅ Автоматическое обновление существующих сертификатов
- ✅ Полная интеграция через API NPM
- ✅ Поддержка wildcard сертификатов
---
## Содержание
1. [Введение](#введение)
2. [Требования](#требования)
3. [Установка зависимостей](#установка-зависимостей)
4. [Настройка](#настройка)
5. [Использование Bash скрипта](#использование-bash-скрипта)
6. [Использование Python скрипта](#использование-python-скрипта)
7. [Автоматизация обновления](#автоматизация-обновления)
8. [Устранение неполадок](#устранение-неполадок)
2. [Быстрый старт](#-быстрый-старт)
3. [Установка через Makefile](#-установка-через-makefile)
4. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
5. [Требования](#требования)
6. [Установка зависимостей](#установка-зависимостей)
7. [Настройка](#настройка)
8. [Использование Bash скрипта](#использование-bash-скрипта)
9. [Использование Python скрипта](#использование-python-скрипта)
10. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
11. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
12. [Автоматизация обновления](#автоматизация-обновления)
13. [Устранение неполадок](#устранение-неполадок)
---
@@ -17,7 +35,7 @@
В проекте представлены два скрипта для автоматического создания и обновления 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
2. **letsencrypt_regru_api.py** - Python скрипт с прямым взаимодействием с API reg.ru и интеграцией с NPM
Оба скрипта поддерживают:
- Создание wildcard сертификатов (*.domain.com)
@@ -26,6 +44,333 @@
- Логирование всех операций
- Перезагрузку веб-сервера после обновления
**Дополнительно Python скрипт поддерживает:**
- ✨ Автоматическую загрузку в Nginx Proxy Manager
- ✨ Автоматическое обновление сертификатов в NPM
- ✨ API интеграцию с NPM
---
## 🚀 Установка через Makefile
**Самый быстрый способ установки на Linux!**
Makefile автоматизирует весь процесс установки, настройки systemd-сервисов и cron-заданий.
### Быстрая установка
```bash
# 1. Установка (требует root)
sudo make install
# 2. Редактирование конфигурации
sudo nano /etc/letsencrypt/regru_config.json
# 3. Проверка конфигурации
sudo make check-config
# 4. Тестовый запуск
sudo make test-run
```
### Доступные команды Makefile
#### Основные команды
```bash
# Установка всего: создание директорий, копирование скрипта, настройка systemd и cron
sudo make install
# Полное удаление: удаление службы, cron-задания, файлов
sudo make uninstall
# Показать статус установки, systemd и cron
sudo make status
# Справка по всем командам
make help
```
#### Утилиты
```bash
# Проверка 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. **Устанавливает зависимости**
```bash
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/`
- Опционально удаляет конфигурацию и логи
### Пример: Полная установка от А до Я
```bash
# 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 таймер (ежедневно)
```
### Проверка работы автоматизации
```bash
# Статус 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
```
### Удаление
```bash
# Полное удаление
sudo make uninstall
# Система спросит подтверждение перед удалением конфигурации и логов
```
### 🧪 Создание тестового самоподписанного сертификата
**Идеально для тестирования без ограничений Let's Encrypt!**
Let's Encrypt имеет ограничения на количество сертификатов (5 в неделю на домен). Для тестирования и разработки можно использовать самоподписанные сертификаты.
#### Преимущества тестовых сертификатов
✅ **Нет ограничений** - создавайте сколько угодно сертификатов
✅ **Мгновенное создание** - без DNS-валидации и ожидания
✅ **Тестирование NPM** - проверка интеграции с Nginx Proxy Manager
✅ **Офлайн работа** - не требуется интернет и API reg.ru
✅ **Идентичная структура** - те же файлы, что и Let's Encrypt
⚠️ **Ограничения**: Браузеры не доверяют самоподписанным сертификатам
#### Быстрое создание
```bash
# Создать тестовый сертификат
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 скрипта напрямую
```bash
# Создать тестовый сертификат с подробным выводом
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:
```json
{
"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 сертификат:
```bash
# 1. Удалить тестовый сертификат
sudo rm -rf /etc/letsencrypt/live/example.com/
# 2. Получить настоящий сертификат
sudo make obtain
# Или автоматически
sudo make run
```
---
## Требования
@@ -240,6 +585,531 @@ sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
---
## 🚀 Быстрый старт
### За 3 простых шага получите SSL сертификат в Nginx Proxy Manager!
#### Шаг 1: Создайте конфигурацию
```bash
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json
```
#### Шаг 2: Отредактируйте параметры
```bash
sudo nano /etc/letsencrypt/regru_config.json
```
Заполните:
```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: Получите сертификат
```bash
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
```bash
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain
```
**Скрипт выполнит:**
- ✅ Создание сертификата через Let's Encrypt
- ✅ DNS-валидация через reg.ru API
- ✅ Автоматическая загрузка в NPM
- ✅ Перезагрузка веб-сервера
#### Обновление существующего сертификата
```bash
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --renew
```
**Скрипт выполнит:**
- ✅ Обновление сертификата через certbot
- ✅ Автоматическое обновление в NPM
- ✅ Перезагрузка веб-сервера
#### Автоматический режим
```bash
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
```
Скрипт автоматически определит:
- Нужно ли создать новый сертификат
- Требуется ли обновление (если осталось < 30 дней)
- Выполнит синхронизацию с NPM
### Работа с API Nginx Proxy Manager
#### Класс NginxProxyManagerAPI
Скрипт использует класс `NginxProxyManagerAPI` для работы с NPM:
```python
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 | Обновление сертификата |
### Логи и отладка
#### Просмотр логов
```bash
# Основной лог скрипта
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 недоступен по указанному адресу
- Сетевые проблемы
**Решение:**
```bash
# Проверьте доступность NPM
curl http://192.168.10.14:81/api/
# Проверьте учетные данные
# Войдите в NPM через браузер с теми же учетными данными
```
#### Ошибка: Сертификат не загружен в NPM
**Причины:**
- Файлы сертификата не найдены
- Неправильный формат сертификата
- Проблемы с API NPM
**Решение:**
```bash
# Проверьте наличие файлов сертификата
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
**Причина:** Скрипт не может найти существующий сертификат
**Решение:**
```bash
# Просмотрите список сертификатов в NPM
# SSL Certificates → найдите сертификат для вашего домена
# Удалите старый сертификат вручную через UI
# Запустите скрипт снова - будет создан новый
```
### Безопасность NPM
#### Защита учетных данных
```bash
# Установите правильные права на конфигурацию
sudo chmod 600 /etc/letsencrypt/regru_config.json
sudo chown root:root /etc/letsencrypt/regru_config.json
```
#### Рекомендации
1. **Измените пароль NPM по умолчанию**
```
Старый пароль: changeme
Новый пароль: надежный_пароль
```
2. **Используйте HTTPS для NPM** (если доступно)
```json
"npm_host": "https://192.168.10.14:443"
```
3. **Ограничьте доступ к API NPM**
- Настройте firewall
- Используйте VPN для удаленного доступа
### Проверка результата
#### В логах скрипта
```bash
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. Проверьте дату истечения
#### В командной строке
```bash
# Список сертификатов в 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
Если нужно временно отключить синхронизацию:
```json
{
"npm_enabled": false
}
```
#### Использование с несколькими доменами
Создайте отдельные конфигурационные файлы:
```bash
# Для домена 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. Проверка наличия сертификата
```bash
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 и синхронизирует при необходимости
- ⏭️ Завершает работу (обновление не требуется)
### Настройка порога обновления
В конфигурации можно изменить порог обновления:
```json
{
"renewal_days": 30, # За сколько дней до истечения обновлять
}
```
**Рекомендуемые значения:**
- `30` - по умолчанию (рекомендуется)
- `14` - для более консервативного подхода
- `60` - для раннего обновления
### Примеры работы скрипта
#### Сценарий 1: Сертификата нет
```bash
$ sudo python3 letsencrypt_regru_api.py -c config.json
============================================================
АВТОМАТИЧЕСКАЯ ПРОВЕРКА И ОБНОВЛЕНИЕ СЕРТИФИКАТА
============================================================
Порог обновления: 30 дней до истечения
Сертификат не найден
============================================================
СТАТУС: Сертификат не найден
ДЕЙСТВИЕ: Создание нового сертификата
============================================================
=== Запрос нового SSL сертификата ===
...
Сертификат успешно получен!
============================================================
СИНХРОНИЗАЦИЯ С NGINX PROXY MANAGER
============================================================
✅ Сертификат успешно создан в Nginx Proxy Manager
============================================================
ОПЕРАЦИЯ ЗАВЕРШЕНА УСПЕШНО
============================================================
```
#### Сценарий 2: Сертификат истекает через 20 дней
```bash
$ sudo python3 letsencrypt_regru_api.py -c config.json
============================================================
АВТОМАТИЧЕСКАЯ ПРОВЕРКА И ОБНОВЛЕНИЕ СЕРТИФИКАТА
============================================================
Порог обновления: 30 дней до истечения
Сертификат истекает: 2025-11-16
Осталось дней: 20
============================================================
СТАТУС: Сертификат истекает через 20 дней
ДЕЙСТВИЕ: Обновление сертификата (порог: 30 дней)
============================================================
=== Обновление SSL сертификата ===
...
Проверка обновления завершена
============================================================
РЕЗУЛЬТАТ: Сертификат успешно обновлен
============================================================
✅ Сертификат успешно обновлен в Nginx Proxy Manager
```
#### Сценарий 3: Сертификат действителен (60 дней)
```bash
$ sudo python3 letsencrypt_regru_api.py -c config.json
============================================================
АВТОМАТИЧЕСКАЯ ПРОВЕРКА И ОБНОВЛЕНИЕ СЕРТИФИКАТА
============================================================
Порог обновления: 30 дней до истечения
Сертификат истекает: 2025-12-26
Осталось дней: 60
============================================================
СТАТУС: Сертификат действителен (60 дней)
ДЕЙСТВИЕ: Обновление не требуется
============================================================
Проверка синхронизации с Nginx Proxy Manager...
Сертификат найден в NPM (ID: 4)
```
### Ежедневная автоматическая проверка
Для ежедневной проверки и автоматического обновления настройте cron:
```bash
# Редактируем 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 при обновлении
### Мониторинг работы
#### Просмотр логов ежедневной проверки
```bash
# Последние проверки
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
```bash
# Список задач cron
sudo crontab -l
# Статус cron службы
sudo systemctl status cron
```
### Уведомления при обновлении
Добавьте email уведомления в cron:
```bash
# В начале 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 дней. Рекомендуется настроить автоматическое обновление.
@@ -506,6 +1376,14 @@ server {
---
## Дополнительная документация
- 📘 **[TESTING_GUIDE.md](TESTING_GUIDE.md)** - Полное руководство по созданию и использованию тестовых сертификатов
- 🚀 **[Makefile](Makefile)** - Автоматизация установки и управления
- 📝 **[config.json.example](config.json.example)** - Пример конфигурации
---
## Поддержка и вопросы
При возникновении проблем:
@@ -515,6 +1393,7 @@ server {
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](TESTING_GUIDE.md)
---
@@ -525,8 +1404,17 @@ server {
**Рекомендации:**
- Используйте Python скрипт для более гибкой настройки и интеграции
- Используйте Bash скрипт для простоты и минимальных зависимостей
- **Используйте тестовые сертификаты для разработки** (без лимитов Let's Encrypt)
- Настройте автоматическое обновление через cron или systemd timer
- Регулярно проверяйте логи и статус сертификатов
- Храните учетные данные в безопасности (chmod 600)
**Быстрый старт для тестирования:**
```bash
sudo make install # Установка
sudo make test-cert # Создать тестовый сертификат
sudo make obtain # Получить production сертификат
```
Успешной автоматизации! 🔒