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

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

330
.gitea/README.md Normal file
View File

@@ -0,0 +1,330 @@
# Настройка Gitea Actions для автоматической сборки
## 📋 Предварительные требования
### 1. Gitea с поддержкой Actions
Убедитесь, что ваш Gitea имеет включенные Actions:
```ini
# В app.ini Gitea
[actions]
ENABLED = true
DEFAULT_ACTIONS_URL = https://gitea.com
```
### 2. Gitea Runner
Установите и настройте Gitea Act Runner:
```bash
# Скачать runner
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner
chmod +x act_runner
# Зарегистрировать runner
./act_runner register --no-interactive \
--instance https://your-gitea-instance.com \
--token YOUR_RUNNER_TOKEN \
--name my-runner
# Запустить runner
./act_runner daemon
```
Или через Docker:
```bash
docker run -d \
--name gitea-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $PWD/runner-data:/data \
-e GITEA_INSTANCE_URL=https://your-gitea-instance.com \
-e GITEA_RUNNER_REGISTRATION_TOKEN=YOUR_TOKEN \
gitea/act_runner:latest
```
---
## 🚀 Использование
### Создание релиза автоматически
1. **Создайте и отправьте тег:**
```bash
# Создать тег
git tag -a v1.0.0 -m "Release version 1.0.0"
# Отправить тег на сервер
git push origin v1.0.0
```
2. **Gitea автоматически:**
- Запустит workflow `.gitea/workflows/release.yml`
- Соберет Linux версию на Ubuntu runner
- Соберет Windows версию на Windows runner
- Создаст релиз с артефактами
- Добавит контрольные суммы SHA256 и MD5
### Ручной запуск workflow
В веб-интерфейсе Gitea:
1. Перейдите в **Repository → Actions**
2. Выберите workflow **Build and Release**
3. Нажмите **Run workflow**
4. Укажите версию (опционально)
---
## 📂 Структура workflows
```
.gitea/
└── workflows/
├── build-release.yml # Простой workflow (совместим с GitHub)
└── release.yml # Расширенный workflow с уведомлениями
```
### build-release.yml
Базовый workflow, совместимый с GitHub Actions:
- Сборка для Linux и Windows
- Создание пакетов
- Генерация контрольных сумм
- Создание релиза
**Использование:**
```bash
git tag v1.0.0
git push origin v1.0.0
```
### release.yml
Расширенный workflow с дополнительными возможностями:
- Детальные release notes
- MD5 + SHA256 checksums
- Уведомления после релиза
- Поддержка ручного запуска
**Использование:**
```bash
# Автоматически при теге
git tag v1.0.0
git push origin v1.0.0
# Или вручную через веб-интерфейс
```
---
## 🔧 Настройка
### Переменные окружения
Workflow использует следующие переменные:
| Переменная | Описание | Где установить |
|------------|----------|----------------|
| `GITEA_TOKEN` | Токен для создания релиза | Repository Secrets |
| `GITHUB_TOKEN` | Автоматически (fallback) | Встроенный |
### Создание GITEA_TOKEN
1. В Gitea: **Settings → Applications → Generate New Token**
2. Выберите права: `repo`, `write:packages`
3. Скопируйте токен
4. В репозитории: **Settings → Secrets → Add Secret**
- Name: `GITEA_TOKEN`
- Value: ваш токен
---
## 📦 Артефакты релиза
После успешной сборки в релизе будут доступны:
```
letsencrypt-regru-linux-x86_64.tar.gz
letsencrypt-regru-linux-x86_64.tar.gz.sha256
letsencrypt-regru-linux-x86_64.tar.gz.md5
letsencrypt-regru-windows-x86_64.zip
letsencrypt-regru-windows-x86_64.zip.sha256
letsencrypt-regru-windows-x86_64.zip.md5
```
---
## 🐛 Troubleshooting
### Workflow не запускается
**Проблема:** После push тега workflow не запускается
**Решение:**
1. Проверьте, что Actions включены в настройках репозитория
2. Проверьте `.gitea/workflows/*.yml` на синтаксические ошибки
3. Убедитесь, что runner зарегистрирован и запущен
```bash
# Проверить статус runner
./act_runner status
# Посмотреть логи runner
./act_runner daemon --debug
```
---
### Ошибка при сборке Windows
**Проблема:** `make: command not found` на Windows
**Решение:**
Установите Make для Windows или используйте альтернативный workflow:
```yaml
- name: Build Windows executable (без make)
run: |
pyinstaller --onefile --name letsencrypt-regru letsencrypt_regru_api.py
```
---
### Релиз создается без файлов
**Проблема:** Релиз создан, но артефакты отсутствуют
**Решение:**
Проверьте логи job `create-release`:
1. Перейдите в **Actions → Build and Release → create-release**
2. Проверьте шаг "Download artifacts"
3. Убедитесь, что предыдущие jobs (`build-linux`, `build-windows`) завершились успешно
---
### Permission denied при создании релиза
**Проблема:** `Error: Resource not accessible by integration`
**Решение:**
1. Проверьте права токена:
- `GITEA_TOKEN` должен иметь права `repo` и `write:packages`
2. Или используйте встроенный `GITHUB_TOKEN`:
- Убедитесь, что в настройках репозитория включены Actions
---
## 📊 Мониторинг сборок
### Просмотр логов
1. **Web UI:**
- Repository → Actions
- Выберите workflow run
- Кликните на job для просмотра логов
2. **API:**
```bash
curl -H "Authorization: token YOUR_TOKEN" \
https://your-gitea.com/api/v1/repos/USER/REPO/actions/runs
```
### Статус badges
Добавьте в README.md:
```markdown
[![Build Status](https://your-gitea.com/USER/REPO/actions/workflows/release.yml/badge.svg)](https://your-gitea.com/USER/REPO/actions)
```
---
## 🔄 Автоматизация релизов
### Semantic Versioning
Используйте теги с семантическим версионированием:
```bash
# Major release (несовместимые изменения)
git tag v2.0.0
# Minor release (новые функции)
git tag v1.1.0
# Patch release (исправления)
git tag v1.0.1
```
### Pre-release
Для тестовых релизов используйте suffix:
```bash
git tag v1.0.0-beta.1
git tag v1.0.0-rc.1
```
В workflow автоматически будет установлен `prerelease: true` для таких тегов.
---
## 📝 Changelog автоматизация
### Использование conventional commits
```bash
git commit -m "feat: добавлена поддержка wildcard сертификатов"
git commit -m "fix: исправлена ошибка загрузки в NPM"
git commit -m "docs: обновлена документация"
```
### Генерация CHANGELOG.md
Добавьте в workflow:
```yaml
- name: Generate Changelog
run: |
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" > CHANGELOG.md
```
---
## 🎯 Рекомендации
1. **Используйте теги только для стабильных релизов**
- Тестируйте перед созданием тега
- Проверяйте сборку локально: `make release`
2. **Проверяйте контрольные суммы**
- Всегда включайте SHA256 и MD5
- Документируйте процесс проверки для пользователей
3. **Версионирование**
- Следуйте семантическому версионированию
- Документируйте breaking changes
4. **Тестирование**
- Запускайте workflow вручную перед тегированием
- Проверяйте артефакты после сборки
---
## 🔗 Полезные ссылки
- [Gitea Actions Documentation](https://docs.gitea.com/next/usage/actions/overview)
- [Act Runner GitHub](https://github.com/nektos/act)
- [Workflow Syntax](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions)
---
**Примечание:** Эти workflows совместимы с GitHub Actions и могут использоваться на обеих платформах.

View File

@@ -0,0 +1,211 @@
name: Build Releases
on:
push:
tags:
- 'v*' # Срабатывает на теги вида v1.0, v2.0.1 и т.д.
workflow_dispatch: # Возможность запустить вручную
jobs:
build-linux:
name: Build Linux Executable
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -r requirements.txt
- name: Build Linux executable
run: |
make build-linux
- name: Test Linux executable
run: |
chmod +x dist/letsencrypt-regru
dist/letsencrypt-regru --help
- name: Create Linux package
run: |
make package-linux
- name: Upload Linux artifact
uses: actions/upload-artifact@v3
with:
name: linux-executable
path: dist/letsencrypt-regru-linux-x86_64.tar.gz
- name: Generate SHA256 checksum
run: |
cd dist
sha256sum letsencrypt-regru-linux-x86_64.tar.gz > letsencrypt-regru-linux-x86_64.tar.gz.sha256
- name: Upload checksum
uses: actions/upload-artifact@v3
with:
name: linux-checksum
path: dist/letsencrypt-regru-linux-x86_64.tar.gz.sha256
build-windows:
name: Build Windows Executable
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -r requirements.txt
- name: Build Windows executable
run: |
make build-windows
- name: Test Windows executable
run: |
dist\letsencrypt-regru.exe --help
- name: Create Windows package
run: |
make package-windows
- name: Upload Windows artifact
uses: actions/upload-artifact@v3
with:
name: windows-executable
path: dist/letsencrypt-regru-windows-x86_64.zip
- name: Generate SHA256 checksum
run: |
cd dist
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256 > letsencrypt-regru-windows-x86_64.zip.sha256
- name: Upload checksum
uses: actions/upload-artifact@v3
with:
name: windows-checksum
path: dist/letsencrypt-regru-windows-x86_64.zip.sha256
create-release:
name: Create Gitea Release
needs: [build-linux, build-windows]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download Linux artifact
uses: actions/download-artifact@v3
with:
name: linux-executable
path: ./artifacts
- name: Download Linux checksum
uses: actions/download-artifact@v3
with:
name: linux-checksum
path: ./artifacts
- name: Download Windows artifact
uses: actions/download-artifact@v3
with:
name: windows-executable
path: ./artifacts
- name: Download Windows checksum
uses: actions/download-artifact@v3
with:
name: windows-checksum
path: ./artifacts
- name: Get tag name
id: get_version
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- name: Create Release
uses: actions/gitea-release@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ steps.get_version.outputs.VERSION }}
name: Let's Encrypt RegRu Manager ${{ steps.get_version.outputs.VERSION }}
body: |
## Let's Encrypt RegRu Manager ${{ steps.get_version.outputs.VERSION }}
### 📦 Релизные пакеты
**Linux (Ubuntu/Debian/CentOS):**
- `letsencrypt-regru-linux-x86_64.tar.gz` - Исполняемый файл + файлы
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256` - Контрольная сумма
**Windows:**
- `letsencrypt-regru-windows-x86_64.zip` - Исполняемый файл + файлы
- `letsencrypt-regru-windows-x86_64.zip.sha256` - Контрольная сумма
### 🚀 Быстрая установка
**Linux:**
```bash
wget https://your-gitea-instance.com/${{ github.repository }}/releases/download/${{ steps.get_version.outputs.VERSION }}/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
```
**Windows:**
Скачайте `letsencrypt-regru-windows-x86_64.zip` и распакуйте.
### 📖 Документация
- [README.md](README.md)
- [BUILD_GUIDE.md](BUILD_GUIDE.md)
- [INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md)
### ⚠️ Важно
- Исполняемые файлы требуют установленного `certbot` в системе
- Linux версия требует права root (sudo)
- Windows версия не поддерживает certbot напрямую (используйте WSL)
### 🔐 Проверка контрольных сумм
**Linux:**
```bash
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
```
**Windows:**
```powershell
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
```
### 📝 Changelog
- Автоматическая сборка релиза ${{ steps.get_version.outputs.VERSION }}
- См. коммиты для деталей изменений
files: |
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz.sha256
./artifacts/letsencrypt-regru-windows-x86_64.zip
./artifacts/letsencrypt-regru-windows-x86_64.zip.sha256
draft: false
prerelease: false

View File

@@ -0,0 +1,387 @@
name: Build and Release (Gitea Native)
# Этот workflow оптимизирован для Gitea
# Использует нативные возможности Gitea Actions
on:
push:
tags:
- 'v*'
- 'release-*'
workflow_dispatch:
inputs:
version:
description: 'Version tag (e.g., v1.0.0)'
required: false
default: 'dev'
env:
APP_NAME: letsencrypt-regru
PYTHON_VERSION: '3.9'
jobs:
# ============================================================================
# Сборка для Linux
# ============================================================================
build-linux:
name: 🐧 Build Linux
runs-on: ubuntu-latest
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: 🐍 Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: 📦 Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential
- name: 📚 Install Python dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
pip install pyinstaller
if [ -f requirements.txt ]; then
pip install -r requirements.txt
else
pip install requests certbot cryptography
fi
- name: Build info
run: |
make build-info
- name: 🔨 Build Linux executable
run: |
make build-linux
- name: ✅ Test executable
run: |
chmod +x dist/${{ env.APP_NAME }}
./dist/${{ env.APP_NAME }} --help
./dist/${{ env.APP_NAME }} --create-config /tmp/test_config.json
- name: 📦 Create distribution package
run: |
make package-linux
- name: 🔐 Generate checksums
run: |
cd dist
sha256sum ${{ env.APP_NAME }}-linux-x86_64.tar.gz > ${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
md5sum ${{ env.APP_NAME }}-linux-x86_64.tar.gz > ${{ env.APP_NAME }}-linux-x86_64.tar.gz.md5
cat ${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
- name: 📤 Upload Linux package
uses: actions/upload-artifact@v3
with:
name: linux-package
path: |
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz.md5
retention-days: 7
# ============================================================================
# Сборка для Windows
# ============================================================================
build-windows:
name: 🪟 Build Windows
runs-on: windows-latest
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: 🐍 Set up Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v4
with:
python-version: ${{ env.PYTHON_VERSION }}
cache: 'pip'
- name: 📚 Install Python dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
pip install pyinstaller
if (Test-Path requirements.txt) {
pip install -r requirements.txt
} else {
pip install requests certbot cryptography
}
- name: 🔨 Build Windows executable
run: |
make build-windows
- name: ✅ Test executable
run: |
dist\${{ env.APP_NAME }}.exe --help
dist\${{ env.APP_NAME }}.exe --create-config test_config.json
- name: 📦 Create distribution package
run: |
make package-windows
- name: 🔐 Generate checksums
run: |
cd dist
certutil -hashfile ${{ env.APP_NAME }}-windows-x86_64.zip SHA256 > ${{ env.APP_NAME }}-windows-x86_64.zip.sha256
certutil -hashfile ${{ env.APP_NAME }}-windows-x86_64.zip MD5 > ${{ env.APP_NAME }}-windows-x86_64.zip.md5
type ${{ env.APP_NAME }}-windows-x86_64.zip.sha256
- name: 📤 Upload Windows package
uses: actions/upload-artifact@v3
with:
name: windows-package
path: |
dist/${{ env.APP_NAME }}-windows-x86_64.zip
dist/${{ env.APP_NAME }}-windows-x86_64.zip.sha256
dist/${{ env.APP_NAME }}-windows-x86_64.zip.md5
retention-days: 7
# ============================================================================
# Создание релиза в Gitea
# ============================================================================
create-release:
name: 📦 Create Release
needs: [build-linux, build-windows]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: 📥 Checkout repository
uses: actions/checkout@v3
- name: 📥 Download Linux artifacts
uses: actions/download-artifact@v3
with:
name: linux-package
path: ./release
- name: 📥 Download Windows artifacts
uses: actions/download-artifact@v3
with:
name: windows-package
path: ./release
- name: 📋 List release files
run: |
echo "Release files:"
ls -lh ./release/
- name: 🏷️ Get version info
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ github.event.inputs.version }}"
else
VERSION="${GITHUB_REF#refs/tags/}"
fi
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Release version: $VERSION"
- name: 📝 Generate release notes
id: release_notes
run: |
cat > release_notes.md << 'EOF'
## 🎉 Let's Encrypt RegRu Manager ${{ steps.version.outputs.VERSION }}
Автоматическое управление SSL сертификатами Let's Encrypt для доменов на reg.ru с интеграцией в Nginx Proxy Manager.
### 📦 Файлы релиза
#### Linux (Ubuntu 20.04+, Debian 10+, CentOS 8+)
- **letsencrypt-regru-linux-x86_64.tar.gz** - Исполняемый файл (ELF 64-bit)
- **letsencrypt-regru-linux-x86_64.tar.gz.sha256** - SHA256 контрольная сумма
- **letsencrypt-regru-linux-x86_64.tar.gz.md5** - MD5 контрольная сумма
#### Windows (10/11, Server 2019+)
- **letsencrypt-regru-windows-x86_64.zip** - Исполняемый файл (PE32+)
- **letsencrypt-regru-windows-x86_64.zip.sha256** - SHA256 контрольная сумма
- **letsencrypt-regru-windows-x86_64.zip.md5** - MD5 контрольная сумма
---
### 🚀 Быстрая установка
#### Linux (одна команда):
```bash
curl -fsSL https://your-gitea.com/api/v1/repos/${{ github.repository }}/releases/tags/${{ steps.version.outputs.VERSION }} | \
jq -r '.assets[] | select(.name | contains("linux")) | .browser_download_url' | \
xargs wget -O letsencrypt-regru.tar.gz && \
tar -xzf letsencrypt-regru.tar.gz && \
sudo mv letsencrypt-regru /usr/local/bin/ && \
sudo chmod +x /usr/local/bin/letsencrypt-regru
```
#### Или вручную:
```bash
# 1. Скачать
wget https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz
# 2. Проверить контрольную сумму
wget https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz.sha256
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
# 3. Распаковать и установить
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
sudo mv letsencrypt-regru /usr/local/bin/
sudo chmod +x /usr/local/bin/letsencrypt-regru
# 4. Проверить
letsencrypt-regru --help
```
#### Windows:
```powershell
# Скачать и распаковать
Invoke-WebRequest -Uri "https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-windows-x86_64.zip" -OutFile "letsencrypt-regru.zip"
Expand-Archive -Path letsencrypt-regru.zip -DestinationPath "C:\Program Files\LetsEncrypt-RegRu"
# Проверить
& "C:\Program Files\LetsEncrypt-RegRu\letsencrypt-regru.exe" --help
```
---
### ✨ Основные возможности
- ✅ Автоматическое получение Let's Encrypt сертификатов
- ✅ DNS-валидация через API reg.ru
- ✅ Поддержка wildcard сертификатов (*.domain.com)
- ✅ Автоматическая загрузка в Nginx Proxy Manager
- ✅ Автоматическое обновление сертификатов
- ✅ Systemd интеграция для автоматизации
- ✅ Подробное логирование
- ✅ Генерация тестовых самоподписанных сертификатов
---
### 📋 Системные требования
#### Linux:
- Ubuntu 20.04+ / Debian 10+ / CentOS 8+ / RHEL 8+
- certbot (устанавливается автоматически через `letsencrypt_regru.sh`)
- 50 MB свободного места
- Права root (sudo)
#### Windows:
- Windows 10/11 или Server 2019+
- **Важно:** certbot не поддерживается напрямую на Windows
- Рекомендуется использовать WSL (Windows Subsystem for Linux)
---
### 📖 Документация
- **[README.md](README.md)** - Полное руководство пользователя
- **[BUILD_GUIDE.md](BUILD_GUIDE.md)** - Руководство по сборке из исходников
- **[INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md)** - Детальная инструкция по установке
- **[MAKEFILE_COMMANDS.md](MAKEFILE_COMMANDS.md)** - Справка по командам Makefile
---
### ⚠️ Важная информация
1. **Certbot зависимость:**
- Исполняемый файл НЕ включает certbot
- certbot должен быть установлен в системе
- Используется через subprocess
2. **Размер файла:**
- Linux: ~45-55 MB (включая Python runtime)
- Windows: ~40-50 MB (включая Python runtime)
3. **Первый запуск:**
- Может занять 5-10 секунд (распаковка)
- Последующие запуски быстрее (~1-2 сек)
4. **Безопасность:**
- Файлы подписаны контрольными суммами SHA256 и MD5
- Всегда проверяйте контрольные суммы перед использованием
---
### 🔐 Проверка контрольных сумм
#### Linux:
```bash
# SHA256
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
# MD5
md5sum -c letsencrypt-regru-linux-x86_64.tar.gz.md5
```
#### Windows:
```powershell
# SHA256
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
# MD5
certutil -hashfile letsencrypt-regru-windows-x86_64.zip MD5
```
---
### 🐛 Проблемы и поддержка
Если у вас возникли проблемы:
1. Проверьте [Issues](../../issues)
2. Создайте новый [Issue](../../issues/new)
3. См. раздел [Troubleshooting](BUILD_GUIDE.md#troubleshooting) в BUILD_GUIDE.md
---
### 📝 Changelog
См. [коммиты](${{ github.server_url }}/${{ github.repository }}/commits/${{ steps.version.outputs.VERSION }}) для деталей изменений.
---
**Автор:** Фофанов Дмитрий
**Дата релиза:** $(date -u +"%Y-%m-%d %H:%M:%S UTC")
**Версия:** ${{ steps.version.outputs.VERSION }}
EOF
cat release_notes.md
- name: 🚀 Create Gitea Release
uses: actions/gitea-release@v1
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}
with:
files: |
release/*
tag_name: ${{ steps.version.outputs.VERSION }}
name: "Let's Encrypt RegRu Manager ${{ steps.version.outputs.VERSION }}"
body_path: release_notes.md
draft: false
prerelease: false
# ============================================================================
# Уведомление о релизе (опционально)
# ============================================================================
notify:
name: 📢 Notify
needs: [create-release]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: 📧 Send notification
run: |
echo "Release created successfully!"
echo "Tag: ${{ github.ref_name }}"
echo "Repository: ${{ github.repository }}"
# Здесь можно добавить отправку уведомлений через webhook, email и т.д.

201
.github/workflows/build-release.yml vendored Normal file
View File

@@ -0,0 +1,201 @@
name: Build Releases
on:
push:
tags:
- 'v*' # Срабатывает на теги вида v1.0, v2.0.1 и т.д.
workflow_dispatch: # Возможность запустить вручную
jobs:
build-linux:
name: Build Linux Executable
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -r requirements.txt
- name: Build Linux executable
run: |
make build-linux
- name: Test Linux executable
run: |
chmod +x dist/letsencrypt-regru
dist/letsencrypt-regru --help
- name: Create Linux package
run: |
make package-linux
- name: Upload Linux artifact
uses: actions/upload-artifact@v3
with:
name: linux-executable
path: dist/letsencrypt-regru-linux-x86_64.tar.gz
- name: Generate SHA256 checksum
run: |
cd dist
sha256sum letsencrypt-regru-linux-x86_64.tar.gz > letsencrypt-regru-linux-x86_64.tar.gz.sha256
- name: Upload checksum
uses: actions/upload-artifact@v3
with:
name: linux-checksum
path: dist/letsencrypt-regru-linux-x86_64.tar.gz.sha256
build-windows:
name: Build Windows Executable
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyinstaller
pip install -r requirements.txt
- name: Build Windows executable
run: |
make build-windows
- name: Test Windows executable
run: |
dist\letsencrypt-regru.exe --help
- name: Create Windows package
run: |
make package-windows
- name: Upload Windows artifact
uses: actions/upload-artifact@v3
with:
name: windows-executable
path: dist/letsencrypt-regru-windows-x86_64.zip
- name: Generate SHA256 checksum
run: |
cd dist
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256 > letsencrypt-regru-windows-x86_64.zip.sha256
- name: Upload checksum
uses: actions/upload-artifact@v3
with:
name: windows-checksum
path: dist/letsencrypt-regru-windows-x86_64.zip.sha256
create-release:
name: Create GitHub Release
needs: [build-linux, build-windows]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Download Linux artifact
uses: actions/download-artifact@v3
with:
name: linux-executable
path: ./artifacts
- name: Download Linux checksum
uses: actions/download-artifact@v3
with:
name: linux-checksum
path: ./artifacts
- name: Download Windows artifact
uses: actions/download-artifact@v3
with:
name: windows-executable
path: ./artifacts
- name: Download Windows checksum
uses: actions/download-artifact@v3
with:
name: windows-checksum
path: ./artifacts
- name: Create Release
uses: softprops/action-gh-release@v1
with:
files: |
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz.sha256
./artifacts/letsencrypt-regru-windows-x86_64.zip
./artifacts/letsencrypt-regru-windows-x86_64.zip.sha256
body: |
## Let's Encrypt RegRu Manager ${{ github.ref_name }}
### 📦 Релизные пакеты
**Linux (Ubuntu/Debian/CentOS):**
- `letsencrypt-regru-linux-x86_64.tar.gz` - Исполняемый файл + файлы
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256` - Контрольная сумма
**Windows:**
- `letsencrypt-regru-windows-x86_64.zip` - Исполняемый файл + файлы
- `letsencrypt-regru-windows-x86_64.zip.sha256` - Контрольная сумма
### 🚀 Быстрая установка
**Linux:**
```bash
wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/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
```
**Windows:**
Скачайте `letsencrypt-regru-windows-x86_64.zip` и распакуйте.
### 📖 Документация
- [README.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/README.md)
- [BUILD_GUIDE.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/BUILD_GUIDE.md)
- [INSTALL_GUIDE.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/docs/INSTALL_GUIDE.md)
### ⚠️ Важно
- Исполняемые файлы требуют установленного `certbot` в системе
- Linux версия требует права root (sudo)
- Windows версия не поддерживает certbot напрямую (используйте WSL)
### 🔐 Проверка контрольных сумм
**Linux:**
```bash
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
```
**Windows:**
```powershell
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
```
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

7
.gitignore vendored
View File

@@ -30,6 +30,13 @@ PIPE_MANIFEST
*.manifest *.manifest
*.spec *.spec
# PyInstaller build artifacts
build/
dist/
*.tar.gz
*.zip
*.sha256
# Installer logs # Installer logs
pip-log.txt pip-log.txt
pip-delete-this-directory.txt pip-delete-this-directory.txt

319
Makefile
View File

@@ -25,7 +25,14 @@ YELLOW = \033[1;33m
BLUE = \033[0;34m BLUE = \033[0;34m
NC = \033[0m # No Color NC = \033[0m # No Color
.PHONY: help install uninstall status check-root setup-dirs install-script install-service install-cron clean .PHONY: help install uninstall status check-root setup-dirs install-script install-service install-cron clean build build-linux build-windows build-all package-linux package-windows release
# Переменные для сборки
PYINSTALLER = pyinstaller
APP_NAME = letsencrypt-regru
DIST_DIR = dist
BUILD_DIR_PY = build
SPEC_FILE = $(APP_NAME).spec
# ============================================================================== # ==============================================================================
# Помощь # Помощь
@@ -36,7 +43,7 @@ help:
@echo "$(BLUE)║ Makefile для управления Let's Encrypt SSL сертификатами ║$(NC)" @echo "$(BLUE)║ Makefile для управления Let's Encrypt SSL сертификатами ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)" @echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo "" @echo ""
@echo "$(GREEN)Доступные команды:$(NC)" @echo "$(GREEN)Команды для установки:$(NC)"
@echo "" @echo ""
@echo " $(YELLOW)make install$(NC) - Установить скрипт и настроить автоматизацию" @echo " $(YELLOW)make install$(NC) - Установить скрипт и настроить автоматизацию"
@echo " $(YELLOW)make uninstall$(NC) - Удалить скрипт и очистить систему" @echo " $(YELLOW)make uninstall$(NC) - Удалить скрипт и очистить систему"
@@ -45,6 +52,18 @@ help:
@echo " $(YELLOW)make test-run$(NC) - Тестовый запуск скрипта" @echo " $(YELLOW)make test-run$(NC) - Тестовый запуск скрипта"
@echo " $(YELLOW)make test-cert$(NC) - Создать тестовый самоподписанный сертификат" @echo " $(YELLOW)make test-cert$(NC) - Создать тестовый самоподписанный сертификат"
@echo " $(YELLOW)make logs$(NC) - Показать логи" @echo " $(YELLOW)make logs$(NC) - Показать логи"
@echo ""
@echo "$(GREEN)Команды для сборки (PyInstaller):$(NC)"
@echo ""
@echo " $(YELLOW)make build$(NC) - Собрать исполняемый файл для текущей ОС"
@echo " $(YELLOW)make build-linux$(NC) - Собрать исполняемый файл для Linux"
@echo " $(YELLOW)make build-windows$(NC) - Собрать исполняемый файл для Windows"
@echo " $(YELLOW)make build-all$(NC) - Собрать для всех платформ"
@echo " $(YELLOW)make package-linux$(NC) - Создать tar.gz пакет для Linux"
@echo " $(YELLOW)make package-windows$(NC) - Создать zip пакет для Windows"
@echo " $(YELLOW)make release$(NC) - Полный цикл релиза (build + package)"
@echo " $(YELLOW)make clean-build$(NC) - Очистить артефакты сборки"
@echo ""
@echo " $(YELLOW)make help$(NC) - Показать эту справку" @echo " $(YELLOW)make help$(NC) - Показать эту справку"
@echo "" @echo ""
@@ -449,5 +468,301 @@ clean:
@find . -type d -name "__pycache__" -delete @find . -type d -name "__pycache__" -delete
@echo "$(GREEN)✓ Очистка завершена$(NC)" @echo "$(GREEN)✓ Очистка завершена$(NC)"
# ==============================================================================
# Сборка исполняемых файлов с PyInstaller
# ==============================================================================
# Установка PyInstaller
install-pyinstaller:
@echo "$(YELLOW)→ Установка PyInstaller...$(NC)"
@if command -v pip3 >/dev/null 2>&1; then \
pip3 install --upgrade pyinstaller; \
elif command -v pip >/dev/null 2>&1; then \
pip install --upgrade pyinstaller; \
else \
echo "$(RED)✗ pip не найден. Установите pip сначала.$(NC)"; \
exit 1; \
fi
@echo "$(GREEN)✓ PyInstaller установлен$(NC)"
# Сборка для текущей ОС
build:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Сборка исполняемого файла для текущей ОС$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@if ! command -v $(PYINSTALLER) >/dev/null 2>&1; then \
echo "$(YELLOW)PyInstaller не найден. Установка...$(NC)"; \
$(MAKE) install-pyinstaller; \
fi
@echo "$(YELLOW)→ Компиляция $(SCRIPT_NAME) в исполняемый файл...$(NC)"
@$(PYINSTALLER) --onefile \
--name $(APP_NAME) \
--add-data "README.md:." \
--hidden-import requests \
--hidden-import certbot \
--hidden-import cryptography \
--collect-all certbot \
--noconfirm \
$(SCRIPT_NAME)
@echo ""
@echo "$(GREEN)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(GREEN)║ ✓ Сборка завершена успешно! ║$(NC)"
@echo "$(GREEN)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@echo "$(YELLOW)Исполняемый файл:$(NC)"
@ls -lh $(DIST_DIR)/$(APP_NAME) 2>/dev/null || dir $(DIST_DIR)\$(APP_NAME).exe 2>/dev/null || echo " $(DIST_DIR)/$(APP_NAME)"
@echo ""
@echo "$(YELLOW)Размер файла:$(NC)"
@du -h $(DIST_DIR)/$(APP_NAME) 2>/dev/null || echo " ~40-60 MB (включая Python runtime и все библиотеки)"
@echo ""
@echo "$(YELLOW)Примечание:$(NC)"
@echo " • Исполняемый файл содержит весь Python runtime"
@echo " • Certbot все равно должен быть установлен в системе"
@echo " • Запускайте с sudo для работы с сертификатами"
# Сборка для Linux
build-linux:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Сборка исполняемого файла для Linux ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@UNAME=$$(uname -s 2>/dev/null || echo "Unknown"); \
if [ "$$UNAME" != "Linux" ]; then \
echo "$(RED)ВНИМАНИЕ: Сборка на $$UNAME, но целевая ОС - Linux$(NC)"; \
echo "$(YELLOW)Рекомендуется собирать на Linux для лучшей совместимости$(NC)"; \
echo ""; \
fi
@if ! command -v $(PYINSTALLER) >/dev/null 2>&1; then \
echo "$(YELLOW)PyInstaller не найден. Установка...$(NC)"; \
$(MAKE) install-pyinstaller; \
fi
@echo "$(YELLOW)→ Компиляция для Linux (x86_64)...$(NC)"
@$(PYINSTALLER) --onefile \
--name $(APP_NAME) \
--add-data "README.md:." \
--hidden-import requests \
--hidden-import certbot \
--hidden-import cryptography \
--collect-all certbot \
--target-arch x86_64 \
--noconfirm \
$(SCRIPT_NAME)
@echo ""
@echo "$(GREEN)✓ Сборка для Linux завершена!$(NC)"
@echo ""
@echo "$(YELLOW)Исполняемый файл:$(NC) $(DIST_DIR)/$(APP_NAME)"
@file $(DIST_DIR)/$(APP_NAME) 2>/dev/null || echo " ELF 64-bit executable"
@ls -lh $(DIST_DIR)/$(APP_NAME) 2>/dev/null || echo ""
# Сборка для Windows
build-windows:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Сборка исполняемого файла для Windows ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@UNAME=$$(uname -s 2>/dev/null || echo "Windows"); \
SEPARATOR=";"; \
if [ "$$UNAME" = "Linux" ] || [ "$$UNAME" = "Darwin" ]; then \
echo "$(RED)ВНИМАНИЕ: Кросс-компиляция для Windows из $$UNAME$(NC)"; \
echo "$(YELLOW)Используем разделитель ':' вместо ';' для PyInstaller$(NC)"; \
echo "$(YELLOW)Рекомендуется: собирайте на нативной Windows для лучших результатов$(NC)"; \
echo ""; \
SEPARATOR=":"; \
fi; \
if ! command -v $(PYINSTALLER) >/dev/null 2>&1; then \
echo "$(YELLOW)PyInstaller не найден. Установка...$(NC)"; \
$(MAKE) install-pyinstaller; \
fi; \
echo "$(YELLOW)→ Компиляция для Windows (x86_64) с разделителем $$SEPARATOR...$(NC)"; \
$(PYINSTALLER) --onefile \
--name $(APP_NAME) \
--add-data "README.md$${SEPARATOR}." \
--hidden-import requests \
--hidden-import certbot \
--hidden-import cryptography \
--collect-all certbot \
--icon NONE \
--noconfirm \
$(SCRIPT_NAME)
@echo ""
@echo "$(GREEN)✓ Сборка для Windows завершена!$(NC)"
@echo ""
@echo "$(YELLOW)Исполняемый файл:$(NC) $(DIST_DIR)/$(APP_NAME).exe"
@ls -lh $(DIST_DIR)/$(APP_NAME).exe 2>/dev/null || dir $(DIST_DIR)\$(APP_NAME).exe 2>/dev/null || echo ""
# Сборка для всех платформ
build-all:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Сборка для всех платформ ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@echo "$(RED)⚠️ ВНИМАНИЕ: Кросс-компиляция Windows из Linux НЕ РАБОТАЕТ!$(NC)"
@echo "$(YELLOW)→ PyInstaller не может создать .exe файл на Linux/macOS$(NC)"
@echo "$(YELLOW)→ Для Windows сборки используйте нативную Windows систему$(NC)"
@echo ""
@echo "$(YELLOW)Рекомендации:$(NC)"
@echo " • Собирать Linux версию на Linux (работает ✓)"
@echo " • Собирать Windows версию на Windows (обязательно!)"
@echo " • Использовать GitHub Actions для автоматической сборки"
@echo ""
@$(MAKE) build-linux
@echo ""
@UNAME=$$(uname -s 2>/dev/null || echo "Windows"); \
if [ "$$UNAME" != "Windows" ] && [ "$$UNAME" != "MINGW"* ] && [ "$$UNAME" != "MSYS"* ]; then \
echo "$(YELLOW)Пропускаем Windows сборку (текущая ОС: $$UNAME)$(NC)"; \
echo "$(YELLOW)Используйте Windows для создания .exe файла$(NC)"; \
else \
$(MAKE) build-windows; \
fi
@echo ""
@echo "$(GREEN)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(GREEN)║ ✓ Сборка завершена! ║$(NC)"
@echo "$(GREEN)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@echo "$(YELLOW)Файлы в директории $(DIST_DIR)/:$(NC)"
@ls -lh $(DIST_DIR)/ 2>/dev/null || dir $(DIST_DIR) 2>/dev/null || echo " Проверьте $(DIST_DIR)/"
# Создание пакета для Linux (tar.gz)
package-linux: build-linux
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Создание пакета для Linux ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@echo "$(YELLOW)→ Подготовка файлов...$(NC)"
@mkdir -p $(DIST_DIR)/package
@cp $(DIST_DIR)/$(APP_NAME) $(DIST_DIR)/package/
@cp README.md $(DIST_DIR)/package/ 2>/dev/null || true
@cp -r systemd $(DIST_DIR)/package/ 2>/dev/null || true
@if [ -f "config.json.example" ]; then \
cp config.json.example $(DIST_DIR)/package/; \
fi
@echo "$(YELLOW)→ Создание архива...$(NC)"
@cd $(DIST_DIR)/package && tar -czf ../$(APP_NAME)-linux-x86_64.tar.gz *
@rm -rf $(DIST_DIR)/package
@echo ""
@echo "$(GREEN)✓ Пакет создан:$(NC) $(DIST_DIR)/$(APP_NAME)-linux-x86_64.tar.gz"
@ls -lh $(DIST_DIR)/$(APP_NAME)-linux-x86_64.tar.gz
@echo ""
@echo "$(YELLOW)Содержимое пакета:$(NC)"
@tar -tzf $(DIST_DIR)/$(APP_NAME)-linux-x86_64.tar.gz | head -10
# Создание пакета для Windows (zip)
package-windows: build-windows
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Создание пакета для Windows ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@if [ ! -f "$(DIST_DIR)/$(APP_NAME).exe" ]; then \
echo "$(RED)✗ Ошибка: Файл $(APP_NAME).exe не найден$(NC)"; \
echo "$(YELLOW)⚠️ Кросс-компиляция для Windows из Linux/macOS не создает .exe файл!$(NC)"; \
echo "$(YELLOW)→ Используйте нативную Windows систему для сборки Windows версии$(NC)"; \
echo ""; \
exit 1; \
fi
@echo "$(YELLOW)→ Подготовка файлов...$(NC)"
@mkdir -p $(DIST_DIR)/package
@cp $(DIST_DIR)/$(APP_NAME).exe $(DIST_DIR)/package/
@cp README.md $(DIST_DIR)/package/ 2>/dev/null || true
@if [ -f "config.json.example" ]; then cp config.json.example $(DIST_DIR)/package/; fi
@echo "$(YELLOW)→ Создание архива (tar.gz)...$(NC)"
@cd $(DIST_DIR)/package && tar -czf ../$(APP_NAME)-windows-x86_64.tar.gz *
@rm -rf $(DIST_DIR)/package
@echo ""
@echo "$(GREEN)✓ Пакет создан:$(NC) $(DIST_DIR)/$(APP_NAME)-windows-x86_64.tar.gz"
@ls -lh $(DIST_DIR)/$(APP_NAME)-windows-x86_64.tar.gz
@echo ""
@echo "$(YELLOW)Содержимое пакета:$(NC)"
@tar -tzf $(DIST_DIR)/$(APP_NAME)-windows-x86_64.tar.gz | head -10
# Полный цикл релиза
release:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ ПОЛНЫЙ ЦИКЛ РЕЛИЗА ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@$(MAKE) clean-build
@$(MAKE) install-pyinstaller
@$(MAKE) build-all
@$(MAKE) package-linux
@$(MAKE) package-windows
@echo ""
@echo "$(GREEN)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(GREEN)║ ✓ РЕЛИЗ ГОТОВ! ║$(NC)"
@echo "$(GREEN)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@echo "$(YELLOW)Артефакты релиза:$(NC)"
@ls -lh $(DIST_DIR)/*.tar.gz $(DIST_DIR)/*.zip 2>/dev/null || dir $(DIST_DIR)\*.zip 2>/dev/null || echo " Проверьте $(DIST_DIR)/"
@echo ""
@echo "$(YELLOW)Контрольные суммы SHA256:$(NC)"
@cd $(DIST_DIR) && sha256sum *.tar.gz *.zip 2>/dev/null || \
cd $(DIST_DIR) && certutil -hashfile $(APP_NAME)-windows-x86_64.zip SHA256 2>/dev/null || \
echo " Используйте sha256sum или certutil для проверки контрольных сумм"
@echo ""
@echo "$(YELLOW)Следующие шаги:$(NC)"
@echo " 1. Протестируйте исполняемые файлы"
@echo " 2. Создайте GitHub Release"
@echo " 3. Загрузите пакеты как Assets"
# Тестирование собранного файла
test-build:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Тестирование собранного файла ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@if [ -f "$(DIST_DIR)/$(APP_NAME)" ]; then \
echo "$(YELLOW)→ Тестирование Linux версии...$(NC)"; \
chmod +x $(DIST_DIR)/$(APP_NAME); \
$(DIST_DIR)/$(APP_NAME) --help; \
echo ""; \
echo "$(GREEN)✓ Linux версия работает$(NC)"; \
elif [ -f "$(DIST_DIR)/$(APP_NAME).exe" ]; then \
echo "$(YELLOW)→ Тестирование Windows версии...$(NC)"; \
$(DIST_DIR)/$(APP_NAME).exe --help; \
echo ""; \
echo "$(GREEN)✓ Windows версия работает$(NC)"; \
else \
echo "$(RED)✗ Исполняемый файл не найден$(NC)"; \
echo "$(YELLOW)Запустите 'make build' сначала$(NC)"; \
exit 1; \
fi
# Очистка артефактов сборки
clean-build:
@echo "$(YELLOW)→ Очистка артефактов сборки...$(NC)"
@rm -rf $(BUILD_DIR_PY) $(DIST_DIR) $(SPEC_FILE) __pycache__ *.pyc
@echo "$(GREEN)✓ Артефакты сборки удалены$(NC)"
# Информация о среде сборки
build-info:
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
@echo "$(BLUE)║ Информация о среде сборки ║$(NC)"
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
@echo ""
@echo "$(YELLOW)Система:$(NC)"
@echo " ОС: $$(uname -s 2>/dev/null || echo 'Windows')"
@echo " Архитектура: $$(uname -m 2>/dev/null || echo 'x86_64')"
@echo " Ядро: $$(uname -r 2>/dev/null || echo 'N/A')"
@echo ""
@echo "$(YELLOW)Python:$(NC)"
@echo " Версия: $$($(PYTHON) --version 2>&1)"
@echo " Путь: $$(which $(PYTHON) 2>/dev/null || where $(PYTHON) 2>/dev/null || echo 'N/A')"
@echo ""
@echo "$(YELLOW)PyInstaller:$(NC)"
@if command -v $(PYINSTALLER) >/dev/null 2>&1; then \
echo " Версия: $$($(PYINSTALLER) --version 2>&1)"; \
echo " Путь: $$(which $(PYINSTALLER) 2>/dev/null || where $(PYINSTALLER) 2>/dev/null)"; \
echo " $(GREEN)✓ Установлен$(NC)"; \
else \
echo " $(RED)Не установлен$(NC)"; \
echo " Установите: make install-pyinstaller"; \
fi
@echo ""
@echo "$(YELLOW)Конфигурация сборки:$(NC)"
@echo " Исходный файл: $(SCRIPT_NAME)"
@echo " Название приложения: $(APP_NAME)"
@echo " Директория сборки: $(DIST_DIR)/"
@echo ""
# По умолчанию показываем помощь # По умолчанию показываем помощь
.DEFAULT_GOAL := help .DEFAULT_GOAL := help

View File

@@ -16,18 +16,19 @@ Python скрипт теперь автоматически загружает
## Содержание ## Содержание
1. [Введение](#введение) 1. [Введение](#введение)
2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush) 2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush)
3. [Быстрый старт](#-быстрый-старт) 3. [🔨 Сборка исполняемых файлов](#-сборка-исполняемых-файлов)
4. [Установка через Makefile](#-установка-через-makefile) 4. [Быстрый старт](#-быстрый-старт)
5. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата) 5. [Установка через Makefile](#-установка-через-makefile)
6. [Требования](#требования) 6. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
7. [Установка зависимостей](#установка-зависимостей) 7. [Требования](#требования)
8. [Настройка](#настройка) 8. [Установка зависимостей](#установка-зависимостей)
9. [Использование Bash скрипта](#использование-bash-скрипта) 9. [Настройка](#настройка)
10. [Использование Python скрипта](#использование-python-скрипта) 10. [Использование Bash скрипта](#использование-bash-скрипта)
11. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager) 11. [Использование Python скрипта](#использование-python-скрипта)
12. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов) 12. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
13. [Автоматизация обновления](#автоматизация-обновления) 13. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
14. [Устранение неполадок](#устранение-неполадок) 14. [Автоматизация обновления](#автоматизация-обновления)
15. [Устранение неполадок](#устранение-неполадок)
--- ---
@@ -697,7 +698,76 @@ sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
--- ---
## 🚀 Быстрый старт ## <EFBFBD> Сборка исполняемых файлов
### PyInstaller - компиляция в исполняемые файлы
Скрипт можно скомпилировать в исполняемый файл для Linux и Windows с помощью PyInstaller.
**Преимущества:**
- ✅ Не требуется установленный Python на целевой системе
- ✅ Все зависимости включены в один файл
- ✅ Простота распространения и развертывания
**Недостатки:**
- ❌ Большой размер (~40-60 MB)
- ❌ Certbot всё равно должен быть установлен в системе
- ❌ Медленный первый запуск
### Быстрая сборка
#### Для Linux:
```bash
make build-linux
```
#### Для Windows:
```bash
make build-windows
```
#### Для всех платформ:
```bash
make build-all
```
### Полный релиз с пакетами
```bash
# Создаст tar.gz для Linux и zip для Windows
make release
```
**Результат:**
- `dist/letsencrypt-regru` - Linux executable
- `dist/letsencrypt-regru.exe` - Windows executable
- `dist/letsencrypt-regru-linux-x86_64.tar.gz`
- `dist/letsencrypt-regru-windows-x86_64.zip`
### Использование собранного файла
**Linux:**
```bash
# Установка
sudo cp dist/letsencrypt-regru /usr/local/bin/
sudo chmod +x /usr/local/bin/letsencrypt-regru
# Использование
sudo letsencrypt-regru --help
sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
```
**Windows:**
```powershell
# Просто запустить
.\dist\letsencrypt-regru.exe --help
```
📖 **Подробнее:** См. [BUILD_GUIDE.md](BUILD_GUIDE.md) для детальных инструкций по сборке.
---
## <20>🚀 Быстрый старт
### За 3 простых шага получите SSL сертификат в Nginx Proxy Manager! ### За 3 простых шага получите SSL сертификат в Nginx Proxy Manager!

455
docs/en/BUILD_GUIDE_EN.md Normal file
View File

@@ -0,0 +1,455 @@
# 🔨 Executable Build Guide
This guide describes the process of compiling the `letsencrypt_regru_api.py` Python script into executable files for Linux and Windows using PyInstaller.
## 📋 Table of Contents
- [Advantages of Executable Files](#advantages-of-executable-files)
- [Quick Start](#quick-start)
- [Detailed Instructions](#detailed-instructions)
- [Cross-Compilation](#cross-compilation)
- [Troubleshooting](#troubleshooting)
---
## ✅ Advantages of Executable Files
### Pros:
-**Single file** - easy to distribute and deploy
-**Standalone** - no Python installation required on target system
-**All dependencies included** - requests, cryptography, and certbot modules are bundled
-**Simple execution** - just download and run
### Cons:
-**Large size** - ~40-60 MB (including Python runtime and libraries)
-**Certbot dependency** - system certbot is still required
-**Slow first launch** - unpacking takes a few seconds
-**Rebuild required** - code changes require recompilation
---
## 🚀 Quick Start
### Build for current OS:
```bash
make build
```
### Build for all platforms:
```bash
make build-all
```
### Full release (build + packages):
```bash
make release
```
---
## 📖 Detailed Instructions
### 1. Install Dependencies
#### Option A: Automatic Installation
```bash
make install-pyinstaller
```
#### Option B: Manual Installation
```bash
pip install pyinstaller
pip install -r requirements.txt
```
### 2. Build for Linux
**On Linux system:**
```bash
make build-linux
```
**Result:**
- File: `dist/letsencrypt-regru`
- Size: ~45-55 MB
- Format: ELF 64-bit executable
**Testing:**
```bash
./dist/letsencrypt-regru --help
sudo ./dist/letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
```
### 3. Build for Windows
**On Windows system (PowerShell/CMD):**
```bash
make build-windows
```
**Result:**
- File: `dist/letsencrypt-regru.exe`
- Size: ~40-50 MB
- Format: PE32+ executable (Windows)
**Testing:**
```powershell
.\dist\letsencrypt-regru.exe --help
```
### 4. Create Distribution Packages
#### Linux package (tar.gz):
```bash
make package-linux
```
**Package contents:**
- `letsencrypt-regru` - executable file
- `README.md` - documentation
- `systemd/` - systemd unit files
- `config.json.example` - configuration example
**Result:** `dist/letsencrypt-regru-linux-x86_64.tar.gz`
#### Windows package (zip):
```bash
make package-windows
```
**Result:** `dist/letsencrypt-regru-windows-x86_64.zip`
### 5. Full Release Cycle
Create release with all artifacts:
```bash
make release
```
**What happens:**
1. Clean old artifacts (`clean-build`)
2. Install/update PyInstaller
3. Build for Linux (`build-linux`)
4. Build for Windows (`build-windows`)
5. Create Linux package (`package-linux`)
6. Create Windows package (`package-windows`)
7. Generate SHA256 checksums
**Result in `dist/`:**
```
letsencrypt-regru # Linux executable
letsencrypt-regru.exe # Windows executable
letsencrypt-regru-linux-x86_64.tar.gz
letsencrypt-regru-windows-x86_64.zip
```
---
## 🔄 Cross-Compilation
### ⚠️ Important Notes
**Not recommended:**
- Building Linux version on Windows
- Building Windows version on Linux
- Building macOS version on other OSes
**Reasons:**
- System library incompatibility
- Different executable formats
- Path and separator issues
### Recommendations
#### For Linux builds:
1. Use Ubuntu 20.04+ or Debian 10+
2. Install build-essential
3. Use Python virtual environment
```bash
sudo apt-get update
sudo apt-get install -y python3 python3-pip build-essential
make build-linux
```
#### For Windows builds:
1. Use Windows 10/11
2. Install Python 3.8+
3. Use PowerShell or CMD
```powershell
python -m pip install --upgrade pip
make build-windows
```
#### For both platforms:
Use 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
```
---
## 🛠️ All Makefile Commands
### Main Commands:
| Command | Description |
|---------|-------------|
| `make build` | Build for current OS |
| `make build-linux` | Build for Linux |
| `make build-windows` | Build for Windows |
| `make build-all` | Build for all platforms |
| `make package-linux` | Create tar.gz package |
| `make package-windows` | Create zip package |
| `make release` | Full release cycle |
### Supporting Commands:
| Command | Description |
|---------|-------------|
| `make install-pyinstaller` | Install PyInstaller |
| `make test-build` | Test built file |
| `make clean-build` | Clean build artifacts |
| `make build-info` | Show environment info |
---
## 🐛 Troubleshooting
### Issue: PyInstaller not found
**Error:**
```
make: pyinstaller: Command not found
```
**Solution:**
```bash
make install-pyinstaller
# or
pip install pyinstaller
```
---
### Issue: Module imports not working
**Error:**
```
ModuleNotFoundError: No module named 'requests'
```
**Solution:**
```bash
pip install -r requirements.txt
# or add to PyInstaller command:
--hidden-import requests
--hidden-import certbot
--hidden-import cryptography
```
---
### Issue: Large file size
**Size ~100+ MB instead of 40-60 MB**
**Causes:**
- Extra modules included
- Not using `--onefile`
- Debug symbols included
**Solution:**
```bash
# Use optimization flags:
pyinstaller --onefile \
--strip \
--exclude-module tkinter \
--exclude-module matplotlib \
letsencrypt_regru_api.py
```
---
### Issue: Certbot not working in executable
**Error:**
```
certbot: command not found
```
**Solution:**
Certbot is called via `subprocess` and must be installed on the system:
**Linux:**
```bash
sudo apt-get install certbot
```
**Windows:**
- Not directly supported
- Use WSL or Docker
---
### Issue: File permission errors
**Error:**
```
Permission denied: /etc/letsencrypt/
```
**Solution:**
```bash
# Linux/macOS
sudo ./dist/letsencrypt-regru --check
# Or set proper permissions:
sudo chmod +x ./dist/letsencrypt-regru
sudo chown root:root ./dist/letsencrypt-regru
```
---
### Issue: Slow startup
**First launch takes 5-10 seconds**
**Reason:**
PyInstaller unpacks files to temporary directory on each run.
**Solution:**
- This is normal behavior for `--onefile`
- Use `--onedir` for faster startup (but many files)
- Temporary directory is cached automatically
---
### Issue: Antivirus blocking file
**Windows Defender marks .exe as virus**
**Reasons:**
- Self-extracting archive looks like malware
- No digital signature
- Unknown executable file
**Solution:**
1. **Add to exclusions:**
- Windows Defender → Settings → Exclusions
2. **Sign file with digital signature:**
```bash
# Requires Code Signing certificate
signtool sign /f cert.pfx /p password dist/letsencrypt-regru.exe
```
3. **Check on VirusTotal:**
- Upload file to virustotal.com
- Add results to README
---
## 📊 Comparison: Python vs Executable
| Feature | Python Script | Executable File |
|---------|---------------|-----------------|
| Size | ~50 KB | ~40-60 MB |
| Dependencies | Requires Python + pip | Standalone |
| Startup Speed | Fast (~1 sec) | Slow (~5-10 sec) |
| Updates | Just replace .py | Requires rebuild |
| Compatibility | Any OS with Python | Only target OS |
| Installation | Requires venv setup | Download and run |
| Certbot | Via subprocess | Via subprocess |
---
## 🎯 Recommendations
### Use Python script if:
- ✅ Python already installed on system
- ✅ Frequent code updates needed
- ✅ Using virtual environment
- ✅ Working on servers (production)
### Use executable file if:
- ✅ Python not installed
- ✅ Simple deployment needed
- ✅ Distributing to end users
- ✅ Testing on clean systems
---
## 📦 Using Built File Examples
### Linux:
```bash
# Download and extract
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
# Install
sudo mv letsencrypt-regru /usr/local/bin/
sudo chmod +x /usr/local/bin/letsencrypt-regru
# Use
sudo letsencrypt-regru --help
sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
```
### Windows:
```powershell
# Download and extract
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"
# Use
cd "C:\Program Files\LetsEncrypt-RegRu"
.\letsencrypt-regru.exe --help
```
---
## 📝 Additional Resources
- [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)
---
## 📄 License
This project uses the license as specified in the main README.md.
---
**Author:** Dmitry Fofanov
**Last Updated:** October 28, 2025

143
docs/en/DESCRIPTION_EN.md Normal file
View File

@@ -0,0 +1,143 @@
# 🔒 SSL Certificate Manager for Let's Encrypt + reg.ru
**Automated Let's Encrypt SSL certificate management with DNS validation via reg.ru API and Nginx Proxy Manager integration**
## 📖 Description
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 synchronization** - automatic Gitea → GitHub sync
### 🚀 Quick Start
```bash
# Install via Makefile
sudo make install
# Configure
sudo nano /etc/letsencrypt/regru_config.json
# Create test certificate (no rate 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
#### English Documentation
- [BUILD_GUIDE_EN.md](../en/BUILD_GUIDE_EN.md) - Complete build guide
- [QUICKSTART_BUILD_EN.md](../en/QUICKSTART_BUILD_EN.md) - Quick build start
- [RELEASE_GUIDE_EN.md](../en/RELEASE_GUIDE_EN.md) - Release creation guide
- [MAKEFILE_COMMANDS_EN.md](../en/MAKEFILE_COMMANDS_EN.md) - Makefile commands reference
- [TESTING_GUIDE_EN.md](../en/TESTING_GUIDE_EN.md) - Testing guide
- [CHEATSHEET_EN.md](../en/CHEATSHEET_EN.md) - Quick reference
- [GITEA_SYNC_EN.md](../en/GITEA_SYNC_EN.md) - Gitea → GitHub sync
- [PROJECT_STRUCTURE_EN.md](../en/PROJECT_STRUCTURE_EN.md) - Project structure
#### Russian Documentation / Русская документация
- [BUILD_GUIDE.md](../ru/BUILD_GUIDE.md) - Полное руководство по сборке
- [QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md) - Быстрый старт сборки
- [RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md) - Руководство по созданию релизов
- [MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md) - Справочник команд Makefile
- [TESTING_GUIDE.md](../ru/TESTING_GUIDE.md) - Руководство по тестированию
- [CHEATSHEET.md](../ru/CHEATSHEET.md) - Быстрая шпаргалка
- [GITEA_SYNC.md](../ru/GITEA_SYNC.md) - Синхронизация Gitea → GitHub
- [PROJECT_STRUCTURE.md](../ru/PROJECT_STRUCTURE.md) - Структура проекта
---
## 🔨 Building Executables
The project supports building standalone executables for Linux and Windows:
```bash
# Build for current OS
make build
# Build for all platforms
make build-all
# Create full release
make release
```
**Result:**
- Linux: `letsencrypt-regru` (~45-55 MB)
- Windows: `letsencrypt-regru.exe` (~40-50 MB)
See [BUILD_GUIDE_EN.md](../en/BUILD_GUIDE_EN.md) for details.
---
## 🎯 Automated Releases
### GitHub Actions
Create a tag to trigger automatic build and release:
```bash
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
```
### Gitea Actions
Same workflow available for self-hosted Gitea:
```bash
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
```
See [RELEASE_GUIDE_EN.md](../en/RELEASE_GUIDE_EN.md) for details.
---
## 👤 Author
**Dmitry Fofanov** @ 2025
## 📄 License
Open Source - Free to use
## 🤝 Contributing
Pull requests are welcome!
## 🔗 Links
- **reg.ru API Documentation**: https://www.reg.ru/support/api
- **Let's Encrypt**: https://letsencrypt.org/
- **Nginx Proxy Manager**: https://nginxproxymanager.com/
- **PyInstaller**: https://pyinstaller.org/
---
**Last Updated:** October 28, 2025

174
docs/en/DOCS_INDEX_EN.md Normal file
View File

@@ -0,0 +1,174 @@
# 📚 Documentation Index
## 🇬🇧 English Documentation
### Main Guides
- **[DESCRIPTION_EN.md](DESCRIPTION_EN.md)** - Project Description & Overview
- **[BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md)** - Complete Build Guide
- **[QUICKSTART_BUILD_EN.md](QUICKSTART_BUILD_EN.md)** - Quick Build Start (5 minutes)
- **[RELEASE_GUIDE_EN.md](RELEASE_GUIDE_EN.md)** - Automated Release Guide
- **[INSTALL_GUIDE_EN.md](INSTALL_GUIDE_EN.md)** - Installation Guide
- **[TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md)** - Testing Guide
### Reference Materials
- **[MAKEFILE_COMMANDS_EN.md](MAKEFILE_COMMANDS_EN.md)** - Makefile Commands Reference
- **[CHEATSHEET_EN.md](CHEATSHEET_EN.md)** - Quick Reference
- **[CHANGELOG_EN.md](CHANGELOG_EN.md)** - Change History
### Developer Guides
- **[PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md)** - Project Structure
- **[GITEA_SYNC_EN.md](GITEA_SYNC_EN.md)** - Gitea → GitHub Synchronization
### SSL & Certificates
- **[SSL_SCRIPTS_README_EN.md](SSL_SCRIPTS_README_EN.md)** - SSL Scripts Documentation
- **[SSL_Certificate_Creation_and_Renewal_EN.md](SSL_Certificate_Creation_and_Renewal_EN.md)** - SSL Certificate Guide
- **[Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md](Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md)** - Let's Encrypt + reg.ru
### Nginx Integration
- **[Nginx_Manager_SSL_Configuration_EN.md](Nginx_Manager_SSL_Configuration_EN.md)** - Nginx Manager SSL Setup
---
## 🇷🇺 Russian Documentation / Русская документация
### Основные руководства / Main Guides
- **[DESCRIPTION.md](../ru/DESCRIPTION.md)** - Описание проекта
- **[BUILD_GUIDE.md](../ru/BUILD_GUIDE.md)** - Полное руководство по сборке
- **[QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md)** - Быстрый старт сборки (5 минут)
- **[RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md)** - Руководство по автоматическим релизам
- **[INSTALL_GUIDE.md](../ru/INSTALL_GUIDE.md)** - Руководство по установке
- **[TESTING_GUIDE.md](../ru/TESTING_GUIDE.md)** - Руководство по тестированию
### Справочная информация / Reference Materials
- **[MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md)** - Справочник команд Makefile
- **[CHEATSHEET.md](../ru/CHEATSHEET.md)** - Быстрая шпаргалка
- **[CHANGELOG.md](../ru/CHANGELOG.md)** - История изменений
### Руководства для разработчиков / Developer Guides
- **[PROJECT_STRUCTURE.md](../ru/PROJECT_STRUCTURE.md)** - Структура проекта
- **[GITEA_SYNC.md](../ru/GITEA_SYNC.md)** - Синхронизация Gitea → GitHub
---
## 🚀 Quick Start / Быстрый старт
### For End Users / Для конечных пользователей
**English:**
1. Start here: [DESCRIPTION_EN.md](DESCRIPTION_EN.md)
2. Install: [INSTALL_GUIDE_EN.md](INSTALL_GUIDE_EN.md)
3. Test: [TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md)
4. Quick reference: [CHEATSHEET_EN.md](CHEATSHEET_EN.md)
**Russian / Русский:**
1. Начните здесь: [DESCRIPTION.md](../ru/DESCRIPTION.md)
2. Установка: [INSTALL_GUIDE.md](../ru/INSTALL_GUIDE.md)
3. Тестирование: [TESTING_GUIDE.md](../ru/TESTING_GUIDE.md)
4. Шпаргалка: [CHEATSHEET.md](../ru/CHEATSHEET.md)
### For Developers / Для разработчиков
**English:**
1. Build guide: [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md)
2. Quick build: [QUICKSTART_BUILD_EN.md](QUICKSTART_BUILD_EN.md)
3. Create release: [RELEASE_GUIDE_EN.md](RELEASE_GUIDE_EN.md)
4. Commands: [MAKEFILE_COMMANDS_EN.md](MAKEFILE_COMMANDS_EN.md)
**Russian / Русский:**
1. Руководство по сборке: [BUILD_GUIDE.md](../ru/BUILD_GUIDE.md)
2. Быстрая сборка: [QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md)
3. Создание релиза: [RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md)
4. Команды: [MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md)
---
## 📖 Documentation by Topic / Документация по темам
### Installation / Установка
| Topic | English | Russian |
|-------|---------|---------|
| Installation Guide | [INSTALL_GUIDE_EN.md](INSTALL_GUIDE_EN.md) | [INSTALL_GUIDE.md](../ru/INSTALL_GUIDE.md) |
| Quick Start | [DESCRIPTION_EN.md](DESCRIPTION_EN.md) | [DESCRIPTION.md](../ru/DESCRIPTION.md) |
### Building / Сборка
| Topic | English | Russian |
|-------|---------|---------|
| Complete Build Guide | [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md) | [BUILD_GUIDE.md](../ru/BUILD_GUIDE.md) |
| Quick Build (5 min) | [QUICKSTART_BUILD_EN.md](QUICKSTART_BUILD_EN.md) | [QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md) |
| Makefile Commands | [MAKEFILE_COMMANDS_EN.md](MAKEFILE_COMMANDS_EN.md) | [MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md) |
### Releases / Релизы
| Topic | English | Russian |
|-------|---------|---------|
| Automated Releases | [RELEASE_GUIDE_EN.md](RELEASE_GUIDE_EN.md) | [RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md) |
| Changelog | [CHANGELOG_EN.md](CHANGELOG_EN.md) | [CHANGELOG.md](../ru/CHANGELOG.md) |
### Testing / Тестирование
| Topic | English | Russian |
|-------|---------|---------|
| Testing Guide | [TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md) | [TESTING_GUIDE.md](../ru/TESTING_GUIDE.md) |
### Reference / Справка
| Topic | English | Russian |
|-------|---------|---------|
| Quick Reference | [CHEATSHEET_EN.md](CHEATSHEET_EN.md) | [CHEATSHEET.md](../ru/CHEATSHEET.md) |
| Project Structure | [PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md) | [PROJECT_STRUCTURE.md](../ru/PROJECT_STRUCTURE.md) |
---
## 📊 Documentation Status / Статус документации
| Document | English | Russian | Status |
|----------|---------|---------|--------|
| Description | ✅ | ✅ | Complete |
| Build Guide | ✅ | ✅ | Complete |
| Quick Build | ✅ | ✅ | Complete |
| Release Guide | ✅ | ✅ | Complete |
| Install Guide | ✅ | ✅ | Complete |
| Makefile Commands | ✅ | ✅ | Complete |
| Testing Guide | ✅ | ✅ | Complete |
| Cheatsheet | ✅ | ✅ | Complete |
| Project Structure | ✅ | ✅ | Complete |
| Gitea Sync | ✅ | ✅ | Complete |
| Changelog | ✅ | ✅ | Complete |
**Legend:**
- ✅ Complete / Готово
- 🔄 In Progress / В разработке
- ❌ Not Started / Не начато
---
## 🎯 Choose Your Language / Выберите язык
### 🇬🇧 Prefer English?
👉 Start with [DESCRIPTION_EN.md](DESCRIPTION_EN.md)
### 🇷🇺 Предпочитаете русский?
👉 Начните с [DESCRIPTION.md](../ru/DESCRIPTION.md)
---
## 💡 Contributing / Вклад
Help improve documentation / Помогите улучшить документацию:
- Report issues / Сообщайте об ошибках
- Suggest improvements / Предлагайте улучшения
- Fix typos / Исправляйте опечатки
- Translate / Переводите
---
## 🔗 External Resources / Внешние ресурсы
- **reg.ru API**: https://www.reg.ru/support/api
- **Let's Encrypt**: https://letsencrypt.org/
- **Nginx Proxy Manager**: https://nginxproxymanager.com/
- **PyInstaller**: https://pyinstaller.org/
- **GitHub Actions**: https://docs.github.com/actions
- **Gitea Actions**: https://docs.gitea.com/usage/actions/overview
---
**Last Updated / Обновлено**: October 28, 2025
**Maintained by / Поддерживает**: Dmitry Fofanov

365
docs/en/INSTALL_GUIDE_EN.md Normal file
View File

@@ -0,0 +1,365 @@
# Installation Guide for letsencrypt_regru.sh
**Author:** Dmitry Fofanov
**Date:** October 28, 2025
## Description
`letsencrypt_regru.sh` is an automated installer for Let's Encrypt Manager with reg.ru and Nginx Proxy Manager integration.
The script automates:
- Installation of all system dependencies
- Python virtual environment creation
- Python library installation (requests, cryptography, certbot)
- Interactive configuration setup
- Creating and configuring systemd services
- Automatic certificate renewal setup
## Requirements
- Linux (Debian/Ubuntu, CentOS/RHEL/Fedora)
- Root access (sudo)
- Minimum 512MB RAM
- Minimum 1GB free disk space
- Internet connection
## Quick Installation
**Method 1: Automatic Installation (Recommended)**
The fastest way - run installation directly from GitHub:
```bash
sudo bash -c "$(curl -fsSL https://github.com/DFofanov/configure_nginx_manager/raw/refs/heads/master/letsencrypt_regru.sh)"
```
This command will:
- Automatically download the installation script
- Run it with root privileges
- Guide you through interactive setup
**Method 2: Clone Repository**
If you want to review the code before installation:
```bash
# 1. Download repository
git clone https://github.com/DFofanov/configure_nginx_manager.git
cd configure_nginx_manager
# 2. Make executable
chmod +x letsencrypt_regru.sh
# 3. Run installation
sudo ./letsencrypt_regru.sh
```
## Interactive Setup
During installation, the script will ask for:
1. **Domain** - your main domain (e.g., `example.com`)
2. **Email** - for Let's Encrypt notifications
3. **reg.ru credentials:**
- Username
- Password
4. **Wildcard certificate** - create `*.example.com` (recommended: Yes)
5. **NPM integration** (optional):
- NPM address (e.g., `http://10.10.10.14:81`)
- NPM login email
- NPM password
## Structure After Installation
```
/opt/letsencrypt-regru/ # Application
├── letsencrypt_regru_api.py # Main script
├── venv/ # Python virtual environment
└── docs/ # Documentation
/etc/letsencrypt-regru/ # Configuration
└── config.json # Settings (credentials, domain, NPM)
/var/log/letsencrypt-regru/ # Logs
└── letsencrypt_regru.log
/etc/letsencrypt/live/ # Let's Encrypt certificates
└── example.com/
├── privkey.pem
├── cert.pem
├── chain.pem
└── fullchain.pem
/etc/systemd/system/ # Systemd services
├── letsencrypt-regru.service # Renewal service
└── letsencrypt-regru.timer # Timer (every 12 hours)
/usr/local/bin/
└── letsencrypt-regru # Global command
```
## Using letsencrypt-regru Command
After installation, a convenient command is available:
```bash
# Check current certificate expiration
letsencrypt-regru --check
# Obtain new Let's Encrypt certificate
letsencrypt-regru --obtain
# Renew existing certificate
letsencrypt-regru --renew
# Automatically check and renew if needed
letsencrypt-regru --auto
# Create test self-signed certificate
letsencrypt-regru --test-cert
# Show help
letsencrypt-regru --help
```
## Automatic Renewal
The installer configures a systemd timer for automatic checks:
```bash
# Check timer status
systemctl status letsencrypt-regru.timer
# When is next run
systemctl list-timers letsencrypt-regru.timer
# View run history
journalctl -u letsencrypt-regru
# Follow logs in real-time
journalctl -u letsencrypt-regru -f
```
### Timer Settings
Default settings:
- First run: 15 minutes after system boot
- Frequency: every 12 hours
- Random delay: up to 1 hour (to avoid creating load)
Can be modified in `/etc/systemd/system/letsencrypt-regru.timer`.
## Editing Configuration
```bash
# Open configuration in editor
sudo nano /etc/letsencrypt-regru/config.json
# After changes, restart timer
sudo systemctl restart letsencrypt-regru.timer
```
### Example 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"
}
```
## Updating Application
```bash
# Download latest version
cd configure_nginx_manager
git pull
# Run update
sudo ./letsencrypt_regru.sh update
```
Update will:
- Stop timer
- Update script
- Update Python dependencies
- Restart timer
## Uninstallation
```bash
# Complete application removal
sudo ./letsencrypt_regru.sh uninstall
```
Script will remove:
- Application from `/opt/letsencrypt-regru/`
- Systemd services
- Global command
Certificates in `/etc/letsencrypt/live/` are preserved!
Optionally you can remove:
- Configuration `/etc/letsencrypt-regru/`
- Logs `/var/log/letsencrypt-regru/`
## Viewing Logs
```bash
# Systemd logs (recommended)
journalctl -u letsencrypt-regru -f
# Log file
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
# Last 100 lines
tail -n 100 /var/log/letsencrypt-regru/letsencrypt_regru.log
```
## Troubleshooting
### Installation Check
```bash
# Check command availability
which letsencrypt-regru
# Check Python environment
ls -la /opt/letsencrypt-regru/venv/
# Check systemd services
systemctl list-unit-files | grep letsencrypt-regru
```
### Installation Errors
**Error: "Permission denied"**
```bash
# Run with sudo
sudo ./letsencrypt_regru.sh
```
**Error: "Package not found"**
```bash
# Update package lists
sudo apt-get update # Debian/Ubuntu
sudo yum update # CentOS/RHEL
```
**Error: "Python module not found"**
```bash
# Reinstall virtual environment
sudo rm -rf /opt/letsencrypt-regru/venv
sudo ./letsencrypt_regru.sh
```
### Certificate Issues
**Certificate not created**
```bash
# Check logs
tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
# Check configuration
cat /etc/letsencrypt-regru/config.json
# Try manually
letsencrypt-regru --obtain -v
```
**DNS not updating**
```bash
# Increase wait time in config.json
"dns_propagation_wait": 120,
"dns_check_attempts": 20
```
### NPM Issues
**Not uploading to NPM**
```bash
# Check NPM availability
curl http://192.168.10.14:81
# Check credentials in config.json
# Try manually
letsencrypt-regru --test-cert -v
```
## Supported OS
✅ Debian 10, 11, 12
✅ Ubuntu 20.04, 22.04, 24.04
✅ CentOS 7, 8
✅ RHEL 7, 8, 9
✅ Fedora 35+
## Additional Features
### Test Certificate
For testing without Let's Encrypt rate limits:
```bash
letsencrypt-regru --test-cert
```
Creates self-signed certificate valid for 90 days.
### Manual Renewal Run
```bash
# Start service manually
sudo systemctl start letsencrypt-regru.service
# Check status
systemctl status letsencrypt-regru.service
```
### Change Check Frequency
Edit `/etc/systemd/system/letsencrypt-regru.timer`:
```ini
[Timer]
# Every 6 hours instead of 12
OnUnitActiveSec=6h
```
Then:
```bash
sudo systemctl daemon-reload
sudo systemctl restart letsencrypt-regru.timer
```
## Security
- Configuration with passwords has `600` permissions (root only)
- Certificate private keys have `600` permissions
- All operations run as root
- Logs accessible only to root
## Support
- GitHub Issues: https://github.com/DFofanov/configure_nginx_manager/issues
- Documentation: `/opt/letsencrypt-regru/docs/`
- Email: admin@dfv24.com
---
**Developed by:** Dmitry Fofanov
**Date:** October 28, 2025
**Version:** 2.0

View File

@@ -0,0 +1,159 @@
# Makefile Commands - Quick Reference
## 📋 Command Categories
### 🛠️ Installation and Deployment
```bash
make install # Full application installation
make uninstall # Remove application
make status # Check installation status
make check-config # Verify configuration
```
### 🔨 Building Executables
```bash
make build # Build for current OS
make build-linux # Build for Linux
make build-windows # Build for Windows
make build-all # Build for all platforms
```
### 📦 Creating Packages
```bash
make package-linux # Create tar.gz for Linux
make package-windows # Create zip for Windows
make release # Full release cycle
```
### 🧪 Testing
```bash
make test-run # Test script run
make test-cert # Create test certificate
make test-build # Test built file
```
### 🚀 Running Operations
```bash
make run # Automatic check and renewal
make obtain # Obtain new certificate
make renew # Renew existing certificate
```
### 📊 Monitoring
```bash
make logs # Show logs
make status # Service status
```
### 🧹 Cleanup
```bash
make clean # Clean Python temporary files
make clean-build # Clean build artifacts
```
### Information
```bash
make help # Show help
make build-info # Build environment information
```
---
## 🎯 Common Scenarios
### Initial Installation
```bash
sudo make install
sudo make check-config
sudo make test-run
```
### Building Release for GitHub
```bash
make clean-build
make release
# Files will be in dist/
```
### Creating Test Environment
```bash
sudo make install
sudo make test-cert
sudo make status
```
### Manual Certificate Renewal
```bash
sudo make run
sudo make logs
```
### Removing Application
```bash
sudo make uninstall
```
---
## 📝 Environment Variables
Main variables defined in 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
```
---
## 🔐 Required Permissions
**Require sudo:**
- `make install`
- `make uninstall`
- `make run`
- `make obtain`
- `make renew`
- `make test-run`
- `make test-cert`
**Don't require sudo:**
- `make build*`
- `make package*`
- `make clean*`
- `make help`
- `make build-info`
---
## 💡 Useful Combinations
```bash
# Full reinstallation
sudo make uninstall && sudo make install
# Build and test
make build && make test-build
# Clean and release
make clean-build && make release
# Post-installation check
sudo make status && sudo make test-run && sudo make logs
```
---
**Author:** Dmitry Fofanov
**Last Updated:** October 28, 2025

View File

@@ -0,0 +1,111 @@
# 🎯 Quick Start - Building Executables
This is a quick guide for those who want to build an executable file fast.
## For Linux
### 1. Install dependencies
```bash
sudo apt-get update
sudo apt-get install -y python3 python3-pip git make
```
### 2. Clone repository
```bash
git clone https://github.com/DFofanov/configure_nginx_manager.git
cd configure_nginx_manager
```
### 3. Build
```bash
make build-linux
```
### 4. Result
```bash
ls -lh dist/letsencrypt-regru
# Executable file is ready!
```
### 5. Install (optional)
```bash
sudo cp dist/letsencrypt-regru /usr/local/bin/
sudo chmod +x /usr/local/bin/letsencrypt-regru
```
### 6. Use
```bash
letsencrypt-regru --help
```
---
## For Windows
### 1. Install Python
Download from [python.org](https://www.python.org/downloads/) and install
### 2. Clone repository
```powershell
git clone https://github.com/DFofanov/configure_nginx_manager.git
cd configure_nginx_manager
```
### 3. Build
```powershell
make build-windows
```
### 4. Result
```powershell
dir dist\letsencrypt-regru.exe
# Executable file is ready!
```
### 5. Use
```powershell
.\dist\letsencrypt-regru.exe --help
```
---
## Creating Release for Both Platforms
```bash
# This will create packages for Linux and Windows
make release
```
**Result in `dist/`:**
- `letsencrypt-regru-linux-x86_64.tar.gz`
- `letsencrypt-regru-windows-x86_64.zip`
---
## Useful Commands
```bash
# Show help for all commands
make help
# Build environment information
make build-info
# Test built file
make test-build
# Clean artifacts
make clean-build
```
---
## ❓ Problems?
See [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md) for detailed instructions and troubleshooting.
---
**File size:** ~40-60 MB (including Python runtime)
**Build time:** ~2-5 minutes
**Requirements:** Python 3.8+, PyInstaller

178
docs/en/RELEASE_GUIDE_EN.md Normal file
View File

@@ -0,0 +1,178 @@
# 🎯 Quick Guide: Automatic Releases
## For GitHub
### 1. Creating a Release
```bash
# Create tag
git tag -a v1.0.0 -m "Release version 1.0.0"
# Push tag
git push origin v1.0.0
```
### 2. What Happens Automatically
GitHub Actions will run `.github/workflows/build-release.yml`:
1. ✅ Build Linux version (Ubuntu runner)
2. ✅ Build Windows version (Windows runner)
3. ✅ Create packages
4. ✅ Generate SHA256 checksums
5. ✅ Create GitHub Release
6. ✅ Upload artifacts
### 3. Result
Release will appear at: `https://github.com/USER/REPO/releases/tag/v1.0.0`
**Files:**
- `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`
---
## For Gitea
### 1. Setup (one time)
#### Enable Actions in Gitea:
Edit `app.ini`:
```ini
[actions]
ENABLED = true
DEFAULT_ACTIONS_URL = https://gitea.com
```
#### Install Gitea Runner:
```bash
# Download
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner
chmod +x act_runner
# Register
./act_runner register --no-interactive \
--instance https://your-gitea.com \
--token YOUR_RUNNER_TOKEN
# Run
./act_runner daemon
```
### 2. Creating a Release
```bash
# Create tag
git tag -a v1.0.0 -m "Release version 1.0.0"
# Push tag
git push origin v1.0.0
```
### 3. What Happens
Gitea Actions will run `.gitea/workflows/release.yml`:
1. ✅ Build Linux version
2. ✅ Build Windows version
3. ✅ Create packages
4. ✅ Generate SHA256 + MD5 checksums
5. ✅ Create Gitea Release
6. ✅ Detailed release notes
### 4. Result
Release will appear at: `https://your-gitea.com/USER/REPO/releases/tag/v1.0.0`
---
## 🔧 Pre-Release Checklist
```bash
# 1. Local build
make clean-build
make release
# 2. Testing
make test-build
# 3. Check files
ls -lh dist/
# 4. If all OK - create tag
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
```
---
## 📊 Monitoring
### GitHub:
`https://github.com/USER/REPO/actions`
### Gitea:
`https://your-gitea.com/USER/REPO/actions`
---
## 🐛 If Something Goes Wrong
### Delete tag and release:
```bash
# Delete local tag
git tag -d v1.0.0
# Delete remote tag
git push --delete origin v1.0.0
# Delete release manually via web interface
```
### Recreate release:
```bash
# Fix the issue
git commit -am "Fix build"
# Recreate tag
git tag -a v1.0.0 -m "Release 1.0.0" --force
git push origin v1.0.0 --force
```
---
## 📝 Semantic Versioning
```bash
# Major (breaking changes)
git tag v2.0.0
# Minor (new features)
git tag v1.1.0
# Patch (bug fixes)
git tag v1.0.1
# Pre-release
git tag v1.0.0-beta.1
git tag v1.0.0-rc.1
```
---
**See also:**
- [.gitea/README.md](../../.gitea/README.md) - Full Gitea Actions documentation
- [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md) - Build guide
---
**Author:** Dmitry Fofanov
**Last Updated:** October 28, 2025

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

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

View File

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

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

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

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

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

13
requirements.txt Normal file
View File

@@ -0,0 +1,13 @@
# Зависимости для Let's Encrypt RegRu Manager
# HTTP запросы к API
requests>=2.25.0
# Работа с SSL сертификатами
cryptography>=3.4.0
# Let's Encrypt клиент
certbot>=1.12.0
# Опционально: для сборки исполняемых файлов
pyinstaller>=4.10