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

This commit is contained in:
Dmitriy Fofanov
2025-10-28 13:01:05 +03:00
parent 70c9932554
commit ed4531fa64
40 changed files with 4027 additions and 15 deletions

View File

@@ -0,0 +1,56 @@
# Инструкция по созданию Let's Encrypt сертификата с DNS Challenge для провайдера reg.ru в Nginx Proxy Manager
---
## Предпосылки
- Доступ к Nginx Proxy Manager (NPM)
- Доступ к аккаунту reg.ru с правами управления DNS-записями
- API-ключ для управления DNS в reg.ru (если есть автоматическая интеграция)
- Нужно получить сертификат для `*.dfv24.com` (wildcard сертификат)
---
## Шаг 1. Получение API-ключа для reg.ru
1. Войдите в панель управления reg.ru
2. Перейдите в раздел управления API (если поддерживается)
3. Создайте или найдите API-ключ с правом редактирования DNS записей
4. Сохраните API-ключ и секрет (Client ID и API Token)
---
## Шаг 2. Настройка Nginx Proxy Manager для использования DNS Challenge reg.ru
1. В админке NPM перейдите в **SSL Certificates → Add SSL Certificate**
2. Выберите **Let's Encrypt** -> **DNS Challenge**
3. В поле **Provider** выберите `reg_ru` или `custom` (если провайдера нет, потребуется писать скрипт)
4. В поля API впишите необходимые параметры:
- Client ID
- API Token
5. В поле **Domain Names** укажите:
`*.dfv24.com` (для wildcard сертификата)
и основной домен `dfv24.com`
6. Включите остальные опции (Terms of Service, Email)
7. Нажмите **Save** для запроса сертификата
8. NPM автоматически добавит DNS TXT-записи для подтверждения владения доменом через API reg.ru
---
## Шаг 3. Проверка и автоматическое продление
- После успешного создания сертификата NPM будет автоматически обновлять его через DNS Challenge.
- Для успешного продления важно, чтобы API-ключ был действующим, а NPM имел доступ к DNS управлению.
---
## Если в NPM нет готовой интеграции с reg.ru
- Используйте внешний скрипт для обновления TXT записей DNS в reg.ru, настраиваемый в NPM через **Custom DNS Provider**.
- Нужна настройка curl-запросов к API reg.ru для добавления/удаления TXT записей.
---
# Итог
Для wildcard сертификатов Let's Encrypt у reg.ru необходимо использовать DNS Challenge, используя API провайдера для автоматического управления DNS записями.
В Nginx Proxy Manager настройте DNS Challenge с учётом особенностей reg.ru для бесшовного получения и продления сертификатов.

455
docs/ru/BUILD_GUIDE.md Normal file
View File

@@ -0,0 +1,455 @@
# 🔨 Руководство по сборке исполняемых файлов
Данное руководство описывает процесс компиляции Python-скрипта `letsencrypt_regru_api.py` в исполняемые файлы для Linux и Windows с использованием PyInstaller.
## 📋 Содержание
- [Преимущества исполняемых файлов](#преимущества-исполняемых-файлов)
- [Быстрый старт](#быстрый-старт)
- [Подробные инструкции](#подробные-инструкции)
- [Кросс-компиляция](#кросс-компиляция)
- [Troubleshooting](#troubleshooting)
---
## ✅ Преимущества исполняемых файлов
### Плюсы:
-**Один файл** - легко распространять и развертывать
-**Автономность** - не требует установленного Python на целевой системе
-**Все зависимости включены** - requests, cryptography и certbot модули упакованы
-**Простота запуска** - просто скачать и запустить
### Минусы:
-**Большой размер** - ~40-60 MB (включая Python runtime и библиотеки)
-**Certbot зависимость** - системный certbot все равно требуется
-**Медленный первый запуск** - распаковка занимает несколько секунд
-**Требуется пересборка** - при изменении кода нужно пересобирать
---
## 🚀 Быстрый старт
### Сборка для текущей ОС:
```bash
make build
```
### Сборка для всех платформ:
```bash
make build-all
```
### Полный релиз (сборка + пакеты):
```bash
make release
```
---
## 📖 Подробные инструкции
### 1. Установка зависимостей
#### Вариант А: Автоматическая установка
```bash
make install-pyinstaller
```
#### Вариант Б: Ручная установка
```bash
pip install pyinstaller
pip install -r requirements.txt
```
### 2. Сборка для Linux
**На Linux системе:**
```bash
make build-linux
```
**Результат:**
- Файл: `dist/letsencrypt-regru`
- Размер: ~45-55 MB
- Формат: ELF 64-bit executable
**Тестирование:**
```bash
./dist/letsencrypt-regru --help
sudo ./dist/letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
```
### 3. Сборка для Windows
**На Windows системе (PowerShell/CMD):**
```bash
make build-windows
```
**Результат:**
- Файл: `dist/letsencrypt-regru.exe`
- Размер: ~40-50 MB
- Формат: PE32+ executable (Windows)
**Тестирование:**
```powershell
.\dist\letsencrypt-regru.exe --help
```
### 4. Создание пакетов для распространения
#### Linux пакет (tar.gz):
```bash
make package-linux
```
**Содержимое пакета:**
- `letsencrypt-regru` - исполняемый файл
- `README.md` - документация
- `systemd/` - systemd unit файлы
- `config.json.example` - пример конфигурации
**Результат:** `dist/letsencrypt-regru-linux-x86_64.tar.gz`
#### Windows пакет (zip):
```bash
make package-windows
```
**Результат:** `dist/letsencrypt-regru-windows-x86_64.zip`
### 5. Полный цикл релиза
Создание релиза со всеми артефактами:
```bash
make release
```
**Что происходит:**
1. Очистка старых артефактов (`clean-build`)
2. Установка/обновление PyInstaller
3. Сборка для Linux (`build-linux`)
4. Сборка для Windows (`build-windows`)
5. Создание пакета для Linux (`package-linux`)
6. Создание пакета для Windows (`package-windows`)
7. Генерация SHA256 контрольных сумм
**Результат в `dist/`:**
```
letsencrypt-regru # Linux executable
letsencrypt-regru.exe # Windows executable
letsencrypt-regru-linux-x86_64.tar.gz
letsencrypt-regru-windows-x86_64.zip
```
---
## 🔄 Кросс-компиляция
### ⚠️ Важные замечания
**Не рекомендуется:**
- Собирать Linux версию на Windows
- Собирать Windows версию на Linux
- Собирать macOS версию на других ОС
**Причины:**
- Несовместимость системных библиотек
- Разные форматы исполняемых файлов
- Проблемы с путями и разделителями
### Рекомендации
#### Для Linux сборки:
1. Используйте Ubuntu 20.04+ или Debian 10+
2. Установите build-essential
3. Используйте виртуальное окружение Python
```bash
sudo apt-get update
sudo apt-get install -y python3 python3-pip build-essential
make build-linux
```
#### Для Windows сборки:
1. Используйте Windows 10/11
2. Установите Python 3.8+
3. Используйте PowerShell или CMD
```powershell
python -m pip install --upgrade pip
make build-windows
```
#### Для обеих платформ:
Используйте CI/CD (GitHub Actions, GitLab CI):
```yaml
# .github/workflows/build.yml
name: Build Releases
on:
push:
tags:
- 'v*'
jobs:
build-linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Linux
run: make build-linux
build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
- name: Build Windows
run: make build-windows
```
---
## 🛠️ Все команды Makefile
### Основные команды:
| Команда | Описание |
|---------|----------|
| `make build` | Собрать для текущей ОС |
| `make build-linux` | Собрать для Linux |
| `make build-windows` | Собрать для Windows |
| `make build-all` | Собрать для всех платформ |
| `make package-linux` | Создать tar.gz пакет |
| `make package-windows` | Создать zip пакет |
| `make release` | Полный цикл релиза |
### Вспомогательные команды:
| Команда | Описание |
|---------|----------|
| `make install-pyinstaller` | Установить PyInstaller |
| `make test-build` | Протестировать собранный файл |
| `make clean-build` | Очистить артефакты сборки |
| `make build-info` | Показать информацию о среде |
---
## 🐛 Troubleshooting
### Проблема: PyInstaller не найден
**Ошибка:**
```
make: pyinstaller: Command not found
```
**Решение:**
```bash
make install-pyinstaller
# или
pip install pyinstaller
```
---
### Проблема: Импорт модулей не работает
**Ошибка:**
```
ModuleNotFoundError: No module named 'requests'
```
**Решение:**
```bash
pip install -r requirements.txt
# или добавьте в PyInstaller команду:
--hidden-import requests
--hidden-import certbot
--hidden-import cryptography
```
---
### Проблема: Большой размер файла
**Размер ~100+ MB вместо 40-60 MB**
**Причины:**
- Включены лишние модули
- Не используется `--onefile`
- Включены debug символы
**Решение:**
```bash
# Используйте флаги оптимизации:
pyinstaller --onefile \
--strip \
--exclude-module tkinter \
--exclude-module matplotlib \
letsencrypt_regru_api.py
```
---
### Проблема: Certbot не работает в исполняемом файле
**Ошибка:**
```
certbot: command not found
```
**Решение:**
Certbot вызывается через `subprocess` и должен быть установлен в системе:
**Linux:**
```bash
sudo apt-get install certbot
```
**Windows:**
- Не поддерживается напрямую
- Используйте WSL или Docker
---
### Проблема: Права доступа к файлам
**Ошибка:**
```
Permission denied: /etc/letsencrypt/
```
**Решение:**
```bash
# Linux/macOS
sudo ./dist/letsencrypt-regru --check
# Или установите правильные права:
sudo chmod +x ./dist/letsencrypt-regru
sudo chown root:root ./dist/letsencrypt-regru
```
---
### Проблема: Медленный запуск
**Первый запуск занимает 5-10 секунд**
**Причина:**
PyInstaller распаковывает файлы во временную директорию при каждом запуске.
**Решение:**
- Это нормальное поведение для `--onefile`
- Используйте `--onedir` для более быстрого запуска (но будет много файлов)
- Кэшируйте временную директорию (автоматически)
---
### Проблема: Антивирус блокирует файл
**Windows Defender помечает .exe как вирус**
**Причины:**
- Самораспаковывающийся архив похож на вредоносное ПО
- Отсутствие цифровой подписи
- Малоизвестный исполняемый файл
**Решение:**
1. **Добавьте в исключения:**
- Windows Defender → Settings → Exclusions
2. **Подпишите файл цифровой подписью:**
```bash
# Требуется сертификат Code Signing
signtool sign /f cert.pfx /p password dist/letsencrypt-regru.exe
```
3. **Проверьте на VirusTotal:**
- Загрузите файл на virustotal.com
- Добавьте результаты в README
---
## 📊 Сравнение: Python vs Исполняемый файл
| Характеристика | Python скрипт | Исполняемый файл |
|----------------|---------------|------------------|
| Размер | ~50 KB | ~40-60 MB |
| Зависимости | Требует Python + pip | Автономный |
| Скорость запуска | Быстро (~1 сек) | Медленно (~5-10 сек) |
| Обновление | Просто заменить .py | Требуется пересборка |
| Совместимость | Любая ОС с Python | Только для целевой ОС |
| Установка | Требует venv setup | Скачать и запустить |
| Certbot | Через subprocess | Через subprocess |
---
## 🎯 Рекомендации
### Используйте Python скрипт если:
- ✅ Python уже установлен в системе
- ✅ Нужны частые обновления кода
- ✅ Используете виртуальное окружение
- ✅ Работаете на серверах (production)
### Используйте исполняемый файл если:
- ✅ Python не установлен
- ✅ Нужна простота развертывания
- ✅ Распространяете для конечных пользователей
- ✅ Тестирование на чистых системах
---
## 📦 Пример использования собранного файла
### Linux:
```bash
# Скачать и распаковать
wget https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-linux-x86_64.tar.gz
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
# Установить
sudo mv 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
# Скачать и распаковать
Invoke-WebRequest -Uri "https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-windows-x86_64.zip" -OutFile "letsencrypt-regru.zip"
Expand-Archive -Path letsencrypt-regru.zip -DestinationPath "C:\Program Files\LetsEncrypt-RegRu"
# Использовать
cd "C:\Program Files\LetsEncrypt-RegRu"
.\letsencrypt-regru.exe --help
```
---
## 📝 Дополнительные ресурсы
- [PyInstaller Documentation](https://pyinstaller.org/en/stable/)
- [PyInstaller FAQ](https://pyinstaller.org/en/stable/FAQ.html)
- [Building Cross-Platform Applications](https://pyinstaller.org/en/stable/operating-mode.html)
---
## 📄 Лицензия
Этот проект использует лицензию согласно основному README.md.
---
**Автор:** Фофанов Дмитрий
**Дата обновления:** 28.10.2025

153
docs/ru/CHANGELOG.md Normal file
View File

@@ -0,0 +1,153 @@
# 📋 Журнал изменений (Changelog)
## [2.1.0] - 2025-10-27
### 🆕 Добавлено
#### Генерация тестовых SSL сертификатов
-**Новый класс `TestCertificateGenerator`** - генерация самоподписанных сертификатов
-**Команда `--test-cert`** в Python скрипте для создания тестовых сертификатов
-**Скрипт `test_certificate.sh`** - автономное создание через OpenSSL
-**Команда `make test-cert`** в Makefile для быстрого тестирования
#### Документация
- 📘 **TESTING_GUIDE.md** (370+ строк) - полное руководство по тестированию
- Обход лимитов Let's Encrypt (5 сертификатов в неделю)
- Сравнение методов создания сертификатов
- Примеры для CI/CD и Docker
- Переход с тестовых на production
- Частые вопросы и решения
- 📘 **PROJECT_STRUCTURE.md** - структура проекта
- Описание всех файлов
- Список возможностей
- Технологии
- 📘 **CHEATSHEET.md** - быстрая шпаргалка
- Основные команды
- Сценарии использования
- Частые ошибки и решения
- Workflow разработки
#### Функциональность
- ✨ Поддержка **неограниченного количества** тестовых сертификатов
-**Мгновенное создание** (1-2 секунды) без DNS валидации
-**Автоматическая загрузка** тестовых сертификатов в NPM
-**Полная совместимость** структуры с Let's Encrypt
-**Wildcard поддержка** для тестовых сертификатов
### 🔧 Улучшено
#### Python скрипт
- Добавлен импорт библиотеки `cryptography` с проверкой установки
- Новые параметры командной строки:
- `--test-cert` - создание тестового сертификата
- `--auto` - явное указание автоматического режима
- Улучшенная обработка тестовых сертификатов в NPM
- Детальное логирование процесса генерации
#### Makefile
- Добавлена команда `make test-cert` с красивым выводом
- Информационные сообщения о преимуществах тестовых сертификатов
- Предупреждения о безопасности
#### README.md
- Раздел "Создание тестового самоподписанного сертификата"
- Обновленное содержание с ссылкой на тестовые сертификаты
- Примеры использования тестовых сертификатов
- Интеграция с NPM для тестовых сертификатов
- Ссылки на дополнительную документацию
### 🎯 Преимущества
#### Для разработчиков
-**Нет лимитов** - неограниченное количество сертификатов
-**Быстро** - создание за 1-2 секунды
-**Офлайн** - работает без интернета
-**Идентичная структура** - те же файлы что и Let's Encrypt
#### Для тестирования
-**CI/CD friendly** - быстрое создание в pipeline
-**Docker ready** - легко встраивается в контейнеры
-**Staging окружения** - идеально для тестовых серверов
-**Локальная разработка** - HTTPS на localhost
### 📊 Статистика
- **Строк кода**: 1,411 (Python скрипт)
- **Строк в Makefile**: 415
- **Строк документации**: 2,200+
- **Команд в Makefile**: 13
- **Режимов работы**: 4 (obtain, renew, auto, test-cert)
---
## [2.0.0] - 2025-10-27
### 🆕 Добавлено
- ✨ Интеграция с Nginx Proxy Manager (NPM)
- ✨ Класс `NginxProxyManagerAPI` для управления сертификатами через API
- ✨ Автоматическая загрузка сертификатов в NPM
- ✨ Автоматическое обновление сертификатов в NPM
- ✨ Автоматическая проверка срока действия
- ✨ Настраиваемый порог обновления (`renewal_days`)
- ✨ Makefile для автоматизации установки/удаления
- ✨ Systemd service + timer
- ✨ Cron автоматизация
### 🔧 Улучшено
- Консолидация документации в единый README.md
- Подробное логирование с статусами операций
- Валидация конфигурации
- Улучшенная обработка ошибок
### 📘 Документация
- Полное руководство по NPM интеграции
- Быстрый старт за 3 команды
- Примеры автоматизации
---
## [1.0.0] - 2025-10-26
### 🆕 Первый релиз
- Python скрипт для Let's Encrypt через reg.ru API
- Bash скрипт с certbot-dns-regru
- PowerShell версия для Windows
- DNS-01 валидация
- Wildcard сертификаты
- Базовая документация
---
## Roadmap (Планы)
### [2.2.0] - Планируется
- [ ] Веб-интерфейс для управления
- [ ] Поддержка множественных доменов
- [ ] Notifications (email, telegram)
- [ ] Grafana dashboard для мониторинга
- [ ] Backup сертификатов
### [3.0.0] - Будущее
- [ ] Поддержка других DNS провайдеров
- [ ] Cloudflare API
- [ ] Route53 (AWS)
- [ ] Google Cloud DNS
---
## Типы изменений
- `🆕 Добавлено` - новый функционал
- `🔧 Улучшено` - улучшения существующего функционала
- `🐛 Исправлено` - исправление багов
- `🗑️ Удалено` - удаленный функционал
- `🔒 Безопасность` - изменения безопасности
- `📘 Документация` - изменения в документации
---
**Версионирование**: Semantic Versioning (MAJOR.MINOR.PATCH)
- **MAJOR**: Несовместимые изменения API
- **MINOR**: Новый функционал с обратной совместимостью
- **PATCH**: Исправления багов

263
docs/ru/CHEATSHEET.md Normal file
View File

@@ -0,0 +1,263 @@
# ⚡ Шпаргалка по SSL сертификатам
## 🚀 Быстрый старт
### Установка за 3 команды
```bash
sudo make install
sudo nano /etc/letsencrypt/regru_config.json # Заполнить данные
sudo make test-cert # Тест
```
---
## 🧪 Тестирование (БЕЗ лимитов Let's Encrypt)
```bash
# Создать тестовый сертификат (неограниченно)
sudo make test-cert
# Проверить статус
sudo make status
# Просмотреть логи
sudo make logs
```
**Когда использовать:**
- ⚠️ Let's Encrypt: макс. 5 сертификатов/неделю
- ✅ Тестовые: НЕОГРАНИЧЕННО
- ⚡ Создание: 1-2 секунды vs 2-5 минут
---
## 🔒 Production (Let's Encrypt)
```bash
# Получить настоящий сертификат
sudo make obtain
# Автоматический режим (проверка + обновление)
sudo make run
# Принудительное обновление
sudo make renew
```
---
## 📋 Основные команды
| Команда | Описание | Лимиты |
|---------|----------|--------|
| `make test-cert` | Тестовый сертификат | ✅ Нет |
| `make obtain` | Let's Encrypt новый | ⚠️ 5/неделю |
| `make renew` | Обновить существующий | ⚠️ 5/неделю |
| `make run` | Авто-режим | ⚠️ 5/неделю |
| `make status` | Статус системы | - |
| `make logs` | Показать логи | - |
| `make check-config` | Проверить конфигурацию | - |
---
## 📝 Конфигурация
### Минимальная (тестирование)
```json
{
"domain": "test.example.com",
"wildcard": true,
"cert_dir": "/etc/letsencrypt/live"
}
```
### Полная (production + NPM)
```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"
}
```
---
## 🔄 Workflow
### Разработка → Production
```bash
# 1. Разработка (тестовые сертификаты)
sudo make test-cert # Создать тестовый
# Тестировать приложение...
# 2. Production (Let's Encrypt)
sudo rm -rf /etc/letsencrypt/live/example.com/ # Удалить тест
sudo make obtain # Создать production
```
---
## 📁 Важные пути
```bash
# Конфигурация
/etc/letsencrypt/regru_config.json
# Сертификаты
/etc/letsencrypt/live/example.com/
├── privkey.pem # Приватный ключ
├── cert.pem # Сертификат
├── fullchain.pem # Полная цепочка (для nginx)
└── chain.pem # CA цепочка
# Скрипты
/opt/letsencrypt-regru/letsencrypt_regru_api.py
# Логи
/var/log/letsencrypt_regru.log
```
---
## 🔍 Проверка
```bash
# Проверить конфигурацию
sudo make check-config
# Проверить сертификат
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout
# Проверить срок действия
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -dates
# Проверить systemd
sudo systemctl status letsencrypt-regru.timer
sudo systemctl list-timers letsencrypt-regru.timer
# Проверить cron
sudo crontab -l | grep letsencrypt
```
---
## 🐛 Отладка
```bash
# Подробные логи
sudo make logs
# Тестовый запуск с подробностями
sudo python3 /opt/letsencrypt-regru/letsencrypt_regru_api.py \
-c /etc/letsencrypt/regru_config.json --check -v
# Логи certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log
# Логи systemd
sudo journalctl -u letsencrypt-regru.service -f
```
---
## ⚠️ Частые ошибки
### Let's Encrypt: Rate limit exceeded
```bash
# РЕШЕНИЕ: Используйте тестовые сертификаты
sudo make test-cert
```
### NPM: Certificate not found
```bash
# РЕШЕНИЕ: Проверьте настройки NPM
sudo make check-config
# Проверьте подключение
curl -k https://npm.example.com
```
### Permission denied
```bash
# РЕШЕНИЕ: Запускайте с sudo
sudo make test-cert
```
---
## 🎯 Сценарии использования
### Локальная разработка
```bash
sudo make test-cert
# Открыть https://localhost (игнорировать предупреждение)
```
### CI/CD тестирование
```bash
# В pipeline
sudo make test-cert
# Запустить тесты...
sudo make status
```
### Staging окружение
```bash
sudo make test-cert # Или
sudo make obtain # Если есть домен
```
### Production окружение
```bash
sudo make install
sudo make obtain
# Автоматическое обновление через cron/systemd
```
---
## 📚 Документация
- **README.md** - Полное руководство (1420+ строк)
- **TESTING_GUIDE.md** - Тестирование (370+ строк)
- **PROJECT_STRUCTURE.md** - Структура проекта
- **CHEATSHEET.md** - Эта шпаргалка
---
## 🆘 Быстрая помощь
```bash
# Показать все команды
make help
# Проверить установку
sudo make status
# Полная переустановка
sudo make uninstall
sudo make install
```
---
## 💡 Советы
1. **Всегда начинайте с тестовых сертификатов** - избегайте лимитов
2. **Проверяйте конфигурацию** - `make check-config`
3. **Мониторьте логи** - `make logs`
4. **Автоматизируйте** - systemd/cron уже настроены
5. **Храните бэкапы** конфигурации
---
**Версия**: 2.1
**Обновлено**: 27.10.2025

133
docs/ru/DESCRIPTION.md Normal file
View File

@@ -0,0 +1,133 @@
# 🔒 SSL Certificate Manager для Let's Encrypt + reg.ru
**Автоматическое управление SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru и интеграцией с Nginx Proxy Manager**
## 📖 Описание
Комплексное решение для автоматизации создания, обновления и управления SSL сертификатами Let's Encrypt для доменов, зарегистрированных на reg.ru. Поддерживает DNS-01 валидацию, wildcard сертификаты, автоматическую загрузку в Nginx Proxy Manager и генерацию тестовых сертификатов для разработки.
### ✨ Основные возможности
- 🔐 **Автоматическое получение SSL сертификатов** через Let's Encrypt
- 🌐 **DNS-01 валидация** через API reg.ru (поддержка wildcard доменов)
- 🔄 **Автоматическое обновление** сертификатов с настраиваемым порогом
- 📦 **Интеграция с Nginx Proxy Manager** - автоматическая загрузка и обновление
- 🧪 **Тестовые сертификаты** - обход лимитов Let's Encrypt (5 в неделю)
- ⚙️ **Полная автоматизация** через systemd/cron
- 🔀 **Синхронизация репозиториев** - автоматическая синхронизация Gitea → GitHub
### 🚀 Быстрый старт
```bash
# Установка через Makefile
sudo make install
# Настройка конфигурации
sudo nano /etc/letsencrypt/regru_config.json
# Создание тестового сертификата (без лимитов)
sudo make test-cert
# Получение production сертификата
sudo make obtain
```
### 📋 Требования
- **ОС**: Linux (Ubuntu/Debian/CentOS)
- **Python**: 3.6+
- **Зависимости**: certbot, requests, cryptography
- **API**: reg.ru (доступ к DNS управлению)
- **Опционально**: Nginx Proxy Manager
### 🎯 Сценарии использования
- ✅ Автоматизация SSL сертификатов для web-серверов
- ✅ Централизованное управление через Nginx Proxy Manager
- ✅ Тестирование и разработка с самоподписанными сертификатами
- ✅ CI/CD интеграция
- ✅ Мультидоменные конфигурации с wildcard
### 📚 Документация
- [README.md](README.md) - Полное руководство (1400+ строк)
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - Руководство по тестированию
- [GITEA_SYNC.md](GITEA_SYNC.md) - Синхронизация Gitea → GitHub
- [CHEATSHEET.md](CHEATSHEET.md) - Быстрая шпаргалка
---
## 📖 Description (English)
**Automated Let's Encrypt SSL Certificate Manager with DNS validation via reg.ru API and Nginx Proxy Manager integration**
Comprehensive solution for automating the creation, renewal, and management of Let's Encrypt SSL certificates for domains registered with reg.ru. Supports DNS-01 validation, wildcard certificates, automatic upload to Nginx Proxy Manager, and test certificate generation for development.
### ✨ Key Features
- 🔐 **Automatic SSL certificate** issuance via Let's Encrypt
- 🌐 **DNS-01 validation** via reg.ru API (wildcard domain support)
- 🔄 **Automatic renewal** with configurable threshold
- 📦 **Nginx Proxy Manager integration** - automatic upload and update
- 🧪 **Test certificates** - bypass Let's Encrypt rate limits (5 per week)
- ⚙️ **Full automation** via systemd/cron
- 🔀 **Repository sync** - automatic Gitea → GitHub synchronization
### 🚀 Quick Start
```bash
# Install via Makefile
sudo make install
# Configure
sudo nano /etc/letsencrypt/regru_config.json
# Create test certificate (no limits)
sudo make test-cert
# Get production certificate
sudo make obtain
```
### 📋 Requirements
- **OS**: Linux (Ubuntu/Debian/CentOS)
- **Python**: 3.6+
- **Dependencies**: certbot, requests, cryptography
- **API**: reg.ru (DNS management access)
- **Optional**: Nginx Proxy Manager
### 🎯 Use Cases
- ✅ SSL certificate automation for web servers
- ✅ Centralized management via Nginx Proxy Manager
- ✅ Development and testing with self-signed certificates
- ✅ CI/CD integration
- ✅ Multi-domain configurations with wildcards
### 📚 Documentation
- [README.md](README.md) - Complete guide (1400+ lines)
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - Testing guide
- [GITEA_SYNC.md](GITEA_SYNC.md) - Gitea → GitHub sync
- [CHEATSHEET.md](CHEATSHEET.md) - Quick reference
---
## 👤 Автор / Author
**Фофанов Дмитрий** @ 2025
## 📄 Лицензия / License
Open Source - Free to use
## 🤝 Вклад / Contributing
Pull requests приветствуются / Pull requests are welcome!
## 🔗 Ссылки / Links
- **Документация reg.ru API**: https://www.reg.ru/support/api
- **Let's Encrypt**: https://letsencrypt.org/
- **Nginx Proxy Manager**: https://nginxproxymanager.com/

111
docs/ru/DOCS_INDEX.md Normal file
View File

@@ -0,0 +1,111 @@
# 📚 Documentation Index / Индекс документации
## 🇷🇺 Русская документация / Russian Documentation
### Основные руководства / Main Guides
- **[README.md](README.md)** - Полное руководство (1,420+ строк)
- **[TESTING_GUIDE.md](TESTING_GUIDE.md)** - Руководство по тестированию
- **[GITEA_SYNC.md](GITEA_SYNC.md)** - Синхронизация Gitea → GitHub
- **[PROJECT_STRUCTURE.md](PROJECT_STRUCTURE.md)** - Структура проекта
### Справочная информация / Reference
- **[CHEATSHEET.md](CHEATSHEET.md)** - Быстрая шпаргалка
- **[CHANGELOG.md](CHANGELOG.md)** - История изменений
- **[DESCRIPTION.md](DESCRIPTION.md)** - Описание проекта
### Git Hooks
- **[gitea-hooks/README.md](gitea-hooks/README.md)** - Установка Git hooks
---
## 🇬🇧 English Documentation / Английская документация
### Main Guides / Основные руководства
- **[README_EN.md](README_EN.md)** - Complete Guide (Coming Soon)
- **[TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md)** - Testing Guide ✅
- **[GITEA_SYNC_EN.md](GITEA_SYNC_EN.md)** - Gitea → GitHub Sync ✅
- **[PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md)** - Project Structure ✅
### Reference / Справочная информация
- **[CHEATSHEET_EN.md](CHEATSHEET_EN.md)** - Quick Reference ✅
- **[CHANGELOG_EN.md](CHANGELOG_EN.md)** - Change History ✅
- **[DESCRIPTION.md](DESCRIPTION.md)** - Project Description (Bilingual) ✅
### Git Hooks
- **[gitea-hooks/README_EN.md](gitea-hooks/README_EN.md)** - Git Hooks Installation ✅
---
## 📖 Quick Links / Быстрые ссылки
### For Users / Для пользователей
| Topic | Russian | English |
|-------|---------|---------|
| Getting Started | [README.md](README.md) | [README_EN.md](README_EN.md) |
| Testing Certificates | [TESTING_GUIDE.md](TESTING_GUIDE.md) | [TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md) |
| Quick Commands | [CHEATSHEET.md](CHEATSHEET.md) | [CHEATSHEET_EN.md](CHEATSHEET_EN.md) |
### For Developers / Для разработчиков
| Topic | Russian | English |
|-------|---------|---------|
| Project Structure | [PROJECT_STRUCTURE.md](PROJECT_STRUCTURE.md) | [PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md) |
| Repository Sync | [GITEA_SYNC.md](GITEA_SYNC.md) | [GITEA_SYNC_EN.md](GITEA_SYNC_EN.md) |
| Changelog | [CHANGELOG.md](CHANGELOG.md) | [CHANGELOG_EN.md](CHANGELOG_EN.md) |
---
## 🚀 Quick Start / Быстрый старт
### Installation / Установка
```bash
sudo make install
sudo nano /etc/letsencrypt/regru_config.json
sudo make test-cert
```
### Documentation Priority / Приоритет документации
1. Start here / Начните здесь: **README.md** / **README_EN.md**
2. Testing / Тестирование: **TESTING_GUIDE.md** / **TESTING_GUIDE_EN.md**
3. Quick ref / Шпаргалка: **CHEATSHEET.md** / **CHEATSHEET_EN.md**
---
## 📊 Documentation Status / Статус документации
| File | Russian | English | Lines | Status |
|------|---------|---------|-------|--------|
| Main Guide | ✅ | 🔄 | 1,420+ | RU Complete |
| Testing Guide | ✅ | ✅ | 370+ | Both Complete |
| Cheatsheet | ✅ | ✅ | 200+ | Both Complete |
| Project Structure | ✅ | ✅ | 200+ | Both Complete |
| Gitea Sync | ✅ | ✅ | 400+ | Both Complete |
| Changelog | ✅ | ✅ | 150+ | Both Complete |
| Git Hooks | ✅ | ✅ | 100+ | Both Complete |
**Legend:**
- ✅ Complete / Готово
- 🔄 In Progress / В разработке
- ❌ Not Started / Не начато
---
## 🎯 Choose Your Language / Выберите язык
### Prefer Russian? / Предпочитаете русский?
👉 Начните с [README.md](README.md)
### Prefer English? / Предпочитаете английский?
👉 Start with [README_EN.md](README_EN.md) or [DESCRIPTION.md](DESCRIPTION.md)
---
## 💡 Contributing / Вклад
Help us translate / Помогите с переводом:
- [ ] Complete README_EN.md / Завершить README_EN.md
- [ ] Translate docs/ folder / Перевести папку docs/
---
**Last Updated / Обновлено**: October 27, 2025
**Maintained by / Поддерживает**: Фофанов Дмитрий

425
docs/ru/GITEA_SYNC.md Normal file
View File

@@ -0,0 +1,425 @@
# 🔄 Синхронизация Gitea → GitHub
Автоматическая синхронизация репозитория из Gitea в GitHub после каждого push.
---
## 📋 Доступные методы
| Метод | Сложность | Скорость | Надежность | Рекомендация |
|-------|-----------|----------|------------|--------------|
| **1. Git Hooks** | ⭐⭐ | ⚡ Мгновенно | ✅ Высокая | Рекомендуется |
| **2. GitHub Actions** | ⭐⭐⭐ | ⏱️ 1-5 мин | ✅ Высокая | Для сложных сценариев |
| **3. Gitea Mirror** | ⭐ | ⏱️ По расписанию | ⭐⭐ Средняя | Самый простой |
| **4. Двойной Remote** | ⭐ | ⚡ Мгновенно | ⭐⭐ Средняя | Локальная работа |
---
## 🚀 Метод 1: Git Hooks (Рекомендуется)
### Установка
**1. На сервере Gitea найдите путь к репозиторию:**
```bash
# Обычно это:
/var/lib/gitea/data/gitea-repositories/username/configure_nginx_manager.git
# Или
/home/git/gitea-repositories/username/configure_nginx_manager.git
```
**2. Создайте post-receive hook:**
```bash
cd /path/to/gitea/repos/username/configure_nginx_manager.git/hooks/
nano post-receive
```
**3. Вставьте содержимое** из файла `gitea-hooks/post-receive` (в этом репозитории)
**4. Настройте параметры:**
```bash
# В файле post-receive измените:
GITHUB_REPO="git@github.com:YOUR_USERNAME/configure_nginx_manager.git"
# Или для HTTPS с токеном:
GITHUB_REPO="https://YOUR_TOKEN@github.com/YOUR_USERNAME/configure_nginx_manager.git"
```
**5. Сделайте скрипт исполняемым:**
```bash
chmod +x post-receive
```
**6. Создайте директорию для логов:**
```bash
mkdir -p /var/log/gitea
chown git:git /var/log/gitea
```
### Настройка SSH ключей (для git@github.com)
**На сервере Gitea:**
**Шаг 1: Определите пользователя Gitea**
```bash
# Проверьте под каким пользователем запущен Gitea
ps aux | grep gitea | grep -v grep
# Обычно это один из:
# - git (стандартная установка)
# - gitea (установка через Docker/LXC)
```
**Шаг 2: Переключитесь на этого пользователя**
```bash
# Попробуйте git:
sudo su - git
# Если не работает, попробуйте gitea:
sudo su - gitea
# Проверьте текущего пользователя
whoami # Должно быть: git или gitea
```
**Шаг 3: Создайте SSH ключ**
```bash
# Создайте SSH ключ (если его ещё нет)
ssh-keygen -t ed25519 -C "gitea-to-github-sync" -f ~/.ssh/id_ed25519 -N ""
# Скопируйте публичный ключ
cat ~/.ssh/id_ed25519.pub
```
**На GitHub:**
1. Settings → SSH and GPG keys
2. New SSH key
3. Вставьте публичный ключ
4. Save
**⚠️ ВАЖНО: Добавьте GitHub в known_hosts:**
```bash
# От того же пользователя (git или gitea)
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
# Проверьте что ключ добавлен
cat ~/.ssh/known_hosts | grep github.com
```
**Проверка подключения:**
```bash
ssh -T git@github.com
# Должно вывести: Hi username! You've successfully authenticated...
```
### Настройка токена (для HTTPS)
**На GitHub:**
1. Settings → Developer settings → Personal access tokens → Tokens (classic)
2. Generate new token
3. Выберите scope: `repo` (полный доступ к репозиториям)
4. Скопируйте токен
**В hook файле:**
```bash
GITHUB_REPO="https://ghp_YOUR_TOKEN_HERE@github.com/username/configure_nginx_manager.git"
```
### Тестирование
```bash
# Сделайте тестовый commit в Gitea
cd /tmp
git clone http://gitea.example.com/username/configure_nginx_manager.git
cd configure_nginx_manager
echo "test" >> README.md
git add README.md
git commit -m "Test sync to GitHub"
git push
# Проверьте лог
tail -f /var/log/gitea/github-sync.log
# Проверьте GitHub - изменения должны появиться
```
---
## 🔄 Метод 2: GitHub Actions
### Установка
**1. Создайте workflow в GitHub репозитории:**
Файл уже создан: `.github/workflows/sync-from-gitea.yml`
**2. Настройте секреты в GitHub:**
GitHub Repository → Settings → Secrets and variables → Actions → New repository secret
Добавьте:
- **Name**: `GITEA_URL`
- **Value**: `https://gitea.example.com/username/configure_nginx_manager.git`
- **Name**: `GITEA_TOKEN`
- **Value**: Токен доступа Gitea
### Получение токена Gitea
**В Gitea:**
1. Settings → Applications → Generate New Token
2. Token Name: "GitHub Sync"
3. Select permissions: `read:repository`
4. Generate Token
5. Скопируйте токен
### Запуск синхронизации
**Автоматически (по расписанию):**
- Каждый час проверяет изменения
**Вручную:**
1. GitHub → Actions
2. Выберите workflow "Sync from Gitea"
3. Run workflow
**Через webhook от Gitea:**
В Gitea репозитории:
1. Settings → Webhooks → Add Webhook → Gitea
2. Target URL: `https://api.github.com/repos/USERNAME/configure_nginx_manager/dispatches`
3. HTTP Method: `POST`
4. POST Content Type: `application/json`
5. Secret: оставьте пустым или используйте
6. Trigger On: `Push events`
7. Body:
```json
{
"event_type": "gitea-push"
}
```
---
## 🪞 Метод 3: Gitea Mirror (Встроенная функция)
### Настройка
**В Gitea репозитории:**
1. Settings → Repository
2. Прокрутите до "Mirror Settings"
3. Нажмите "Add Push Mirror"
4. Заполните:
- **Git Remote Repository URL**: `https://github.com/username/configure_nginx_manager.git`
- **Username**: ваш GitHub username
- **Password**: GitHub Personal Access Token
- **Sync Interval**: `8h` (каждые 8 часов) или `0` (только вручную)
5. Save
### Ручная синхронизация
Settings → Repository → Mirror Settings → Sync Now
### Преимущества
- ✅ Встроенная функция
-Не требует скриптов
- ✅ Управление через веб-интерфейс
### Недостатки
- ⚠️ Работает по расписанию (не мгновенно)
- ⚠️ Доступно не во всех версиях Gitea
---
## 🔀 Метод 4: Двойной Remote
### Для локальной работы
**Настройка:**
```bash
# В вашем локальном репозитории
cd configure_nginx_manager
# Добавьте GitHub как второй remote
git remote add github git@github.com:username/configure_nginx_manager.git
# Или настройте push в оба репозитория одновременно
git remote set-url --add --push origin git@github.com:username/configure_nginx_manager.git
# Проверьте
git remote -v
```
**Использование:**
```bash
# Обычный push (только в Gitea)
git push origin main
# Push в GitHub
git push github main
# Push в оба репозитория
git push origin main
git push github main
# Или создайте alias
git config alias.pushall '!git push origin main && git push github main'
git pushall
```
---
## 🔍 Проверка синхронизации
### Проверка через Git
```bash
# Сравнить коммиты
git ls-remote git@gitea.example.com:username/configure_nginx_manager.git
git ls-remote git@github.com:username/configure_nginx_manager.git
# Должны быть одинаковые SHA
```
### Проверка логов (Метод 1 - Hooks)
```bash
# На сервере Gitea
tail -f /var/log/gitea/github-sync.log
```
### Проверка GitHub Actions (Метод 2)
1. GitHub Repository → Actions
2. Смотрите последние запуски
3. Проверьте логи выполнения
---
## ⚙️ Рекомендованная конфигурация
Для максимальной надежности используйте **комбинацию методов**:
1. **Git Hook** (основной) - мгновенная синхронизация
2. **GitHub Actions** (резервный) - проверка каждый час на случай сбоя hook
### Установка обоих методов
```bash
# 1. Установите Git Hook на сервере Gitea
# (см. Метод 1)
# 2. Настройте GitHub Actions
# (см. Метод 2)
# 3. GitHub Actions будет подхватывать пропущенные изменения
```
---
## 🐛 Устранение проблем
### Проблема: Hook не срабатывает
**Проверка:**
```bash
# На сервере Gitea
ls -la /path/to/repo.git/hooks/post-receive
# Должно быть -rwxr-xr-x
# Проверьте права
chmod +x /path/to/repo.git/hooks/post-receive
chown git:git /path/to/repo.git/hooks/post-receive
# Проверьте лог ошибок Gitea
tail -f /var/log/gitea/gitea.log
```
### Проблема: Permission denied (SSH)
**Решение:**
```bash
# Убедитесь что SSH ключ добавлен в GitHub
ssh -T git@github.com
# Проверьте права на .ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
```
### Проблема: Authentication failed (HTTPS)
**Решение:**
- Проверьте токен GitHub (должен иметь scope `repo`)
- Токен не истёк
- Правильный формат URL: `https://TOKEN@github.com/user/repo.git`
### Проблема: GitHub Actions не запускается
**Решение:**
1. Проверьте секреты в Settings → Secrets
2. Проверьте формат webhook от Gitea
3. Запустите вручную для теста
---
## 📊 Сравнение методов
### Скорость синхронизации
- **Git Hooks**: ⚡ < 1 секунды
- **GitHub Actions (webhook)**: 10-30 секунд
- **GitHub Actions (schedule)**: до 1 часа
- **Gitea Mirror**: по расписанию
### Надежность
- **Git Hooks**: ⭐⭐⭐⭐⭐ (при правильной настройке)
- **GitHub Actions**: ⭐⭐⭐⭐⭐ (очень надежно)
- **Gitea Mirror**: ⭐⭐⭐ (зависит от версии Gitea)
- **Двойной Remote**: ⭐⭐ (требует ручного действия)
---
## 🎯 Итоговая рекомендация
Для проекта `configure_nginx_manager`:
**1. Основной метод: Git Hook**
- Быстро
- Надежно
- Автоматически
**2. Резервный метод: GitHub Actions**
- Проверка каждый час
- Подхватит пропущенные изменения
- Можно запустить вручную
**3. Мониторинг:**
```bash
# Еженедельная проверка
git ls-remote origin | head -1
git ls-remote github | head -1
# SHA должны совпадать
```
---
## 📝 Быстрая установка
```bash
# На сервере Gitea
sudo su - git
cd /path/to/gitea-repositories/username/configure_nginx_manager.git/hooks/
# Скачайте hook
wget https://raw.githubusercontent.com/username/configure_nginx_manager/main/gitea-hooks/post-receive
# Настройте
nano post-receive
# Измените GITHUB_REPO
# Права
chmod +x post-receive
# Тест
echo "test" | ./post-receive
```
Готово! 🎉

365
docs/ru/INSTALL_GUIDE.md Normal file
View File

@@ -0,0 +1,365 @@
# Руководство по использованию letsencrypt_regru.sh
**Автор:** Фофанов Дмитрий
**Дата:** 28.10.2025
## Описание
`letsencrypt_regru.sh` - это автоматический установщик для Let's Encrypt Manager с интеграцией reg.ru и Nginx Proxy Manager.
Скрипт автоматизирует:
- Установку всех системных зависимостей
- Создание виртуального окружения Python
- Установку Python библиотек (requests, cryptography, certbot)
- Интерактивную настройку конфигурации
- Создание и настройку systemd сервисов
- Настройку автоматического обновления сертификатов
## Требования
- Linux (Debian/Ubuntu, CentOS/RHEL/Fedora)
- Root доступ (sudo)
- Минимум 512MB RAM
- Минимум 1GB свободного места на диске
- Интернет соединение
## Быстрая установка
**Способ 1: Автоматическая установка (рекомендуется)**
Самый быстрый способ - запустить установку напрямую с GitHub:
```bash
sudo bash -c "$(curl -fsSL https://github.com/DFofanov/configure_nginx_manager/raw/refs/heads/master/letsencrypt_regru.sh)"
```
Эта команда:
- Автоматически скачает установочный скрипт
- Запустит его с правами root
- Проведет через интерактивную настройку
**Способ 2: Через клонирование репозитория**
Если вы хотите изучить код перед установкой:
```bash
# 1. Скачайте репозиторий
git clone https://github.com/DFofanov/configure_nginx_manager.git
cd configure_nginx_manager
# 2. Дайте права на выполнение
chmod +x letsencrypt_regru.sh
# 3. Запустите установку
sudo ./letsencrypt_regru.sh
```
## Интерактивная настройка
Во время установки скрипт спросит:
1. **Домен** - ваш основной домен (например, `example.com`)
2. **Email** - для уведомлений Let's Encrypt
3. **Учетные данные reg.ru:**
- Имя пользователя
- Пароль
4. **Wildcard сертификат** - создавать ли `*.example.com` (рекомендуется: Да)
5. **Интеграция с NPM** (опционально):
- Адрес NPM (например, `http://10.10.10.14:81`)
- Email для входа в NPM
- Пароль NPM
## Структура после установки
```
/opt/letsencrypt-regru/ # Приложение
├── letsencrypt_regru_api.py # Основной скрипт
├── venv/ # Виртуальное окружение Python
└── docs/ # Документация
/etc/letsencrypt-regru/ # Конфигурация
└── config.json # Настройки (credentials, домен, NPM)
/var/log/letsencrypt-regru/ # Логи
└── letsencrypt_regru.log
/etc/letsencrypt/live/ # Сертификаты Let's Encrypt
└── example.com/
├── privkey.pem
├── cert.pem
├── chain.pem
└── fullchain.pem
/etc/systemd/system/ # Systemd сервисы
├── letsencrypt-regru.service # Сервис обновления
└── letsencrypt-regru.timer # Таймер (каждые 12 часов)
/usr/local/bin/
└── letsencrypt-regru # Глобальная команда
```
## Использование команды letsencrypt-regru
После установки доступна удобная команда:
```bash
# Проверить срок действия текущего сертификата
letsencrypt-regru --check
# Получить новый сертификат Let's Encrypt
letsencrypt-regru --obtain
# Обновить существующий сертификат
letsencrypt-regru --renew
# Автоматически проверить и обновить при необходимости
letsencrypt-regru --auto
# Создать тестовый самоподписанный сертификат
letsencrypt-regru --test-cert
# Показать справку
letsencrypt-regru --help
```
## Автоматическое обновление
Установщик настраивает systemd timer для автоматической проверки:
```bash
# Проверить статус таймера
systemctl status letsencrypt-regru.timer
# Когда следующий запуск
systemctl list-timers letsencrypt-regru.timer
# Посмотреть историю запусков
journalctl -u letsencrypt-regru
# Следить за логами в реальном времени
journalctl -u letsencrypt-regru -f
```
### Настройки таймера
По умолчанию:
- Первый запуск: через 15 минут после загрузки системы
- Периодичность: каждые 12 часов
- Случайная задержка: до 1 часа (чтобы не создавать нагрузку)
Изменить можно в `/etc/systemd/system/letsencrypt-regru.timer`.
## Редактирование конфигурации
```bash
# Открыть конфигурацию в редакторе
sudo nano /etc/letsencrypt-regru/config.json
# После изменений перезапустите таймер
sudo systemctl restart letsencrypt-regru.timer
```
### Пример config.json
```json
{
"regru_username": "your_username",
"regru_password": "your_password",
"domain": "example.com",
"wildcard": true,
"email": "admin@example.com",
"cert_dir": "/etc/letsencrypt/live",
"log_file": "/var/log/letsencrypt-regru/letsencrypt_regru.log",
"dns_propagation_wait": 60,
"dns_check_attempts": 10,
"dns_check_interval": 10,
"renewal_days": 30,
"npm_enabled": true,
"npm_host": "http://10.10.10.14:81",
"npm_email": "admin@npm.local",
"npm_password": "secure_password"
}
```
## Обновление приложения
```bash
# Скачайте последнюю версию
cd configure_nginx_manager
git pull
# Запустите обновление
sudo ./letsencrypt_regru.sh update
```
Обновление:
- Остановит таймер
- Обновит скрипт
- Обновит Python зависимости
- Перезапустит таймер
## Удаление
```bash
# Полное удаление приложения
sudo ./letsencrypt_regru.sh uninstall
```
Скрипт удалит:
- Приложение из `/opt/letsencrypt-regru/`
- Systemd сервисы
- Глобальную команду
Сертификаты в `/etc/letsencrypt/live/` сохраняются!
Опционально можно удалить:
- Конфигурацию `/etc/letsencrypt-regru/`
- Логи `/var/log/letsencrypt-regru/`
## Просмотр логов
```bash
# Логи systemd (рекомендуется)
journalctl -u letsencrypt-regru -f
# Файл лога
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
# Последние 100 строк
tail -n 100 /var/log/letsencrypt-regru/letsencrypt_regru.log
```
## Устранение проблем
### Проверка установки
```bash
# Проверить наличие команды
which letsencrypt-regru
# Проверить Python окружение
ls -la /opt/letsencrypt-regru/venv/
# Проверить systemd сервисы
systemctl list-unit-files | grep letsencrypt-regru
```
### Ошибки при установке
**Ошибка: "Permission denied"**
```bash
# Запустите с sudo
sudo ./letsencrypt_regru.sh
```
**Ошибка: "Package not found"**
```bash
# Обновите списки пакетов
sudo apt-get update # Debian/Ubuntu
sudo yum update # CentOS/RHEL
```
**Ошибка: "Python module not found"**
```bash
# Переустановите виртуальное окружение
sudo rm -rf /opt/letsencrypt-regru/venv
sudo ./letsencrypt_regru.sh
```
### Проблемы с сертификатами
**Сертификат не создается**
```bash
# Проверьте логи
tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
# Проверьте конфигурацию
cat /etc/letsencrypt-regru/config.json
# Попробуйте вручную
letsencrypt-regru --obtain -v
```
**DNS не обновляется**
```bash
# Увеличьте время ожидания в config.json
"dns_propagation_wait": 120,
"dns_check_attempts": 20
```
### Проблемы с NPM
**Не загружается в NPM**
```bash
# Проверьте доступность NPM
curl http://192.168.10.14:81
# Проверьте учетные данные в config.json
# Попробуйте вручную
letsencrypt-regru --test-cert -v
```
## Поддерживаемые ОС
✅ Debian 10, 11, 12
✅ Ubuntu 20.04, 22.04, 24.04
✅ CentOS 7, 8
✅ RHEL 7, 8, 9
✅ Fedora 35+
## Дополнительные возможности
### Тестовый сертификат
Для тестирования без лимитов Let's Encrypt:
```bash
letsencrypt-regru --test-cert
```
Создаст самоподписанный сертификат на 90 дней.
### Ручной запуск обновления
```bash
# Запустить сервис вручную
sudo systemctl start letsencrypt-regru.service
# Посмотреть статус
systemctl status letsencrypt-regru.service
```
### Изменить периодичность проверки
Отредактируйте `/etc/systemd/system/letsencrypt-regru.timer`:
```ini
[Timer]
# Каждые 6 часов вместо 12
OnUnitActiveSec=6h
```
Затем:
```bash
sudo systemctl daemon-reload
sudo systemctl restart letsencrypt-regru.timer
```
## Безопасность
- Конфигурация с паролями имеет права `600` (только root)
- Приватные ключи сертификатов имеют права `600`
- Все операции выполняются от root
- Логи доступны только root
## Поддержка
- GitHub Issues: https://github.com/YOUR_USERNAME/configure_nginx_manager/issues
- Документация: `/opt/letsencrypt-regru/docs/`
- Email: admin@dfv24.com
---
**Разработано:** Фофанов Дмитрий
**Дата:** 28.10.2025
**Версия:** 2.0

View File

@@ -0,0 +1,154 @@
# Makefile Commands - Quick Reference
## 📋 Категории команд
### 🛠️ Установка и развертывание
```bash
make install # Полная установка приложения
make uninstall # Удаление приложения
make status # Проверка статуса установки
make check-config # Проверка конфигурации
```
### 🔨 Сборка исполняемых файлов
```bash
make build # Собрать для текущей ОС
make build-linux # Собрать для Linux
make build-windows # Собрать для Windows
make build-all # Собрать для всех платформ
```
### 📦 Создание пакетов
```bash
make package-linux # Создать tar.gz для Linux
make package-windows # Создать zip для Windows
make release # Полный цикл релиза
```
### 🧪 Тестирование
```bash
make test-run # Тестовый запуск скрипта
make test-cert # Создать тестовый сертификат
make test-build # Протестировать собранный файл
```
### 🚀 Запуск операций
```bash
make run # Автоматическая проверка и обновление
make obtain # Получить новый сертификат
make renew # Обновить существующий сертификат
```
### 📊 Мониторинг
```bash
make logs # Показать логи
make status # Статус служб
```
### 🧹 Очистка
```bash
make clean # Очистить временные файлы Python
make clean-build # Очистить артефакты сборки
```
### Информация
```bash
make help # Показать справку
make build-info # Информация о среде сборки
```
---
## 🎯 Типовые сценарии
### Первоначальная установка
```bash
sudo make install
sudo make check-config
sudo make test-run
```
### Сборка релиза для GitHub
```bash
make clean-build
make release
# Файлы будут в dist/
```
### Создание тестового окружения
```bash
sudo make install
sudo make test-cert
sudo make status
```
### Обновление сертификата вручную
```bash
sudo make run
sudo make logs
```
### Удаление приложения
```bash
sudo make uninstall
```
---
## 📝 Переменные окружения
Основные переменные определены в Makefile:
```makefile
INSTALL_DIR = /opt/letsencrypt-regru
CONFIG_FILE = /etc/letsencrypt/regru_config.json
LOG_FILE = /var/log/letsencrypt_regru.log
SERVICE_NAME = letsencrypt-regru
PYTHON = python3
```
---
## 🔐 Требуемые права
**Требуют sudo:**
- `make install`
- `make uninstall`
- `make run`
- `make obtain`
- `make renew`
- `make test-run`
- `make test-cert`
**Не требуют sudo:**
- `make build*`
- `make package*`
- `make clean*`
- `make help`
- `make build-info`
---
## 💡 Полезные комбинации
```bash
# Полная переустановка
sudo make uninstall && sudo make install
# Сборка и тестирование
make build && make test-build
# Очистка и релиз
make clean-build && make release
# Проверка после установки
sudo make status && sudo make test-run && sudo make logs
```

View File

@@ -0,0 +1,258 @@
# 📁 Структура проекта configure_nginx_manager
## Основные скрипты
### Python (Рекомендуется)
- **letsencrypt_regru_api.py** (1,411 строк)
- Полнофункциональный Python скрипт
- Прямая работа с API reg.ru
- Интеграция с Nginx Proxy Manager
- Автоматическая проверка и обновление сертификатов
- Генерация тестовых самоподписанных сертификатов
- Поддержка wildcard доменов
### Bash
- **letsencrypt_regru_dns.sh**
- Bash скрипт с certbot-dns-regru плагином
- Простота использования
- Минимальные зависимости
### PowerShell
- **letsencrypt_regru.ps1**
- Windows версия
- Аналогична Bash скрипту
### Тестирование
- **test_certificate.sh**
- Быстрое создание тестовых сертификатов через OpenSSL
- Автономная работа без Python
- Поддержка wildcard доменов
## Автоматизация
### Makefile
- **Makefile** (415 строк)
- `make install` - Полная установка и настройка
- `make uninstall` - Чистое удаление
- `make status` - Проверка состояния
- `make test-cert` - Создание тестового сертификата
- `make obtain` - Получение Let's Encrypt сертификата
- `make renew` - Обновление сертификата
- `make logs` - Просмотр логов
- `make check-config` - Валидация конфигурации
## Конфигурация
### config.json.example
Пример конфигурации со всеми параметрами:
- Учетные данные reg.ru API
- Настройки домена и email
- Параметры обновления (renewal_days)
- Настройки Nginx Proxy Manager
- Пути к директориям и логам
## Документация
### README.md (1,420+ строк)
Основная документация:
- Введение и возможности
- Быстрый старт
- Установка через Makefile
- Создание тестовых сертификатов
- Требования и установка зависимостей
- Настройка и использование
- Интеграция с NPM
- Автоматическая проверка и обновление
- Автоматизация через cron/systemd
- Устранение неполадок
### TESTING_GUIDE.md (370+ строк)
Руководство по тестированию:
- Зачем нужны тестовые сертификаты
- Обход лимитов Let's Encrypt (5 в неделю)
- Быстрый старт с тестовыми сертификатами
- Сравнение методов создания
- Использование в разработке
- Автоматизация тестирования
- Переход с тестовых на production
- Частые вопросы
- Примеры для CI/CD и Docker
### GITEA_SYNC.md
Синхронизация Gitea → GitHub:
- 4 метода синхронизации (Git Hooks, GitHub Actions, Gitea Mirror, Double Remote)
- Пошаговые инструкции установки
- Настройка SSH и токенов
- Webhook интеграция
- Устранение проблем
- Сравнение методов
### CHEATSHEET.md
Быстрая шпаргалка:
- Основные команды
- Workflow разработки
- Сценарии использования
- Частые ошибки и решения
- Проверка и отладка
### PROJECT_STRUCTURE.md (этот файл)
- Описание всех файлов проекта
- Краткая характеристика каждого компонента
### CHANGELOG.md
История изменений:
- Версии и обновления
- Новые возможности
- Исправления
- Roadmap
## Интеграция с Git
### .github/workflows/sync-from-gitea.yml
GitHub Actions для синхронизации:
- Автоматическая проверка каждый час
- Webhook триггер от Gitea
- Ручной запуск
- Merge изменений из Gitea
- Push в GitHub
### gitea-hooks/
Git hooks для Gitea сервера:
**post-receive**
- Автоматический push в GitHub после commit
- Мгновенная синхронизация (< 1 секунды)
- Логирование операций
- Синхронизация тегов
- Поддержка SSH и HTTPS
**README.md**
- Инструкции по установке hook
- Настройка аутентификации
- Устранение проблем
## Вспомогательные файлы
### Markdown документы
- **Add Let's Encrypt Certificate для провайдера reg.ru.md**
- Первоначальные инструкции
- **Создание и продление SSL сертификата.md**
- Дополнительная информация о процессе
## Возможности
### ✅ Основные
- [x] Создание Let's Encrypt сертификатов через reg.ru DNS API
- [x] Wildcard сертификаты (*.domain.com)
- [x] Автоматическое обновление сертификатов
- [x] DNS-01 валидация
- [x] Интеграция с Nginx Proxy Manager
- [x] Автоматическая загрузка/обновление в NPM
### ✅ Продвинутые
- [x] Автоматическая проверка срока действия
- [x] Настраиваемый порог обновления (renewal_days)
- [x] Systemd service + timer
- [x] Cron автоматизация
- [x] Подробное логирование
- [x] Валидация конфигурации
### 🆕 Тестирование
- [x] Генерация самоподписанных тестовых сертификатов
- [x] Обход лимитов Let's Encrypt (5/неделю)
- [x] Мгновенное создание без DNS
- [x] Интеграция тестовых сертификатов с NPM
- [x] Полная совместимость структуры с Let's Encrypt
### 🔄 Синхронизация репозиториев
- [x] Автоматическая синхронизация Gitea GitHub
- [x] Git Hooks (мгновенная синхронизация)
- [x] GitHub Actions (проверка каждый час)
- [x] Webhook интеграция
- [x] SSH и HTTPS аутентификация
## Установка
### Быстрая установка
```bash
sudo make install
sudo nano /etc/letsencrypt/regru_config.json
sudo make test-cert # Для тестирования
sudo make obtain # Для production
```
### Структура после установки
```
/opt/letsencrypt-regru/
├── letsencrypt_regru_api.py
/etc/letsencrypt/
├── regru_config.json
└── live/
└── example.com/
├── privkey.pem
├── cert.pem
├── fullchain.pem
└── chain.pem
/etc/systemd/system/
├── letsencrypt-regru.service
└── letsencrypt-regru.timer
/var/log/letsencrypt/
└── letsencrypt_regru.log
```
## Использование
### Тестирование (без лимитов)
```bash
sudo make test-cert # Создать тестовый сертификат
sudo make status # Проверить статус
```
### Production
```bash
sudo make obtain # Получить Let's Encrypt сертификат
sudo make renew # Обновить сертификат
sudo make run # Автоматический режим
```
### Мониторинг
```bash
sudo make logs # Просмотр логов
sudo make status # Статус служб
sudo make check-config # Проверка конфигурации
```
## Технологии
- **Python 3.6+** - Основной язык
- **Certbot** - Let's Encrypt клиент
- **requests** - HTTP запросы к API
- **cryptography** - Генерация тестовых сертификатов
- **systemd** - Автоматизация запуска
- **cron** - Альтернативная автоматизация
- **Make** - Управление установкой
- **OpenSSL** - Альтернативная генерация сертификатов
## Лицензия
Open Source - свободное использование
## Автор
Фофанов Дмитрий @ 2025
## Поддержка
См. документацию:
- [README.md](README.md) - Основное руководство
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - Руководство по тестированию
---
**Версия**: 2.1
**Дата**: 27 октября 2025
**Статус**: Production Ready

111
docs/ru/QUICKSTART_BUILD.md Normal file
View File

@@ -0,0 +1,111 @@
# 🎯 Быстрый старт - Сборка исполняемых файлов
Это краткое руководство для тех, кто хочет быстро собрать исполняемый файл.
## Для Linux
### 1. Установите зависимости
```bash
sudo apt-get update
sudo apt-get install -y python3 python3-pip git make
```
### 2. Клонируйте репозиторий
```bash
git clone https://github.com/DFofanov/configure_nginx_manager.git
cd configure_nginx_manager
```
### 3. Соберите
```bash
make build-linux
```
### 4. Результат
```bash
ls -lh dist/letsencrypt-regru
# Исполняемый файл готов!
```
### 5. Установите (опционально)
```bash
sudo cp dist/letsencrypt-regru /usr/local/bin/
sudo chmod +x /usr/local/bin/letsencrypt-regru
```
### 6. Используйте
```bash
letsencrypt-regru --help
```
---
## Для Windows
### 1. Установите Python
Скачайте с [python.org](https://www.python.org/downloads/) и установите
### 2. Клонируйте репозиторий
```powershell
git clone https://github.com/DFofanov/configure_nginx_manager.git
cd configure_nginx_manager
```
### 3. Соберите
```powershell
make build-windows
```
### 4. Результат
```powershell
dir dist\letsencrypt-regru.exe
# Исполняемый файл готов!
```
### 5. Используйте
```powershell
.\dist\letsencrypt-regru.exe --help
```
---
## Создание релиза для обеих платформ
```bash
# Это создаст пакеты для Linux и Windows
make release
```
**Результат в `dist/`:**
- `letsencrypt-regru-linux-x86_64.tar.gz`
- `letsencrypt-regru-windows-x86_64.zip`
---
## Полезные команды
```bash
# Показать справку по всем командам
make help
# Информация о среде сборки
make build-info
# Протестировать собранный файл
make test-build
# Очистить артефакты
make clean-build
```
---
## ❓ Проблемы?
См. [BUILD_GUIDE.md](BUILD_GUIDE.md) для подробных инструкций и решения проблем.
---
**Размер файла:** ~40-60 MB (включая Python runtime)
**Время сборки:** ~2-5 минут
**Требования:** Python 3.8+, PyInstaller

173
docs/ru/RELEASE_GUIDE.md Normal file
View File

@@ -0,0 +1,173 @@
# 🎯 Краткое руководство: Автоматические релизы
## Для GitHub
### 1. Создание релиза
```bash
# Создать тег
git tag -a v1.0.0 -m "Release version 1.0.0"
# Отправить тег
git push origin v1.0.0
```
### 2. Что произойдет автоматически
GitHub Actions запустит `.github/workflows/build-release.yml`:
1. ✅ Сборка Linux версии (Ubuntu runner)
2. ✅ Сборка Windows версии (Windows runner)
3. ✅ Создание пакетов
4. ✅ Генерация SHA256 checksums
5. ✅ Создание GitHub Release
6. ✅ Загрузка артефактов
### 3. Результат
Релиз появится на: `https://github.com/USER/REPO/releases/tag/v1.0.0`
**Файлы:**
- `letsencrypt-regru-linux-x86_64.tar.gz`
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256`
- `letsencrypt-regru-windows-x86_64.zip`
- `letsencrypt-regru-windows-x86_64.zip.sha256`
---
## Для Gitea
### 1. Настройка (один раз)
#### Включить Actions в Gitea:
Отредактируйте `app.ini`:
```ini
[actions]
ENABLED = true
DEFAULT_ACTIONS_URL = https://gitea.com
```
#### Установить Gitea Runner:
```bash
# Скачать
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner
chmod +x act_runner
# Зарегистрировать
./act_runner register --no-interactive \
--instance https://your-gitea.com \
--token YOUR_RUNNER_TOKEN
# Запустить
./act_runner daemon
```
### 2. Создание релиза
```bash
# Создать тег
git tag -a v1.0.0 -m "Release version 1.0.0"
# Отправить тег
git push origin v1.0.0
```
### 3. Что произойдет
Gitea Actions запустит `.gitea/workflows/release.yml`:
1. ✅ Сборка Linux версии
2. ✅ Сборка Windows версии
3. ✅ Создание пакетов
4. ✅ Генерация SHA256 + MD5 checksums
5. ✅ Создание Gitea Release
6. ✅ Детальные release notes
### 4. Результат
Релиз появится на: `https://your-gitea.com/USER/REPO/releases/tag/v1.0.0`
---
## 🔧 Проверка перед релизом
```bash
# 1. Локальная сборка
make clean-build
make release
# 2. Тестирование
make test-build
# 3. Проверка файлов
ls -lh dist/
# 4. Если все OK - создать тег
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
```
---
## 📊 Мониторинг
### GitHub:
`https://github.com/USER/REPO/actions`
### Gitea:
`https://your-gitea.com/USER/REPO/actions`
---
## 🐛 Если что-то пошло не так
### Удалить тег и релиз:
```bash
# Удалить локальный тег
git tag -d v1.0.0
# Удалить удаленный тег
git push --delete origin v1.0.0
# Удалить релиз вручную через веб-интерфейс
```
### Пересоздать релиз:
```bash
# Исправить проблему
git commit -am "Fix build"
# Пересоздать тег
git tag -a v1.0.0 -m "Release 1.0.0" --force
git push origin v1.0.0 --force
```
---
## 📝 Semantic Versioning
```bash
# Major (несовместимые изменения)
git tag v2.0.0
# Minor (новые функции)
git tag v1.1.0
# Patch (исправления)
git tag v1.0.1
# Pre-release
git tag v1.0.0-beta.1
git tag v1.0.0-rc.1
```
---
**См. также:**
- [.gitea/README.md](.gitea/README.md) - Полная документация по Gitea Actions
- [BUILD_GUIDE.md](BUILD_GUIDE.md) - Руководство по сборке

View File

@@ -0,0 +1,170 @@
# Автоматизация SSL сертификатов Let's Encrypt для reg.ru
Набор скриптов для автоматического создания и обновления SSL сертификатов Let's Encrypt с использованием DNS-валидации через API reg.ru.
## 📁 Содержимое проекта
- **letsencrypt_regru_dns.sh** - Bash скрипт (Linux) с certbot-dns-regru
- **letsencrypt_regru_api.py** - Python скрипт с прямым API интеграцией
- **letsencrypt_regru.ps1** - PowerShell скрипт (Windows)
- **config.json.example** - Пример файла конфигурации
- **USAGE.md** - Подробная инструкция по использованию
## 🚀 Быстрый старт
### Linux (Bash)
```bash
# 1. Отредактируйте конфигурацию в скрипте
nano letsencrypt_regru_dns.sh
# 2. Установите права
chmod +x letsencrypt_regru_dns.sh
# 3. Запустите
sudo ./letsencrypt_regru_dns.sh
```
### Linux (Python)
```bash
# 1. Создайте конфигурацию
sudo python3 letsencrypt_regru_api.py --create-config /etc/letsencrypt/regru_config.json
# 2. Отредактируйте конфигурацию
sudo nano /etc/letsencrypt/regru_config.json
# 3. Получите сертификат
sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --obtain
```
### Windows (PowerShell)
```powershell
# 1. Создайте файл конфигурации config.json на основе config.json.example
# 2. Запустите скрипт
.\letsencrypt_regru.ps1 -ConfigFile .\config.json
```
## ⚙️ Конфигурация
Отредактируйте `config.json`:
```json
{
"regru_username": аш_логин",
"regru_password": аш_пароль",
"domain": "dfv24.com",
"wildcard": true,
"email": "admin@dfv24.com"
}
```
## 📋 Требования
### Linux
- certbot
- Python 3.6+
- pip3
- requests, cryptography (Python модули)
- certbot-dns-regru (опционально)
### Windows
- certbot
- PowerShell 5.1+
- openssl (для проверки сертификатов)
## 🔄 Автоматическое обновление
### Через cron (Linux)
```bash
# Добавьте в crontab
sudo crontab -e
# Проверка каждый день в 3:00
0 3 * * * /usr/bin/python3 /path/to/letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
```
### Через Task Scheduler (Windows)
1. Откройте Task Scheduler
2. Создайте новую задачу
3. Триггер: Ежедневно в 3:00
4. Действие: Запуск PowerShell скрипта
## 📖 Функции
✅ Создание wildcard сертификатов (*.domain.com)
✅ Автоматическая DNS-валидация через API reg.ru
✅ Проверка срока действия сертификата
✅ Автоматическое обновление перед истечением
✅ Перезагрузка веб-сервера после обновления
✅ Подробное логирование всех операций
## 🔧 Использование с Nginx Proxy Manager
После получения сертификата:
1. Войдите в NPM: http://192.168.10.14:81/
2. SSL Certificates → Add SSL Certificate → Custom
3. Вставьте содержимое:
- Certificate Key: `/etc/letsencrypt/live/domain.com/privkey.pem`
- Certificate: `/etc/letsencrypt/live/domain.com/fullchain.pem`
## 📝 Логи
- Bash: `/var/log/letsencrypt_regru.log`
- Python: `/var/log/letsencrypt_regru.log`
- PowerShell: `.\letsencrypt_regru.log`
- Certbot: `/var/log/letsencrypt/letsencrypt.log`
## 🆘 Устранение неполадок
### Ошибка аутентификации API
- Проверьте учетные данные reg.ru
- Убедитесь, что домен под вашим управлением
### DNS запись не распространяется
- Увеличьте `dns_propagation_wait` до 120 секунд
- Проверьте DNS: `nslookup -type=TXT _acme-challenge.domain.com`
### Certbot не найден
```bash
# Ubuntu/Debian
sudo apt-get install certbot
# Или через snap
sudo snap install --classic certbot
```
## 📚 Документация
Подробная документация в файле [USAGE.md](USAGE.md)
## 🔐 Безопасность
- Храните учетные данные в безопасности
- Используйте `chmod 600` для конфигурационных файлов
- Регулярно обновляйте пароли
## ⚠️ Важно
- Let's Encrypt сертификаты действительны 90 дней
- Рекомендуется настроить автоматическое обновление
- Для wildcard сертификатов требуется DNS-валидация
## 📞 Поддержка
- [Документация reg.ru API](https://www.reg.ru/support/api)
- [Документация Let's Encrypt](https://letsencrypt.org/docs/)
- [Certbot Documentation](https://certbot.eff.org/docs/)
## 📄 Лицензия
Скрипты предоставляются "как есть" для свободного использования.
---
**Успешной автоматизации! 🔒**

382
docs/ru/TESTING_GUIDE.md Normal file
View File

@@ -0,0 +1,382 @@
# 🧪 Руководство по тестированию SSL сертификатов
## Зачем нужны тестовые сертификаты?
Let's Encrypt имеет **строгие ограничения**:
- ⚠️ Максимум **5 сертификатов в неделю** на один домен
- ⚠️ Максимум **50 сертификатов в неделю** на аккаунт
- ⚠️ **Бан на 1 неделю** при превышении лимита
**Решение**: Используйте самоподписанные тестовые сертификаты для разработки!
---
## Быстрый старт
### Вариант 1: Через Makefile (рекомендуется)
```bash
# После установки скрипта (make install)
sudo make test-cert
```
**Результат**: Создан сертификат в `/etc/letsencrypt/live/ваш-домен/`
### Вариант 2: Через Python скрипт
```bash
sudo python3 letsencrypt_regru_api.py \
--config /etc/letsencrypt/regru_config.json \
--test-cert -v
```
### Вариант 3: Через Bash скрипт (автономный)
```bash
# Простой домен
sudo ./test_certificate.sh example.com no
# С wildcard
sudo ./test_certificate.sh example.com yes
```
---
## Сравнение методов
| Метод | Скорость | Требования | NPM интеграция | Лимиты |
|-------|----------|------------|----------------|--------|
| **Let's Encrypt** | 2-5 минут | Internet, DNS | ✅ Да | ⚠️ 5/неделю |
| **Тестовый (Python)** | 1-2 секунды | Только Python | ✅ Да | ✅ Нет |
| **Тестовый (Bash)** | 1-2 секунды | Только OpenSSL | ❌ Ручная | ✅ Нет |
---
## Детальная инструкция
### 1. Подготовка конфигурации
```bash
# Создать конфигурацию
sudo nano /etc/letsencrypt/regru_config.json
```
```json
{
"domain": "test.example.com",
"wildcard": true,
"cert_dir": "/etc/letsencrypt/live",
"npm_enabled": true,
"npm_host": "https://npm.example.com",
"npm_email": "admin@example.com",
"npm_password": "your_password"
}
```
### 2. Создание тестового сертификата
```bash
sudo make test-cert
```
### 3. Проверка созданных файлов
```bash
ls -la /etc/letsencrypt/live/test.example.com/
# Должны быть:
# - privkey.pem (приватный ключ)
# - cert.pem (сертификат)
# - fullchain.pem (полная цепочка)
# - chain.pem (CA цепочка)
```
### 4. Просмотр информации о сертификате
```bash
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -text -noout
```
---
## Использование в Nginx
### Прямое использование
```nginx
server {
listen 443 ssl;
server_name test.example.com;
ssl_certificate /etc/letsencrypt/live/test.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/test.example.com/privkey.pem;
# ... остальная конфигурация
}
```
### Через Nginx Proxy Manager
Если `npm_enabled: true` в конфигурации, сертификат автоматически загрузится в NPM.
**Проверка в NPM:**
1. Откройте веб-интерфейс NPM
2. Перейдите в **SSL Certificates**
3. Найдите ваш домен в списке
4. ⚠️ Будет помечен как "Custom" (не Let's Encrypt)
---
## Автоматизация тестирования
### Скрипт для CI/CD
```bash
#!/bin/bash
# test_ssl_integration.sh
set -e
echo "🧪 Тестирование SSL интеграции..."
# 1. Создать тестовый сертификат
sudo python3 letsencrypt_regru_api.py \
--config test_config.json \
--test-cert
# 2. Проверить файлы
if [ ! -f "/etc/letsencrypt/live/test.example.com/fullchain.pem" ]; then
echo "❌ Сертификат не создан"
exit 1
fi
# 3. Проверить валидность
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -noout -checkend 0
if [ $? -eq 0 ]; then
echo "✅ Сертификат валиден"
else
echo "❌ Сертификат невалиден"
exit 1
fi
# 4. Проверить загрузку в NPM (опционально)
# ... ваша проверка через API NPM
echo "✅ Все тесты пройдены"
```
### Makefile для тестирования
```makefile
.PHONY: test-ssl test-npm test-all
test-ssl:
@echo "Создание тестового сертификата..."
sudo make test-cert
@echo "Проверка файлов..."
test -f /etc/letsencrypt/live/$(DOMAIN)/fullchain.pem
@echo "✅ SSL тест пройден"
test-npm:
@echo "Проверка интеграции с NPM..."
# Ваши проверки API NPM
@echo "✅ NPM тест пройден"
test-all: test-ssl test-npm
@echo "✅ Все тесты пройдены"
```
---
## Переход на production
### Шаг 1: Тестирование
```bash
# 1. Создать тестовый сертификат
sudo make test-cert
# 2. Проверить работу с NPM
# Открыть https://ваш-домен и проверить
# 3. Убедиться что все работает
```
### Шаг 2: Переключение на Let's Encrypt
```bash
# 1. Удалить тестовый сертификат
sudo rm -rf /etc/letsencrypt/live/ваш-домен/
# 2. Получить настоящий сертификат
sudo make obtain
# 3. Проверить обновление в NPM
sudo make status
```
---
## Частые вопросы
### Q: Почему браузер показывает предупреждение?
**A:** Самоподписанные сертификаты не доверяются браузерами. Это нормально для тестирования.
Чтобы избежать предупреждения в браузере (только для локального тестирования):
1. Chrome: `chrome://flags/#allow-insecure-localhost`
2. Firefox: Нажмите "Advanced" → "Accept the Risk"
### Q: Можно ли использовать для production?
**A:****НЕТ!** Тестовые сертификаты только для разработки и тестирования.
### Q: Как часто можно создавать тестовые сертификаты?
**A:** ✅ Неограниченно! Нет никаких лимитов.
### Q: Загружаются ли в NPM автоматически?
**A:** ✅ Да, если `npm_enabled: true` в конфигурации.
### Q: Работают ли с wildcard доменами?
**A:** ✅ Да! Просто установите `"wildcard": true` в конфигурации.
### Q: Как проверить срок действия?
```bash
openssl x509 -in /etc/letsencrypt/live/ваш-домен/cert.pem -noout -dates
```
### Q: Как изменить срок действия?
Отредактируйте `validity_days` в функции `generate_self_signed_certificate()`:
```python
validity_days: int = 365 # Изменить на нужное количество дней
```
---
## Устранение проблем
### Ошибка: Permission denied
```bash
# Запускайте с sudo
sudo make test-cert
```
### Ошибка: Module 'cryptography' not found
```bash
# Установите зависимости
sudo pip3 install cryptography
```
### NPM не показывает сертификат
1. Проверьте настройки NPM в конфигурации
2. Проверьте логи: `sudo make logs`
3. Попробуйте загрузить вручную через веб-интерфейс NPM
### Сертификат не создается
```bash
# Проверьте права
ls -la /etc/letsencrypt/live/
# Создайте директорию вручную
sudo mkdir -p /etc/letsencrypt/live/
# Проверьте конфигурацию
sudo make check-config
```
---
## Примеры использования
### Разработка с Docker
```dockerfile
FROM nginx:alpine
# Копировать тестовый сертификат
COPY test-certs/ /etc/nginx/ssl/
# Конфигурация nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 443
```
### Локальное тестирование
```bash
# Создать сертификат для localhost
sudo python3 letsencrypt_regru_api.py --test-cert
# Добавить в /etc/hosts
echo "127.0.0.1 test.example.com" | sudo tee -a /etc/hosts
# Запустить nginx
sudo nginx -t && sudo nginx -s reload
# Открыть в браузере
open https://test.example.com
```
### Автоматическое тестирование перед deployment
```bash
#!/bin/bash
# pre-deploy.sh
# Тестовая проверка SSL
sudo make test-cert
if [ $? -eq 0 ]; then
echo "✅ Тестовый сертификат создан успешно"
echo "✅ Готово к созданию production сертификата"
sudo make obtain
else
echo "❌ Ошибка при создании тестового сертификата"
exit 1
fi
```
---
## Дополнительные ресурсы
- 📘 [Let's Encrypt Rate Limits](https://letsencrypt.org/docs/rate-limits/)
- 📘 [OpenSSL Documentation](https://www.openssl.org/docs/)
- 📘 [Nginx Proxy Manager Docs](https://nginxproxymanager.com/guide/)
---
## Итоговая шпаргалка
```bash
# Установка
sudo make install
# Конфигурация
sudo nano /etc/letsencrypt/regru_config.json
# Создать тестовый сертификат
sudo make test-cert
# Проверить
sudo make check-config
sudo make status
# Переход на production
sudo rm -rf /etc/letsencrypt/live/домен/
sudo make obtain
# Автоматическое обновление
sudo make run
```
**Готово!** 🎉 Теперь вы можете тестировать SSL сертификаты без ограничений!

View File

@@ -0,0 +1,79 @@
# Подробная инструкция по настройке Nginx Proxy Manager с одним глобальным SSL сертификатом для всех доменов dfv24.com
## Предпосылки
- Установлен и запущен [Nginx Proxy Manager](http://192.168.10.14:81/)
- Основной домен: dfv24.com
- Хостинг и DNS записи домена находятся на reg.ru
- Нужно использовать один SSL сертификат (например, wildcard) для всех поддоменов dfv24.com
---
## Шаг 1. Покупка и получение SSL Wildcard сертификата для dfv24.com
1. На reg.ru или любом другом удостоверяющем центре (CA) закажите wildcard сертификат на домен вида `*.dfv24.com`.
2. Получите файлы сертификата:
- Главный сертификат (CRT)
- Промежуточные сертификаты (CA Bundle)
- Приватный ключ (KEY)
---
## Шаг 2. Импорт вашего SSL сертификата в Nginx Proxy Manager
1. Авторизуйтесь в Nginx Proxy Manager на http://192.168.10.14:81/
2. Перейдите в раздел **SSL Certificates** → кнопку **Add SSL Certificate**
3. Выберите **Custom** (пользовательский сертификат)
4. В поля вставьте:
- **Certificate** — основной CRT + CA Bundle (если CA Bundle раздельно, склейте в один файл или вставляйте последовательно)
- **Key** — содержимое приватного ключа
- Имя сертификата задайте, например, `dfv24_wildcard`
5. Сохраните
---
## Шаг 3. Настройка прокси-хостов с использованием глобального сертификата
1. Перейдите в **Proxy Hosts****Add Proxy Host**
2. Заполните поля:
- **Domain Names**: Например, `sub1.dfv24.com` (для первого поддомена)
- **Scheme**: http или https, в зависимости от бекенда
- **Forward Hostname / IP**: IP или DNS адрес вашего внутреннего сервиса
- **Forward Port**: порт сервиса (например, 80 или 443)
3. Включите **SSL** → Отметьте **Use a shared SSL certificate** (если такая опция доступна) или выберите ранее импортированный сертификат из списка
4. Активируйте: **Block Common Exploits**, **Websockets Support**, выставьте Redirect HTTP to HTTPS, если требуется
5. Сохраните прокси-хост
6. Повторите для всех поддоменов, указывая нужные домены и выбирая тот же wildcard SSL сертификат
---
## Шаг 4. Настройка DNS записей на reg.ru
1. Войдите в панель управления доменом на reg.ru
2. Создайте или отредактируйте DNS записи типа A:
- `dfv24.com` → IP вашего Nginx Proxy Manager (например, 192.168.10.14)
- `*.dfv24.com` → тот же IP или конкретные поддомены, если есть специальные
3. Сохраните изменения
4. Дождитесь обновления DNS (от нескольких минут до 24 часов)
---
## Шаг 5. Тест и проверка работы
1. В браузере откройте любой из поддоменов `https://sub1.dfv24.com`
2. Сертификат должен быть валидным, выданным на wildcard `*.dfv24.com`
3. Проверьте работу прокси и корректность подстановки сертификата
4. При необходимости проверьте логи Nginx Proxy Manager и исправьте ошибки
---
## Дополнительно
- Если в Nginx Proxy Manager нет GUI опции выбора общего сертификата, можно вручную сконфигурировать конфиги через директорий `/data/nginx/proxy_host` и прописать SSL сертификат для всех хостов.
- При обновлении сертификата — повторно импортировать его в Nginx Proxy Manager.
- Можно использовать LetsEncrypt для автоматического получения wildcard сертификата с помощью DNS-валидации (если поддерживается вашим DNS-провайдером).
---
# Итог
Используйте один wildcard сертификат для всех поддоменов, импортируйте его как пользовательский сертификат в Nginx Proxy Manager, при создании прокси-хостов выбирайте его в настройках SSL. Управляйте DNS записями на reg.ru, направляя domен на IP Nginx Proxy Manager.
Это позволит юридически использовать единый сертификат для всех сервисов с различными поддоменами под вашим доменом dfv24.com.

View File

@@ -0,0 +1,86 @@
# Инструкция по созданию wildcard сертификата *.dfv24.com в Nginx Proxy Manager и настройке автоматического продления SSL
---
## Шаг 1. Подготовка
- Убедитесь, что Nginx Proxy Manager (NPM) установлен и доступен по адресу http://192.168.10.14:81/
- У вас есть доступ к DNS-записям домена dfv24.com в панели управления reg.ru или у другого регистратора
---
## Шаг 2. Создание Wildcard SSL сертификата в Nginx Proxy Manager
1. Войдите в админку Nginx Proxy Manager по адресу http://192.168.10.14:81/
2. Перейдите в раздел **SSL Certificates** → нажмите кнопку **Add SSL Certificate**
3. Выберите пункт **Let's Encrypt**
4. Заполните поля:
- **Domain Names:**
Введите `*.dfv24.com` — для wildcard сертификата
Также рекомендуется добавить основной домен `dfv24.com` (через запятую или в новом поле)
- **Email Address:**
Укажите ваш Email для уведомлений от Let's Encrypt (обязательно)
- **HTTP Challenge:**
Оставьте проверку HTTP, если NPM доступен из интернета по порту 80 и 443, или настройте DNS Challenge если поддерживается вашим DNS
5. Отметьте галочку "Agree to the Let's Encrypt Terms of Service"
6. Нажмите **Save**
- NPM начнёт процесс получения сертификата с проверкой домена.
- При успешном запросе сертификата вы увидите новый сертификат в списке.
---
## Шаг 3. Настройка автоматического продления
- Nginx Proxy Manager автоматически заботится о продлении сертификатов Let's Encrypt.
- Для этого сервер должен быть доступен из интернета по портам 80 и 443, и DNS-записи правильно указывать на ваш сервер.
- NPM периодически (обычно за 30 дней до окончания) запрашивает обновление сертификата.
- В случае использования DNS Challenge необходимо чтобы в NPM была настроена интеграция с DNS провайдером (если поддерживается).
---
## Шаг 4. Использование wildcard сертификата в Proxy Hosts
1. Перейдите в **Proxy Hosts** → Создайте или отредактируйте запись прокси
2. В поле **Domain Names** укажите нужный поддомен из dfv24.com, например:
`api.dfv24.com` или `www.dfv24.com`
3. В разделе **SSL** выберите ваш wildcard сертификат `*.dfv24.com`, который вы получили на шаге 2
4. Включите опции:
- Use SSL
- Force SSL
- HSTS (при необходимости)
5. Сохраните изменения.
---
## Шаг 5. Проверка
1. Проверьте, что для всех поддоменов используется единый сертификат
2. Посетите https://api.dfv24.com или другие поддомены из браузера
3. Убедитесь, что сертификат валиден, не просрочен и выдан на *.dfv24.com
4. Проверяйте в разделе SSL Certificates статус продления сертификата
---
## Дополнительно
- Если Let's Encrypt не может выполнить HTTP Challenge из-за закрытого порта, настройте DNS Challenge (может потребоваться ключ API DNS провайдера)
- Для безопасности и уведомлений держите Email в актуальном состоянии
- Проверяйте логи Nginx Proxy Manager для выявления ошибок продления
---
# Итог
Nginx Proxy Manager позволяет легко получать и автоматически обновлять wildcard SSL сертификаты для домена *.dfv24.com с помощью Let's Encrypt.
Главное — правильно настроить DNS записи и обеспечить интернет доступ на HTTP/HTTPS порты.
Далее используйте один глобальный сертификат для всех ваших поддоменов через настройки Proxy Hosts.