diff --git a/.gitea/README.md b/.gitea/README.md new file mode 100644 index 0000000..95d5dd4 --- /dev/null +++ b/.gitea/README.md @@ -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 и могут использоваться на обеих платформах. diff --git a/.gitea/workflows/build-release.yml b/.gitea/workflows/build-release.yml new file mode 100644 index 0000000..49a75c4 --- /dev/null +++ b/.gitea/workflows/build-release.yml @@ -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 diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..a5256af --- /dev/null +++ b/.gitea/workflows/release.yml @@ -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 и т.д. diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml new file mode 100644 index 0000000..66ec619 --- /dev/null +++ b/.github/workflows/build-release.yml @@ -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 }} diff --git a/.gitignore b/.gitignore index 541cd64..506cf93 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,13 @@ PIPE_MANIFEST *.manifest *.spec +# PyInstaller build artifacts +build/ +dist/ +*.tar.gz +*.zip +*.sha256 + # Installer logs pip-log.txt pip-delete-this-directory.txt diff --git a/Makefile b/Makefile index 795e0a8..5b07aa5 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,14 @@ YELLOW = \033[1;33m BLUE = \033[0;34m 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)╚════════════════════════════════════════════════════════════════╝$(NC)" @echo "" - @echo "$(GREEN)Доступные команды:$(NC)" + @echo "$(GREEN)Команды для установки:$(NC)" @echo "" @echo " $(YELLOW)make install$(NC) - Установить скрипт и настроить автоматизацию" @echo " $(YELLOW)make uninstall$(NC) - Удалить скрипт и очистить систему" @@ -45,6 +52,18 @@ help: @echo " $(YELLOW)make test-run$(NC) - Тестовый запуск скрипта" @echo " $(YELLOW)make test-cert$(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 "" @@ -449,5 +468,301 @@ clean: @find . -type d -name "__pycache__" -delete @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 diff --git a/README.md b/README.md index 6cde095..2e93b65 100644 --- a/README.md +++ b/README.md @@ -16,18 +16,19 @@ Python скрипт теперь автоматически загружает ## Содержание 1. [Введение](#введение) 2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush) -3. [Быстрый старт](#-быстрый-старт) -4. [Установка через Makefile](#-установка-через-makefile) -5. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата) -6. [Требования](#требования) -7. [Установка зависимостей](#установка-зависимостей) -8. [Настройка](#настройка) -9. [Использование Bash скрипта](#использование-bash-скрипта) -10. [Использование Python скрипта](#использование-python-скрипта) -11. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager) -12. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов) -13. [Автоматизация обновления](#автоматизация-обновления) -14. [Устранение неполадок](#устранение-неполадок) +3. [🔨 Сборка исполняемых файлов](#-сборка-исполняемых-файлов) +4. [Быстрый старт](#-быстрый-старт) +5. [Установка через Makefile](#-установка-через-makefile) +6. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата) +7. [Требования](#требования) +8. [Установка зависимостей](#установка-зависимостей) +9. [Настройка](#настройка) +10. [Использование Bash скрипта](#использование-bash-скрипта) +11. [Использование Python скрипта](#использование-python-скрипта) +12. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager) +13. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов) +14. [Автоматизация обновления](#автоматизация-обновления) +15. [Устранение неполадок](#устранение-неполадок) --- @@ -697,7 +698,76 @@ sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json --- -## 🚀 Быстрый старт +## � Сборка исполняемых файлов + +### PyInstaller - компиляция в исполняемые файлы + +Скрипт можно скомпилировать в исполняемый файл для Linux и Windows с помощью PyInstaller. + +**Преимущества:** +- ✅ Не требуется установленный Python на целевой системе +- ✅ Все зависимости включены в один файл +- ✅ Простота распространения и развертывания + +**Недостатки:** +- ❌ Большой размер (~40-60 MB) +- ❌ Certbot всё равно должен быть установлен в системе +- ❌ Медленный первый запуск + +### Быстрая сборка + +#### Для Linux: +```bash +make build-linux +``` + +#### Для Windows: +```bash +make build-windows +``` + +#### Для всех платформ: +```bash +make build-all +``` + +### Полный релиз с пакетами + +```bash +# Создаст tar.gz для Linux и zip для Windows +make release +``` + +**Результат:** +- `dist/letsencrypt-regru` - Linux executable +- `dist/letsencrypt-regru.exe` - Windows executable +- `dist/letsencrypt-regru-linux-x86_64.tar.gz` +- `dist/letsencrypt-regru-windows-x86_64.zip` + +### Использование собранного файла + +**Linux:** +```bash +# Установка +sudo cp dist/letsencrypt-regru /usr/local/bin/ +sudo chmod +x /usr/local/bin/letsencrypt-regru + +# Использование +sudo letsencrypt-regru --help +sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json +``` + +**Windows:** +```powershell +# Просто запустить +.\dist\letsencrypt-regru.exe --help +``` + +📖 **Подробнее:** См. [BUILD_GUIDE.md](BUILD_GUIDE.md) для детальных инструкций по сборке. + +--- + +## �🚀 Быстрый старт ### За 3 простых шага получите SSL сертификат в Nginx Proxy Manager! diff --git a/docs/Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md b/docs/en/Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md similarity index 100% rename from docs/Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md rename to docs/en/Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md diff --git a/docs/en/BUILD_GUIDE_EN.md b/docs/en/BUILD_GUIDE_EN.md new file mode 100644 index 0000000..7fdf1b8 --- /dev/null +++ b/docs/en/BUILD_GUIDE_EN.md @@ -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 diff --git a/CHANGELOG_EN.md b/docs/en/CHANGELOG_EN.md similarity index 100% rename from CHANGELOG_EN.md rename to docs/en/CHANGELOG_EN.md diff --git a/CHEATSHEET_EN.md b/docs/en/CHEATSHEET_EN.md similarity index 100% rename from CHEATSHEET_EN.md rename to docs/en/CHEATSHEET_EN.md diff --git a/docs/en/DESCRIPTION_EN.md b/docs/en/DESCRIPTION_EN.md new file mode 100644 index 0000000..85c219e --- /dev/null +++ b/docs/en/DESCRIPTION_EN.md @@ -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 diff --git a/docs/en/DOCS_INDEX_EN.md b/docs/en/DOCS_INDEX_EN.md new file mode 100644 index 0000000..a3dc590 --- /dev/null +++ b/docs/en/DOCS_INDEX_EN.md @@ -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 diff --git a/GITEA_SYNC_EN.md b/docs/en/GITEA_SYNC_EN.md similarity index 100% rename from GITEA_SYNC_EN.md rename to docs/en/GITEA_SYNC_EN.md diff --git a/docs/en/INSTALL_GUIDE_EN.md b/docs/en/INSTALL_GUIDE_EN.md new file mode 100644 index 0000000..dcda2cd --- /dev/null +++ b/docs/en/INSTALL_GUIDE_EN.md @@ -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 diff --git a/docs/en/MAKEFILE_COMMANDS_EN.md b/docs/en/MAKEFILE_COMMANDS_EN.md new file mode 100644 index 0000000..7b019a1 --- /dev/null +++ b/docs/en/MAKEFILE_COMMANDS_EN.md @@ -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 diff --git a/docs/Nginx_Manager_SSL_Configuration_EN.md b/docs/en/Nginx_Manager_SSL_Configuration_EN.md similarity index 100% rename from docs/Nginx_Manager_SSL_Configuration_EN.md rename to docs/en/Nginx_Manager_SSL_Configuration_EN.md diff --git a/PROJECT_STRUCTURE_EN.md b/docs/en/PROJECT_STRUCTURE_EN.md similarity index 100% rename from PROJECT_STRUCTURE_EN.md rename to docs/en/PROJECT_STRUCTURE_EN.md diff --git a/docs/en/QUICKSTART_BUILD_EN.md b/docs/en/QUICKSTART_BUILD_EN.md new file mode 100644 index 0000000..d1efbe5 --- /dev/null +++ b/docs/en/QUICKSTART_BUILD_EN.md @@ -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 diff --git a/docs/en/RELEASE_GUIDE_EN.md b/docs/en/RELEASE_GUIDE_EN.md new file mode 100644 index 0000000..0e6cf64 --- /dev/null +++ b/docs/en/RELEASE_GUIDE_EN.md @@ -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 diff --git a/docs/SSL_Certificate_Creation_and_Renewal_EN.md b/docs/en/SSL_Certificate_Creation_and_Renewal_EN.md similarity index 100% rename from docs/SSL_Certificate_Creation_and_Renewal_EN.md rename to docs/en/SSL_Certificate_Creation_and_Renewal_EN.md diff --git a/docs/SSL_SCRIPTS_README_EN.md b/docs/en/SSL_SCRIPTS_README_EN.md similarity index 100% rename from docs/SSL_SCRIPTS_README_EN.md rename to docs/en/SSL_SCRIPTS_README_EN.md diff --git a/TESTING_GUIDE_EN.md b/docs/en/TESTING_GUIDE_EN.md similarity index 100% rename from TESTING_GUIDE_EN.md rename to docs/en/TESTING_GUIDE_EN.md diff --git a/docs/Add Let's Encrypt Certificate для провайдера reg.ru.md b/docs/ru/Add Let's Encrypt Certificate для провайдера reg.ru.md similarity index 100% rename from docs/Add Let's Encrypt Certificate для провайдера reg.ru.md rename to docs/ru/Add Let's Encrypt Certificate для провайдера reg.ru.md diff --git a/docs/ru/BUILD_GUIDE.md b/docs/ru/BUILD_GUIDE.md new file mode 100644 index 0000000..fad01f3 --- /dev/null +++ b/docs/ru/BUILD_GUIDE.md @@ -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 diff --git a/CHANGELOG.md b/docs/ru/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to docs/ru/CHANGELOG.md diff --git a/CHEATSHEET.md b/docs/ru/CHEATSHEET.md similarity index 100% rename from CHEATSHEET.md rename to docs/ru/CHEATSHEET.md diff --git a/DESCRIPTION.md b/docs/ru/DESCRIPTION.md similarity index 100% rename from DESCRIPTION.md rename to docs/ru/DESCRIPTION.md diff --git a/DOCS_INDEX.md b/docs/ru/DOCS_INDEX.md similarity index 100% rename from DOCS_INDEX.md rename to docs/ru/DOCS_INDEX.md diff --git a/GITEA_SYNC.md b/docs/ru/GITEA_SYNC.md similarity index 100% rename from GITEA_SYNC.md rename to docs/ru/GITEA_SYNC.md diff --git a/docs/INSTALL_GUIDE.md b/docs/ru/INSTALL_GUIDE.md similarity index 100% rename from docs/INSTALL_GUIDE.md rename to docs/ru/INSTALL_GUIDE.md diff --git a/docs/ru/MAKEFILE_COMMANDS.md b/docs/ru/MAKEFILE_COMMANDS.md new file mode 100644 index 0000000..eaeb374 --- /dev/null +++ b/docs/ru/MAKEFILE_COMMANDS.md @@ -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 +``` diff --git a/PROJECT_STRUCTURE.md b/docs/ru/PROJECT_STRUCTURE.md similarity index 100% rename from PROJECT_STRUCTURE.md rename to docs/ru/PROJECT_STRUCTURE.md diff --git a/docs/ru/QUICKSTART_BUILD.md b/docs/ru/QUICKSTART_BUILD.md new file mode 100644 index 0000000..3732f96 --- /dev/null +++ b/docs/ru/QUICKSTART_BUILD.md @@ -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 diff --git a/docs/ru/RELEASE_GUIDE.md b/docs/ru/RELEASE_GUIDE.md new file mode 100644 index 0000000..e647e91 --- /dev/null +++ b/docs/ru/RELEASE_GUIDE.md @@ -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) - Руководство по сборке diff --git a/docs/SSL_SCRIPTS_README.md b/docs/ru/SSL_SCRIPTS_README.md similarity index 100% rename from docs/SSL_SCRIPTS_README.md rename to docs/ru/SSL_SCRIPTS_README.md diff --git a/TESTING_GUIDE.md b/docs/ru/TESTING_GUIDE.md similarity index 100% rename from TESTING_GUIDE.md rename to docs/ru/TESTING_GUIDE.md diff --git a/docs/Настройке Nginx Manager с SSL .md b/docs/ru/Настройке Nginx Manager с SSL .md similarity index 100% rename from docs/Настройке Nginx Manager с SSL .md rename to docs/ru/Настройке Nginx Manager с SSL .md diff --git a/docs/Создание и продление SSL сертификата.md b/docs/ru/Создание и продление SSL сертификата.md similarity index 100% rename from docs/Создание и продление SSL сертификата.md rename to docs/ru/Создание и продление SSL сертификата.md diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..2a13658 --- /dev/null +++ b/requirements.txt @@ -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