diff --git a/Build_and_Release.md b/Build_and_Release.md index 76c7ae2..9fcdb51 100644 --- a/Build_and_Release.md +++ b/Build_and_Release.md @@ -53,3 +53,766 @@ Для запуска через Makefile нужен токен (любой из): `DFGIT_TOKEN` / `GIT_TOKEN` / `GITEA_TOKEN` / `GITEA_ACCESS_TOKEN`. Makefile отправляет запрос на `DFGIT_URL` (по умолчанию `https://gitea.example.com`) в репозиторий `DFGIT_REPO`. + + +--- + +## Appendix (migrated from docs/QUICKSTART_BUILD.md) + + +## 🎯 Быстрый старт - Сборка исполняемых файлов + +Это краткое руководство для тех, кто хочет быстро собрать исполняемый файл. + +### Для 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_and_Release.md) для подробных инструкций и решения проблем. + +--- + +**Размер файла:** ~40-60 MB (включая Python runtime) +**Время сборки:** ~2-5 минут +**Требования:** Python 3.8+, PyInstaller + + + +--- + +## Appendix (migrated from docs/BUILD_GUIDE.md) + + +## 🔨 Руководство по сборке исполняемых файлов + +Данное руководство описывает процесс компиляции 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 + + + +--- + +## Appendix (migrated from docs/RELEASE_GUIDE.md) + + +## 🎯 Краткое руководство: Автоматические релизы + +### Для 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_and_Release.md) - Руководство по сборке + diff --git a/Changelog.md b/Changelog.md index e49a43b..ed979ab 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,6 @@ -# Changelog +# Changelog -Краткое резюме по основным версиям (подробности — в `docs/ru/CHANGELOG.md`). +Краткое резюме по основным версиям (подробности — ниже на этой странице). ## 2.1.0 (2025‑10‑27) @@ -15,3 +15,164 @@ ## 1.0.0 (2025‑10‑26) - Первый релиз: LE+reg.ru DNS-01, bash/ps1 версии + + +--- + +## Appendix (migrated from docs/CHANGELOG.md) + + +## 📋 Журнал изменений (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**: Исправления багов + diff --git a/Commands.md b/Commands.md index 4892e47..c5c4529 100644 --- a/Commands.md +++ b/Commands.md @@ -102,3 +102,460 @@ DFGIT_TOKEN="" make deploy-service REF=master - systemd timer или cron → `letsencrypt-regru --auto` Если используете NPM — см. [Nginx_Proxy_Manager](Nginx_Proxy_Manager.md). + + +--- + +## Appendix (migrated from docs/CHEATSHEET.md) + + +## ⚡ Шпаргалка по 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 +``` + +--- + +### 📋 Основные команды + +#### Команды letsencrypt-regru + +| Команда | Описание | Лимиты | Использование | +|---------|----------|--------|---------------| +| `--check` | Проверить срок действия | - | Мониторинг | +| `--obtain` | Получить новый сертификат | ⚠️ 5/неделю | Первое создание | +| `--renew` | Обновить существующий | ⚠️ 5/неделю | Продление | +| `--auto` | Авто-проверка и обновление | ⚠️ 5/неделю | Cron/systemd | +| `--test-cert` | Тестовый сертификат | ✅ Нет | Разработка | +| `--test-api` | Проверить API reg.ru | - | Диагностика | +| `--test-dns` | Тест создания DNS записи | - | Проверка перед SSL | +| `--help` | Справка | - | Помощь | +| `-v` | Подробный вывод | - | Отладка | + +#### Команды Makefile + +| Команда | Описание | Эквивалент | +|---------|----------|------------| +| `make test-cert` | Тестовый сертификат | `letsencrypt-regru --test-cert` | +| `make obtain` | Let's Encrypt новый | `letsencrypt-regru --obtain` | +| `make renew` | Обновить существующий | `letsencrypt-regru --renew` | +| `make run` | Авто-режим | `letsencrypt-regru --auto` | +| `make status` | Статус системы | - | +| `make logs` | Показать логи | `journalctl -u letsencrypt-regru` | +| `make check-config` | Проверить конфигурацию | - | + +#### Команды letsencrypt_regru.sh + +| Команда | Описание | +|---------|----------| +| `sudo bash letsencrypt_regru.sh install` | Установить приложение | +| `sudo bash letsencrypt_regru.sh update` | Обновить приложение | +| `sudo bash letsencrypt_regru.sh uninstall` | Удалить приложение | + +--- + +### 📝 Конфигурация + +#### Минимальная (тестирование) +```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 + + + +--- + +## Appendix (migrated from docs/MAKEFILE_COMMANDS.md) + + +## 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 +``` + diff --git a/Gitea_Sync.md b/Gitea_Sync.md index 3288441..30e699a 100644 --- a/Gitea_Sync.md +++ b/Gitea_Sync.md @@ -1,4 +1,4 @@ -# Синхронизация Gitea → GitHub +# Синхронизация Gitea → GitHub Проект описывает несколько способов синхронизировать репозиторий из Gitea в GitHub после push. @@ -26,4 +26,437 @@ - workflow по расписанию/ручному триггеру - опционально webhook из Gitea -Подробные пошаговые инструкции — в исходном документе `docs/ru/GITEA_SYNC.md`. +Подробные пошаговые инструкции — см. Appendix ниже. + + +--- + +## Appendix (migrated from docs/GITEA_SYNC.md) + + +## 🔄 Синхронизация 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 +``` + +Готово! 🎉 + diff --git a/Home.md b/Home.md index 6c889e8..599991a 100644 --- a/Home.md +++ b/Home.md @@ -1,4 +1,4 @@ -# SSL Certificate Manager (Let's Encrypt + reg.ru) — Wiki (RU) +# SSL Certificate Manager (Let's Encrypt + reg.ru) — Wiki (RU) Это Wiki проекта **configure_nginx_manager**: автоматическое получение и продление SSL-сертификатов Let's Encrypt через **DNS-01** (API **reg.ru**) с опциональной синхронизацией сертификатов в **Nginx Proxy Manager (NPM)**. @@ -57,4 +57,323 @@ --- -Источник: документация в `docs/ru/` и актуальное поведение CLI. +Источник: страницы Wiki этого репозитория и актуальное поведение CLI. + + +--- + +## Appendix (migrated from docs/DESCRIPTION.md) + + +## 🔒 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.md) - Руководство по тестированию +- [GITEA_SYNC.md](Gitea_Sync.md) - Синхронизация Gitea → GitHub +- [CHEATSHEET.md](Commands.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.md) - Testing guide +- [GITEA_SYNC.md](Gitea_Sync.md) - Gitea → GitHub sync +- [CHEATSHEET.md](Commands.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/ + + + +--- + +## Appendix (migrated from docs/SSL_SCRIPTS_README.md) + + +## Автоматизация 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": "example.com", + "wildcard": true, + "email": "admin@example.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.0.2.1: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/) + +### 📄 Лицензия + +Скрипты предоставляются "как есть" для свободного использования. + +--- + +**Успешной автоматизации! 🔒** + diff --git a/Installation.md b/Installation.md index d2fbe5a..d3f9e75 100644 --- a/Installation.md +++ b/Installation.md @@ -1,4 +1,4 @@ -# Установка +# Установка Есть два основных пути установки: @@ -57,3 +57,426 @@ - `letsencrypt-regru --test-dns -v` Если ловите ошибку `Access to API from this IP denied`, см. [RegRu_API_Troubleshooting](RegRu_API_Troubleshooting.md). + + +--- + +## Appendix (migrated from docs/INSTALL_GUIDE.md) + + +## Руководство по использованию 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) # Документация — см. Wiki/README репозитория + +/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 +``` + +#### 🧪 Команды диагностики и тестирования + +```bash +## Проверить доступ к API reg.ru +## - Показывает текущий IP +## - Тестирует подключение к API +## - Отображает баланс аккаунта +letsencrypt-regru --test-api + +## Тестовое создание DNS записи TXT +## - Полная симуляция процесса SSL сертификации +## - Создает временную TXT запись _acme-challenge +## - Ожидает распространения DNS (60 секунд) +## - Проверяет через публичные DNS серверы +## - Автоматически удаляет тестовую запись +letsencrypt-regru --test-dns + +## Показать справку по всем командам +letsencrypt-regru --help + +## Включить подробный вывод (verbose mode) +letsencrypt-regru --obtain -v +letsencrypt-regru --check -v +``` + +#### ⚙️ Служебные команды (внутреннее использование) + +```bash +## Certbot authentication hook (используется certbot автоматически) +letsencrypt-regru --auth-hook + +## Certbot cleanup hook (используется certbot автоматически) +letsencrypt-regru --cleanup-hook +``` + +#### 📋 Описание команд + +| Команда | Описание | Использование | +|---------|----------|---------------| +| `--check` | Проверяет срок действия сертификата | Регулярная проверка | +| `--obtain` | Получает новый сертификат от Let's Encrypt | Первое создание | +| `--renew` | Обновляет существующий сертификат | Продление срока | +| `--auto` | Автоматическая проверка и обновление | Для cron/systemd | +| `--test-cert` | Создает тестовый самоподписанный сертификат | Разработка/тестирование | +| `--test-api` | Проверяет доступ к API reg.ru | Диагностика подключения | +| `--test-dns` | Тестирует создание DNS записи | Проверка перед SSL | +| `--auth-hook` | Hook для certbot (создание DNS) | Внутреннее | +| `--cleanup-hook` | Hook для certbot (удаление DNS) | Внутреннее | +| `--help` | Показывает справку | Помощь | +| `-v` | Подробный вывод | Отладка | + +### Автоматическое обновление + +Установщик настраивает 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.0.2.1: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 +- Документация: Wiki/README в этом репозитории +- Email: admin@example.com + +--- + +**Разработано:** Фофанов Дмитрий +**Дата:** 28.10.2025 +**Версия:** 2.0 + diff --git a/LetsEncrypt_Workflow.md b/LetsEncrypt_Workflow.md index 5cada7c..1dd2a66 100644 --- a/LetsEncrypt_Workflow.md +++ b/LetsEncrypt_Workflow.md @@ -1,4 +1,4 @@ -# Алгоритм получения и продления сертификата +# Алгоритм получения и продления сертификата Эта страница описывает реальный алгоритм работы скрипта (по документации и текущему коду). @@ -62,3 +62,160 @@ - Логи скрипта: путь `log_file` из конфига - Логи certbot: обычно `/var/log/letsencrypt/letsencrypt.log` - systemd: `journalctl -u letsencrypt-regru -f` + + +--- + +## Appendix (migrated from docs/Создание и продление SSL сертификата.md) + + +## Инструкция по созданию wildcard сертификата *.example.com в Nginx Proxy Manager и настройке автоматического продления SSL + +--- + +### Шаг 1. Подготовка + +- Убедитесь, что Nginx Proxy Manager (NPM) установлен и доступен по адресу http://192.0.2.1:81/ +- У вас есть доступ к DNS-записям домена example.com в панели управления reg.ru или у другого регистратора + +--- + +### Шаг 2. Создание Wildcard SSL сертификата в Nginx Proxy Manager + +1. Войдите в админку Nginx Proxy Manager по адресу http://192.0.2.1:81/ + +2. Перейдите в раздел **SSL Certificates** → нажмите кнопку **Add SSL Certificate** + +3. Выберите пункт **Let's Encrypt** + +4. Заполните поля: + - **Domain Names:** + Введите `*.example.com` — для wildcard сертификата + Также рекомендуется добавить основной домен `example.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** укажите нужный поддомен из example.com, например: + `api.example.com` или `www.example.com` + +3. В разделе **SSL** выберите ваш wildcard сертификат `*.example.com`, который вы получили на шаге 2 + +4. Включите опции: + - Use SSL + - Force SSL + - HSTS (при необходимости) + +5. Сохраните изменения. + +--- + +### Шаг 5. Проверка + +1. Проверьте, что для всех поддоменов используется единый сертификат +2. Посетите https://api.example.com или другие поддомены из браузера +3. Убедитесь, что сертификат валиден, не просрочен и выдан на *.example.com +4. Проверяйте в разделе SSL Certificates статус продления сертификата + +--- + +### Дополнительно + +- Если Let's Encrypt не может выполнить HTTP Challenge из-за закрытого порта, настройте DNS Challenge (может потребоваться ключ API DNS провайдера) +- Для безопасности и уведомлений держите Email в актуальном состоянии +- Проверяйте логи Nginx Proxy Manager для выявления ошибок продления + +--- + +## Итог + +Nginx Proxy Manager позволяет легко получать и автоматически обновлять wildcard SSL сертификаты для домена *.example.com с помощью Let's Encrypt. +Главное — правильно настроить DNS записи и обеспечить интернет доступ на HTTP/HTTPS порты. +Далее используйте один глобальный сертификат для всех ваших поддоменов через настройки Proxy Hosts. + + +--- + +## Appendix (migrated from docs/Add Let's Encrypt Certificate для провайдера reg.ru.md) + + +## Инструкция по созданию Let's Encrypt сертификата с DNS Challenge для провайдера reg.ru в Nginx Proxy Manager + +--- + +### Предпосылки +- Доступ к Nginx Proxy Manager (NPM) +- Доступ к аккаунту reg.ru с правами управления DNS-записями +- API-ключ для управления DNS в reg.ru (если есть автоматическая интеграция) +- Нужно получить сертификат для `*.example.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** укажите: + `*.example.com` (для wildcard сертификата) + и основной домен `example.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 для бесшовного получения и продления сертификатов. + diff --git a/Nginx_Proxy_Manager.md b/Nginx_Proxy_Manager.md index abcbf28..3c311d6 100644 --- a/Nginx_Proxy_Manager.md +++ b/Nginx_Proxy_Manager.md @@ -110,3 +110,90 @@ - “не логинится” → проверьте `npm_host` (http/https), креды, доступность - “сертификат не появился” → проверьте `npm_enabled`, логи скрипта - staging сертификаты: не предназначены для production (браузер не доверяет) + + +--- + +## Appendix (migrated from docs/Настройке Nginx Manager с SSL .md) + + +## Подробная инструкция по настройке Nginx Proxy Manager с одним глобальным SSL сертификатом для всех доменов example.com + +### Предпосылки +- Установлен и запущен [Nginx Proxy Manager](http://192.0.2.1:81/) +- Основной домен: example.com +- Хостинг и DNS записи домена находятся на reg.ru +- Нужно использовать один SSL сертификат (например, wildcard) для всех поддоменов example.com + +--- + +### Шаг 1. Покупка и получение SSL Wildcard сертификата для example.com +1. На reg.ru или любом другом удостоверяющем центре (CA) закажите wildcard сертификат на домен вида `*.example.com`. +2. Получите файлы сертификата: + - Главный сертификат (CRT) + - Промежуточные сертификаты (CA Bundle) + - Приватный ключ (KEY) + +--- + +### Шаг 2. Импорт вашего SSL сертификата в Nginx Proxy Manager +1. Авторизуйтесь в Nginx Proxy Manager на http://192.0.2.1: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.example.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: + - `example.com` → IP вашего Nginx Proxy Manager (например, 192.0.2.1) + - `*.example.com` → тот же IP или конкретные поддомены, если есть специальные +3. Сохраните изменения +4. Дождитесь обновления DNS (от нескольких минут до 24 часов) + +--- + +### Шаг 5. Тест и проверка работы + +1. В браузере откройте любой из поддоменов `https://sub1.example.com` +2. Сертификат должен быть валидным, выданным на wildcard `*.example.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. +Это позволит юридически использовать единый сертификат для всех сервисов с различными поддоменами под вашим доменом example.com. + diff --git a/Project_Structure.md b/Project_Structure.md index c292e33..a90bb06 100644 --- a/Project_Structure.md +++ b/Project_Structure.md @@ -1,4 +1,4 @@ -# Структура проекта +# Структура проекта Ключевые файлы: @@ -7,7 +7,7 @@ - `Makefile` — команды установки/обслуживания/сборки - `config.json.example` — пример конфигурации - `systemd/` — unit-файлы для автозапуска/таймера -- `docs/ru/` — исходная документация (RU) +- `wiki/` — актуальная документация (страницы Wiki) Скрипты: @@ -18,9 +18,275 @@ Документация: - `README.md` — основное руководство -- `docs/ru/*` — дополнительные гайды (тестирование, сборка, синхронизация и т.д.) +- `wiki/*` — дополнительные гайды (тестирование, сборка, синхронизация и т.д.) ## Автоматизация - systemd timer обычно запускает `--auto` по расписанию (по умолчанию каждые 12 часов) - после успешного обновления может выполняться reload веб-сервиса + + +--- + +## Appendix (migrated from docs/PROJECT_STRUCTURE.md) + + +## 📁 Структура проекта 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.md) - Руководство по тестированию + +--- + +**Версия**: 2.1 +**Дата**: 27 октября 2025 +**Статус**: ✅ Production Ready + diff --git a/RegRu_API_Troubleshooting.md b/RegRu_API_Troubleshooting.md index 3efc807..da50ff7 100644 --- a/RegRu_API_Troubleshooting.md +++ b/RegRu_API_Troubleshooting.md @@ -1,4 +1,4 @@ -# Проблемы API reg.ru (DNS) +# Проблемы API reg.ru (DNS) ## Ошибка: “Access to API from this IP denied” @@ -52,3 +52,216 @@ API ограничивает частоту запросов. - ваш IP - точный текст ошибки - фрагмент логов (без паролей) + + +--- + +## Appendix (migrated from docs/API_TROUBLESHOOTING.md) + + +## 🔧 Решение проблем с API reg.ru + +### ❌ Проблема: "Access to API from this IP denied" + +Эта ошибка возникает, когда API reg.ru заблокирован для вашего IP адреса из соображений безопасности. + +#### 🔍 Диагностика + +Сначала определите ваш текущий IP адрес: + +```bash +## Способ 1: Через встроенную функцию скрипта +sudo letsencrypt-regru --test-api + +## Способ 2: Через curl +curl -s https://ipinfo.io/ip + +## Способ 3: Через веб-сайт +## Откройте https://whatismyipaddress.com/ +``` + +#### ✅ Решение + +##### Метод 1: Добавить IP в белый список (рекомендуется) + +1. **Войдите в личный кабинет reg.ru** + - Откройте https://www.reg.ru/ + - Войдите в личный кабинет + +2. **Перейдите в настройки API** + - Меню → "Настройки" + - Раздел "Безопасность" + - Подраздел "API" + +3. **Настройте доступ по IP** + - Найдите раздел "Ограничения по IP" + - Нажмите "Добавить IP адрес" + - Введите ваш текущий IP адрес + - Сохраните настройки + +4. **Проверьте настройки** + ```bash + sudo letsencrypt-regru --test-api + ``` + +##### Метод 2: Отключить ограничения по IP (менее безопасно) + +⚠️ **ВНИМАНИЕ**: Это снижает безопасность вашего аккаунта! + +1. В настройках API reg.ru найдите "Ограничения по IP" +2. Отключите опцию "Разрешить доступ только с указанных IP" +3. Сохраните настройки + +#### 🔒 Рекомендации по безопасности + +1. **Используйте статический IP** + - Если у вас динамический IP, рассмотрите покупку статического + - Или регулярно обновляйте список разрешенных IP + +2. **Ограничьте доступ к API** + - Добавляйте только необходимые IP адреса + - Регулярно проверяйте и очищайте список + +3. **Используйте сильные пароли** + - Сложный пароль для аккаунта reg.ru + - Двухфакторная аутентификация если доступна + +### ❌ Проблема: "Invalid username or password" + +#### ✅ Решение + +1. **Проверьте учетные данные** + ```bash + sudo nano /etc/letsencrypt-regru/config.json + ``` + + Убедитесь что указаны правильные: + - `regru_username` - логин от reg.ru + - `regru_password` - пароль от reg.ru + +2. **Проверьте права на файл** + ```bash + sudo chmod 600 /etc/letsencrypt-regru/config.json + sudo chown root:root /etc/letsencrypt-regru/config.json + ``` + +3. **Протестируйте подключение** + ```bash + sudo letsencrypt-regru --test-api + ``` + +### ❌ Проблема: "IP exceeded allowed connection rate" + +#### Причина +API reg.ru ограничивает частоту запросов с одного IP (обычно 10-20 запросов в минуту). + +#### ✅ Решение + +1. **Подождите 5-10 минут** + ```bash + # Подождите перед следующей попыткой + sleep 600 # 10 минут + sudo letsencrypt-regru --obtain + ``` + +2. **Настройте автоматизацию правильно** + ```bash + # Проверка сертификатов 1 раз в день + sudo systemctl enable letsencrypt-regru.timer + sudo systemctl start letsencrypt-regru.timer + + # Проверить расписание + sudo systemctl cat letsencrypt-regru.timer + ``` + +3. **Рекомендации по частоте запросов** + - ✅ Автоматическая проверка: **1 раз в день** + - ✅ Ручная проверка: **не чаще 1 раза в час** + - ❌ Избегайте частых тестов `--test-api` + - ❌ Не создавайте cron с частым запуском + +4. **Используйте --check вместо --obtain** + ```bash + # Проверка без создания сертификата + sudo letsencrypt-regru --check + ``` + +### ❌ Проблема: Таймаут подключения + +#### ✅ Решение + +1. **Проверьте интернет соединение** + ```bash + ping -c 4 api.reg.ru + curl -I https://api.reg.ru/api/regru2 + ``` + +2. **Проверьте брандмауэр** + ```bash + # Временно отключите firewall для теста + sudo ufw status + sudo iptables -L + ``` + +3. **Проверьте прокси настройки** + - Убедитесь что переменные окружения `HTTP_PROXY`, `HTTPS_PROXY` не мешают + +### 🧪 Тестирование API + +Всегда тестируйте API перед использованием: + +```bash +## Полный тест API +sudo letsencrypt-regru --test-api + +## Тест с подробным выводом +sudo letsencrypt-regru --test-api -v + +## Проверка конфигурации +sudo letsencrypt-regru --check +``` + +### 📞 Получение помощи + +#### Техподдержка reg.ru + +- **Email**: support@reg.ru +- **Телефон**: 8 (495) 580-11-11 +- **Онлайн чат**: на сайте reg.ru + +#### Документация + +- **API reg.ru**: https://www.reg.ru/support/api +- **Примеры использования**: https://www.reg.ru/support/api/examples +- **FAQ по API**: https://www.reg.ru/support/api/faq + +#### Логи для диагностики + +Всегда включайте логи при обращении в поддержку: + +```bash +## Включить подробные логи +sudo letsencrypt-regru --test-api -v + +## Посмотреть последние логи +sudo tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log + +## Логи certbot +sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log +``` + +### 🔄 Альтернативные DNS провайдеры + +Если проблемы с reg.ru API критичны, рассмотрите альтернативы: + +1. **Cloudflare** - отличный API, бесплатный DNS +2. **Route53** (AWS) - мощный, но платный +3. **DigitalOcean DNS** - простой и надежный +4. **Google Cloud DNS** - интеграция с GCP + +Для них потребуется модификация скрипта или использование других плагинов certbot. + +--- + +**Дата обновления**: 29.10.2025 +**Версия документа**: 1.0 diff --git a/Testing.md b/Testing.md index 7e6ab17..8d4cfbc 100644 --- a/Testing.md +++ b/Testing.md @@ -1,4 +1,4 @@ -# Тестирование +# Тестирование Главная цель тестовых режимов — не упереться в лимиты Let’s Encrypt и быстро проверять интеграции. @@ -51,3 +51,393 @@ 2) затем выполнить `--obtain` Если ранее создавался тестовый сертификат и вы хотите «чисто» перейти на production, иногда удобно удалить старую папку сертификата для домена в `cert_dir//` (аккуратно). + + +--- + +## Appendix (migrated from docs/TESTING_GUIDE.md) + + +## 🧪 Руководство по тестированию 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 сертификаты без ограничений! +