docs(wiki): синхронизация из master @ c6588a63ed
+763
@@ -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)
|
||||
<!-- 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)
|
||||
<!-- 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)
|
||||
<!-- 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) - Руководство по сборке
|
||||
|
||||
|
||||
+163
-2
@@ -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)
|
||||
<!-- 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**: Исправления багов
|
||||
|
||||
|
||||
+457
@@ -102,3 +102,460 @@ DFGIT_TOKEN="<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)
|
||||
<!-- 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)
|
||||
<!-- 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
|
||||
```
|
||||
|
||||
|
||||
+435
-2
@@ -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)
|
||||
<!-- 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
|
||||
```
|
||||
|
||||
Готово! 🎉
|
||||
|
||||
|
||||
+321
-2
@@ -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)
|
||||
<!-- 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)
|
||||
<!-- 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/)
|
||||
|
||||
### 📄 Лицензия
|
||||
|
||||
Скрипты предоставляются "как есть" для свободного использования.
|
||||
|
||||
---
|
||||
|
||||
**Успешной автоматизации! 🔒**
|
||||
|
||||
|
||||
+424
-1
@@ -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)
|
||||
<!-- 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
|
||||
|
||||
|
||||
+158
-1
@@ -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)
|
||||
<!-- 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)
|
||||
<!-- 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 для бесшовного получения и продления сертификатов.
|
||||
|
||||
|
||||
@@ -110,3 +110,90 @@
|
||||
- “не логинится” → проверьте `npm_host` (http/https), креды, доступность
|
||||
- “сертификат не появился” → проверьте `npm_enabled`, логи скрипта
|
||||
- staging сертификаты: не предназначены для production (браузер не доверяет)
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Appendix (migrated from docs/Настройке Nginx Manager с SSL .md)
|
||||
<!-- 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.
|
||||
|
||||
|
||||
+269
-3
@@ -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)
|
||||
<!-- 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
|
||||
|
||||
|
||||
+214
-1
@@ -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)
|
||||
<!-- 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
|
||||
|
||||
+391
-1
@@ -1,4 +1,4 @@
|
||||
# Тестирование
|
||||
# Тестирование
|
||||
|
||||
Главная цель тестовых режимов — не упереться в лимиты Let’s Encrypt и быстро проверять интеграции.
|
||||
|
||||
@@ -51,3 +51,393 @@
|
||||
2) затем выполнить `--obtain`
|
||||
|
||||
Если ранее создавался тестовый сертификат и вы хотите «чисто» перейти на production, иногда удобно удалить старую папку сертификата для домена в `cert_dir/<domain>/` (аккуратно).
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Appendix (migrated from docs/TESTING_GUIDE.md)
|
||||
<!-- 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 сертификаты без ограничений!
|
||||
|
||||
|
||||
Reference in New Issue
Block a user