Добавлены новые документы и скрипты для автоматизации создания и управления SSL сертификатами Let's Encrypt с использованием API reg.ru и Nginx Proxy Manager. Обновлены инструкции по тестированию, настройке и использованию сертификатов, включая создание тестовых сертификатов и интеграцию с NPM. Включены примеры использования и устранения неполадок, а также улучшена структура проекта.
This commit is contained in:
904
README.md
904
README.md
@@ -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 сертификат
|
||||
```
|
||||
|
||||
Успешной автоматизации! 🔒
|
||||
|
||||
|
||||
Reference in New Issue
Block a user