# Руководство по использованию скриптов для управления SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru
## 🆕 Новое в версии 2.0
**Автоматическая интеграция с Nginx Proxy Manager!**
Python скрипт теперь автоматически загружает созданные сертификаты в Nginx Proxy Manager.
- ✅ Автоматическая загрузка сертификатов в NPM
- ✅ Автоматическое обновление существующих сертификатов
- ✅ Полная интеграция через API NPM
- ✅ Поддержка wildcard сертификатов
---
## Содержание
1. [Введение](#введение)
2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush)
3. [🔨 Сборка исполняемых файлов](#-сборка-исполняемых-файлов)
4. [Быстрый старт](#-быстрый-старт)
5. [Установка через Makefile](#-установка-через-makefile)
6. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
7. [Требования](#требования)
8. [Установка зависимостей](#установка-зависимостей)
9. [Настройка](#настройка)
10. [Использование Bash скрипта](#использование-bash-скрипта)
11. [Использование Python скрипта](#использование-python-скрипта)
12. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
13. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
14. [Автоматизация обновления](#автоматизация-обновления)
15. [Устранение неполадок](#устранение-неполадок)
---
## Введение
В проекте представлены два скрипта для автоматического создания и обновления 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
---
## ⚡ Быстрая установка (letsencrypt_regru.sh)
**Автоматическая установка всего приложения одной командой!**
Скрипт `letsencrypt_regru.sh` автоматизирует весь процесс развертывания:
- ✅ Установка всех зависимостей (Python, certbot, библиотеки)
- ✅ Создание виртуального окружения Python
- ✅ Интерактивная настройка конфигурации
- ✅ Настройка systemd для автоматического обновления
- ✅ Создание удобных команд
### Установка
**Вариант 1: Автоматическая установка одной командой**
```bash
# Метод 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: Клонирование репозитория**
```bash
# 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`:
#### 🔧 Основные команды
```bash
# Проверить срок действия сертификата
letsencrypt-regru --check
# Получить новый сертификат Let's Encrypt
letsencrypt-regru --obtain
# Обновить существующий сертификат
letsencrypt-regru --renew
# Создать тестовый самоподписанный сертификат
letsencrypt-regru --test-cert
# Автоматическая проверка и обновление при необходимости
letsencrypt-regru --auto
```
#### 🧪 Команды диагностики и тестирования
```bash
# Получить тестовый сертификат 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
```bash
# Загрузить существующий сертификат в 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` нужна для ручной загрузки существующих сертификатов.
#### ⚙️ Служебные команды (внутреннее использование)
```bash
# Certbot authentication hook (используется certbot)
letsencrypt-regru --auth-hook
# Certbot cleanup hook (используется certbot)
letsencrypt-regru --cleanup-hook
```
### Автоматическое обновление
Скрипт установки настраивает автоматическую проверку сертификатов каждые 12 часов:
```bash
# Проверить статус автообновления
systemctl status letsencrypt-regru.timer
# Посмотреть логи
journalctl -u letsencrypt-regru -f
# Или в файле
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
```
### Управление установкой
#### Обновление
```bash
# Способ 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" # Аргументы не передаются!
```
#### Удаление
```bash
# Способ 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"?
**Правильный способ (с аргументами):**
```bash
curl -fsSL https://url/script.sh | sudo bash -s update
# ↑
# -s передает аргументы скрипту
```
**Неправильный способ (аргументы игнорируются):**
```bash
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)
**Альтернативные способы:**
```bash
# Вариант 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` |
### Редактирование конфигурации
```bash
# Отредактировать настройки
sudo nano /etc/letsencrypt-regru/config.json
# Перезапустить таймер после изменений
sudo systemctl restart letsencrypt-regru.timer
```
---
## 🚀 Установка через 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
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
```
---
## Требования
### Общие требования
- Операционная система: 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
```bash
# Обновление пакетов
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
```bash
# Обновление пакетов
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](https://www.reg.ru)
2. Перейдите в раздел "Управление API"
3. Используйте ваше имя пользователя и пароль для доступа к API
4. Убедитесь, что у вас есть права на управление DNS-записями
### 2. Настройка конфигурации
#### Для Python скрипта
Создайте файл конфигурации на основе примера:
```bash
# Создание примера конфигурации
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json
# Редактирование конфигурации
sudo nano /etc/letsencrypt/regru_config.json
```
Отредактируйте параметры:
```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 скрипта
Отредактируйте переменные в начале скрипта:
```bash
sudo nano letsencrypt_regru_dns.sh
```
Измените следующие параметры:
```bash
REGRU_USERNAME="your_actual_username"
REGRU_PASSWORD="your_actual_password"
DOMAIN="example.com"
WILDCARD_DOMAIN="*.example.com"
EMAIL="admin@example.com"
```
### 3. Установка прав доступа
```bash
# Для 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 скрипта
### Первый запуск (получение сертификата)
```bash
sudo ./letsencrypt_regru_dns.sh
```
Скрипт автоматически:
1. Проверит зависимости
2. Создаст файл с учетными данными
3. Установит плагин certbot-dns-regru (если не установлен)
4. Проверит наличие существующего сертификата
5. Получит новый сертификат или обновит существующий
6. Перезагрузит веб-сервер
### Просмотр логов
```bash
sudo tail -f /var/log/letsencrypt_regru.log
```
### Ручная проверка сертификата
```bash
sudo certbot certificates
```
---
## Использование Python скрипта
### Создание примера конфигурации
```bash
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json
```
### Получение нового сертификата
```bash
# С использованием конфигурационного файла
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
```
### Обновление существующего сертификата
```bash
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --renew
```
### Проверка срока действия сертификата
```bash
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --check
```
### Автоматический режим (проверка и обновление)
```bash
# Скрипт сам определит, нужно ли обновление
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
```
### Опции командной строки
```
-c, --config FILE Путь к файлу конфигурации (JSON)
--create-config FILE Создать пример файла конфигурации
--obtain Получить новый сертификат
--renew Обновить существующий сертификат
--check Проверить срок действия сертификата
-v, --verbose Подробный вывод
```
---
## � Сборка исполняемых файлов
### PyInstaller - компиляция в исполняемые файлы
Скрипт можно скомпилировать в исполняемый файл для Linux и Windows с помощью PyInstaller.
**Преимущества:**
- ✅ Не требуется установленный Python на целевой системе
- ✅ Все зависимости включены в один файл
- ✅ Простота распространения и развертывания
**Недостатки:**
- ❌ Большой размер (~40-60 MB)
- ❌ Certbot всё равно должен быть установлен в системе
- ❌ Медленный первый запуск
### Быстрая сборка
#### Для Linux:
```bash
make build-linux
```
#### Для Windows:
```bash
make build-windows
```
#### Для всех платформ:
```bash
make build-all
```
### Полный релиз с пакетами
```bash
# Создаст tar.gz для Linux и zip для Windows
make release
```
**Результат:**
- `dist/letsencrypt-regru` - Linux executable
- `dist/letsencrypt-regru.exe` - Windows executable
- `dist/letsencrypt-regru-linux-x86_64.tar.gz`
- `dist/letsencrypt-regru-windows-x86_64.zip`
### Использование собранного файла
**Linux:**
```bash
# Установка
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:**
```powershell
# Просто запустить
.\dist\letsencrypt-regru.exe --help
```
📖 **Подробнее:** См. [BUILD_GUIDE.md](BUILD_GUIDE.md) для детальных инструкций по сборке.
---
## �🚀 Быстрый старт
### За 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": "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: Получите сертификат
```bash
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain
```
### ✅ Готово!
Откройте Nginx Proxy Manager → SSL Certificates
Ваш сертификат `*.example.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://10.10.10.14:81` |
| `npm_email` | Email для входа в NPM | `admin@example.com` |
| `npm_password` | Пароль администратора NPM | `changeme` |
#### 2. Получение учетных данных NPM
1. Войдите в Nginx Proxy Manager: `http://10.10.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://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 | Обновление сертификата |
### Логи и отладка
#### Просмотр логов
```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 - Загрузка сертификата для 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 недоступен по указанному адресу
- Сетевые проблемы
**Решение:**
```bash
# Проверьте доступность NPM
curl http://10.10.10.14:81/api/
# Проверьте учетные данные
# Войдите в NPM через браузер с теми же учетными данными
```
#### Ошибка: Сертификат не загружен в NPM
**Причины:**
- Файлы сертификата не найдены
- Неправильный формат сертификата
- Проблемы с API NPM
**Решение:**
```bash
# Проверьте наличие файлов сертификата
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
**Причина:** Скрипт не может найти существующий сертификат
**Решение:**
```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://10.10.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://10.10.10.14:81`
2. Войдите в систему
3. Перейдите в **SSL Certificates**
4. Проверьте наличие сертификата для вашего домена
5. Проверьте дату истечения
#### В командной строке
```bash
# Список сертификатов в 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
Если нужно временно отключить синхронизацию:
```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@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 скрипта
```bash
# Открыть 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 скрипта
```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 файла
```bash
sudo nano /etc/systemd/system/letsencrypt-regru.service
```
Содержимое:
```ini
[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 файла
```bash
sudo nano /etc/systemd/system/letsencrypt-regru.timer
```
Содержимое:
```ini
[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
```bash
# Перезагрузка 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
- Проверьте, что домен находится под управлением вашего аккаунта
```bash
# Проверка доступа к 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 записи вручную:
```bash
nslookup -type=TXT _acme-challenge.example.com
# или
dig TXT _acme-challenge.example.com
```
### Проблема: "Another instance of Certbot is already running"
**Причина:** Предыдущий процесс Certbot не завершился корректно или остались lock-файлы.
**Решение:**
```bash
# Вариант 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: Подождать автоматически**
Скрипт автоматически:
1. Обнаруживает запущенные процессы Certbot
2. Ждёт их завершения (60 секунд)
3. Пытается очистить lock-файлы
4. Выдаёт рекомендации по решению проблемы
### Проблема: Certbot не установлен
**Решение:**
```bash
# Ubuntu/Debian
sudo apt-get install certbot
# CentOS/RHEL
sudo yum install certbot
# Или через snap
sudo snap install --classic certbot
```
### Проблема: Плагин certbot-dns-regru не найден
**Решение:**
```bash
# Установка через pip
sudo pip3 install certbot-dns-regru
# Или через pip3 с обновлением
sudo pip3 install --upgrade certbot-dns-regru
```
### Проблема: Недостаточно прав
**Решение:**
- Убедитесь, что запускаете скрипт от имени root или с sudo
- Проверьте права доступа к директории `/etc/letsencrypt/`
```bash
sudo chmod 755 /etc/letsencrypt/
sudo chown -R root:root /etc/letsencrypt/
```
### Проблема: Ошибка при перезагрузке веб-сервера
**Решение:**
- Проверьте, какой веб-сервер используется:
```bash
systemctl status nginx
systemctl status apache2
```
- Вручную перезагрузите веб-сервер:
```bash
# Для Nginx
sudo systemctl reload nginx
# Для Apache
sudo systemctl reload apache2
```
### Просмотр подробных логов certbot
```bash
# Логи certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log
# Логи скрипта
sudo tail -f /var/log/letsencrypt_regru.log
```
### Тестовый режим (staging)
Для тестирования используйте staging окружение Let's Encrypt:
```bash
# Добавьте опцию --staging к команде certbot
certbot certonly --staging --dns-regru ...
```
---
## Проверка полученного сертификата
### Просмотр информации о сертификате
```bash
# Просмотр всех сертификатов
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
```
### Проверка сертификата в браузере
1. Откройте ваш сайт в браузере: `https://example.com`
2. Нажмите на иконку замка в адресной строке
3. Проверьте информацию о сертификате
4. Убедитесь, что сертификат выдан Let's Encrypt и покрывает wildcard домен
### Онлайн проверка SSL
- [SSL Labs](https://www.ssllabs.com/ssltest/)
- [SSL Shopper](https://www.sslshopper.com/ssl-checker.html)
---
## Использование сертификата в Nginx Proxy Manager
После получения сертификата вы можете использовать его в Nginx Proxy Manager:
### Вариант 1: Импорт существующего сертификата
1. Войдите в Nginx Proxy Manager: http://10.10.10.14:81/
2. Перейдите в **SSL Certificates** → **Add 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 напрямую, добавьте в конфигурацию:
```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 дней
**Пример использования:**
```bash
letsencrypt-regru --check
# Выход: "Certificate expires in 45 days" или "Certificate needs renewal (15 days left)"
```
---
### Команда `--obtain`
**Назначение**: Получает новый SSL сертификат от Let's Encrypt.
**Что делает:**
1. Проверяет доступ к API reg.ru
2. Запускает certbot с DNS-01 challenge
3. Автоматически создает TXT запись `_acme-challenge` через API reg.ru
4. Ожидает распространения DNS (60 секунд)
5. Let's Encrypt проверяет DNS запись
6. Получает сертификат и сохраняет в `/etc/letsencrypt/live/`
7. Автоматически удаляет временную TXT запись
8. (Опционально) Загружает сертификат в Nginx Proxy Manager
**Пример использования:**
```bash
letsencrypt-regru --obtain
letsencrypt-regru --obtain -v # с подробным выводом
```
**Поддержка wildcard:**
- Для `*.example.com` создается одна TXT запись для основного домена
- Сертификат покрывает все поддомены
---
### Команда `--renew`
**Назначение**: Обновляет существующий SSL сертификат.
**Что делает:**
1. Проверяет наличие существующего сертификата
2. Использует `certbot renew` для обновления
3. Автоматически создает новые TXT записи через API
4. Получает обновленный сертификат
5. (Опционально) Обновляет сертификат в Nginx Proxy Manager
**Пример использования:**
```bash
letsencrypt-regru --renew
```
**Когда использовать:**
- Сертификат скоро истекает (< 30 дней)
- Автоматически запускается systemd timer
---
### Команда `--auto`
**Назначение**: Автоматическая проверка и обновление при необходимости.
**Что делает:**
1. Запускает `--check` для проверки срока действия
2. Если осталось < 30 дней - запускает `--renew`
3. Если сертификата нет - запускает `--obtain`
4. Логирует все действия
**Пример использования:**
```bash
letsencrypt-regru --auto
```
**Идеально для:**
- Запуска через cron или systemd timer
- Полностью автоматического управления сертификатами
---
### Команда `--staging`
**Назначение**: Получает тестовый сертификат из staging окружения Let's Encrypt.
**Что делает:**
1. Запускает полный процесс получения сертификата Let's Encrypt
2. Использует staging CA (Certificate Authority) вместо production
3. Создает TXT запись через API reg.ru (как и в production)
4. Ожидает распространения DNS (60 секунд)
5. Let's Encrypt staging проверяет DNS запись
6. Получает сертификат от staging CA
7. НЕ загружает сертификат в Nginx Proxy Manager
**Пример использования:**
```bash
letsencrypt-regru --staging
letsencrypt-regru --staging -v # с подробным выводом
```
**Преимущества:**
- ✅ **НЕТ ЛИМИТОВ** - неограниченное количество запросов (в отличие от production)
- ✅ **Полная идентичность** - процесс на 100% идентичен production
- ✅ **Реальный DNS** - тестирует весь процесс DNS-валидации
- ✅ **Безопасное тестирование** - не расходует лимиты production (5/неделя)
- ✅ **Быстрая отладка** - можно запускать сколько угодно раз
**⚠️ Ограничения:**
- Браузеры не доверяют staging CA (покажут предупреждение)
- Сертификат нельзя использовать на production сайтах
- Подходит только для тестирования автоматизации
**Когда использовать:**
- ✅ Первая настройка системы
- ✅ Тестирование DNS интеграции
- ✅ Отладка автоматизации
- ✅ Проверка работы hooks
- ✅ Разработка и staging окружения
**Переход на production:**
После успешного тестирования просто запустите:
```bash
sudo letsencrypt-regru --obtain
```
Staging сертификат будет заменен на production.
---
### Команда `--test-cert`
**Назначение**: Создает тестовый самоподписанный сертификат.
**Что делает:**
1. Генерирует приватный ключ RSA 2048 бит
2. Создает самоподписанный сертификат на 365 дней
3. Сохраняет в `/etc/letsencrypt/live/[домен]/`
4. (Опционально) Загружает в Nginx Proxy Manager
**Пример использования:**
```bash
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.
**Что делает:**
1. Определяет текущий публичный IP адрес (через ipinfo.io)
2. Выполняет тестовый запрос к API reg.ru
3. Показывает баланс аккаунта
4. Проверяет авторизацию
**Пример использования:**
```bash
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. **Шаг 1**: Проверяет доступ к API reg.ru (`--test-api`)
2. **Шаг 2**: Создает временную TXT запись `_acme-challenge.[домен]` со случайным значением
3. **Шаг 3**: Ожидает распространения DNS (60 секунд с прогресс-баром)
4. **Шаг 4**: Проверяет DNS запись через публичные DNS серверы (8.8.8.8, 1.1.1.1)
5. **Шаг 5**: Автоматически удаляет тестовую запись
**Пример использования:**
```bash
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 записи во время валидации.
**Что делает:**
1. Читает переменные окружения certbot (`CERTBOT_DOMAIN`, `CERTBOT_VALIDATION`)
2. Создает TXT запись `_acme-challenge.[домен]` через API reg.ru
3. Ожидает распространения DNS (60 секунд)
4. Возвращает управление certbot
**Используется автоматически:** Certbot вызывает этот hook при запуске `--obtain` или `--renew`
---
### Команда `--cleanup-hook` (служебная)
**Назначение**: Используется certbot для удаления DNS записи после валидации.
**Что делает:**
1. Читает переменные окружения certbot
2. Удаляет TXT запись `_acme-challenge.[домен]` через API reg.ru
3. Очищает временные данные
**Используется автоматически:** Certbot вызывает этот hook после завершения валидации
---
### Команда `--help`
**Назначение**: Показывает справку по всем доступным командам.
**Пример использования:**
```bash
letsencrypt-regru --help
```
---
### Флаг `-v` (verbose)
**Назначение**: Включает подробный вывод для диагностики.
**Что показывает:**
- Все HTTP запросы к API reg.ru
- Ответы API (JSON)
- Шаги выполнения certbot
- Детали проверки DNS
- Подробные ошибки
**Пример использования:**
```bash
letsencrypt-regru --obtain -v
letsencrypt-regru --test-dns -v
letsencrypt-regru --check -v
```
---
## Дополнительная документация
- 📘 **[TESTING_GUIDE.md](docs/ru/TESTING_GUIDE.md)** - Полное руководство по созданию и использованию тестовых сертификатов
- 🔄 **[GITEA_SYNC.md](docs/ru/GITEA_SYNC.md)** - Настройка автоматической синхронизации Gitea → GitHub
- 📘 **[CHEATSHEET.md](docs/ru/CHEATSHEET.md)** - Быстрая шпаргалка по командам
- � **[API_TROUBLESHOOTING.md](docs/ru/API_TROUBLESHOOTING.md)** - Устранение проблем с API reg.ru
- �🚀 **[BUILD_GUIDE.md](docs/ru/BUILD_GUIDE.md)** - Сборка исполняемых файлов с PyInstaller
- 📦 **[INSTALL_GUIDE.md](docs/ru/INSTALL_GUIDE.md)** - Подробное руководство по установке
- 🛠️ **[MAKEFILE_COMMANDS.md](docs/ru/MAKEFILE_COMMANDS.md)** - Все команды Makefile
- 🏗️ **[PROJECT_STRUCTURE.md](docs/ru/PROJECT_STRUCTURE.md)** - Структура проекта
- 📝 **[config.json.example](config.json.example)** - Пример конфигурации
---
## Поддержка и вопросы
При возникновении проблем:
1. **Проверьте логи**:
```bash
journalctl -u letsencrypt-regru -f
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
```
2. **Используйте команды диагностики**:
```bash
letsencrypt-regru --test-api # Проверка API
letsencrypt-regru --test-dns # Проверка DNS
letsencrypt-regru --check -v # Проверка сертификата
```
3. **Проверьте документацию**:
- [API_TROUBLESHOOTING.md](docs/ru/API_TROUBLESHOOTING.md) - Решение проблем с API
- [TESTING_GUIDE.md](docs/ru/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)
**Быстрый старт для тестирования:**
```bash
sudo make install # Установка
sudo make test-cert # Создать тестовый сертификат
sudo make obtain # Получить production сертификат
```
Успешной автоматизации! 🔒
---
## 🔄 Синхронизация Gitea → GitHub
Проект поддерживает автоматическую синхронизацию из Gitea в GitHub.
### Быстрая настройка
**Метод 1: Git Hook (мгновенно)**
```bash
# На сервере 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](GITEA_SYNC.md)
---