# Сборка и релизы Проект поддерживает сборку исполняемых файлов через PyInstaller. ## Быстрый старт - `make build` — сборка для текущей ОС - `make build-linux` — сборка для Linux - `make build-windows` — сборка для Windows - `make release` — сборка + упаковка (linux tar.gz + windows zip) + checksums Результаты появляются в папке `dist/`. ## Что важно понимать - бинарник получается крупным (~40–60 МБ) - системный `certbot` всё равно нужен - кросс-компиляция (Windows→Linux, Linux→Windows) обычно не рекомендуется ## Пакеты релиза - Linux: `letsencrypt-regru-linux-x86_64.tar.gz` - Windows: `letsencrypt-regru-windows-x86_64.zip` ## Автоматические релизы по тегам Типовой сценарий: 1) создать тег: `git tag -a v1.0.0 -m "Release 1.0.0"` 2) отправить тег: `git push origin v1.0.0` Далее CI (GitHub Actions / Gitea Actions) может автоматически: - собрать артефакты - создать Release - прикрепить файлы Подробности зависят от ваших workflows. ## Ручной запуск релиза (workflow_dispatch) Если в workflow релиза включён `workflow_dispatch`, его можно запускать вручную: - из UI Actions - или через Makefile (API dispatch): `make ci-release TAG=v1.0.0` Для запуска через Makefile нужен токен (любой из): `DFGIT_TOKEN` / `GIT_TOKEN` / `GITEA_TOKEN` / `GITEA_ACCESS_TOKEN`. Makefile отправляет запрос на `DFGIT_URL` (по умолчанию `https://gitea.example.com`) в репозиторий `DFGIT_REPO`. --- ## Appendix (migrated from docs/QUICKSTART_BUILD.md) ## 🎯 Быстрый старт - Сборка исполняемых файлов Это краткое руководство для тех, кто хочет быстро собрать исполняемый файл. ### Для Linux #### 1. Установите зависимости ```bash sudo apt-get update sudo apt-get install -y python3 python3-pip git make ``` #### 2. Клонируйте репозиторий ```bash git clone https://github.com/DFofanov/configure_nginx_manager.git cd configure_nginx_manager ``` #### 3. Соберите ```bash make build-linux ``` #### 4. Результат ```bash ls -lh dist/letsencrypt-regru ## Исполняемый файл готов! ``` #### 5. Установите (опционально) ```bash sudo cp dist/letsencrypt-regru /usr/local/bin/ sudo chmod +x /usr/local/bin/letsencrypt-regru ``` #### 6. Используйте ```bash letsencrypt-regru --help ``` --- ### Для Windows #### 1. Установите Python Скачайте с [python.org](https://www.python.org/downloads/) и установите #### 2. Клонируйте репозиторий ```powershell git clone https://github.com/DFofanov/configure_nginx_manager.git cd configure_nginx_manager ``` #### 3. Соберите ```powershell make build-windows ``` #### 4. Результат ```powershell dir dist\letsencrypt-regru.exe ## Исполняемый файл готов! ``` #### 5. Используйте ```powershell .\dist\letsencrypt-regru.exe --help ``` --- ### Создание релиза для обеих платформ ```bash ## Это создаст пакеты для Linux и Windows make release ``` **Результат в `dist/`:** - `letsencrypt-regru-linux-x86_64.tar.gz` - `letsencrypt-regru-windows-x86_64.zip` --- ### Полезные команды ```bash ## Показать справку по всем командам make help ## Информация о среде сборки make build-info ## Протестировать собранный файл make test-build ## Очистить артефакты make clean-build ``` --- ### ❓ Проблемы? См. [BUILD_GUIDE.md](Build_and_Release.md) для подробных инструкций и решения проблем. --- **Размер файла:** ~40-60 MB (включая Python runtime) **Время сборки:** ~2-5 минут **Требования:** Python 3.8+, PyInstaller --- ## Appendix (migrated from docs/BUILD_GUIDE.md) ## 🔨 Руководство по сборке исполняемых файлов Данное руководство описывает процесс компиляции Python скрипта `letsencrypt_regru_api.py` в исполняемые файлы для Linux и Windows с использованием PyInstaller. ### 📋 Содержание - [Преимущества исполняемых файлов](#преимущества-исполняемых-файлов) - [Быстрый старт](#быстрый-старт) - [Подробные инструкции](#подробные-инструкции) - [Кросс-компиляция](#кросс-компиляция) - [Troubleshooting](#troubleshooting) --- ### ✅ Преимущества исполняемых файлов #### Плюсы: - ✅ **Один файл** - легко распространять и развертывать - ✅ **Автономность** - не требует установленного Python на целевой системе - ✅ **Все зависимости включены** - requests, cryptography и certbot модули упакованы - ✅ **Простота запуска** - просто скачать и запустить #### Минусы: - ❌ **Большой размер** - ~40-60 MB (включая Python runtime и библиотеки) - ❌ **Certbot зависимость** - системный certbot все равно требуется - ❌ **Медленный первый запуск** - распаковка занимает несколько секунд - ❌ **Требуется пересборка** - при изменении кода нужно пересобирать --- ### 🚀 Быстрый старт #### Сборка для текущей ОС: ```bash make build ``` #### Сборка для всех платформ: ```bash make build-all ``` #### Полный релиз (сборка + пакеты): ```bash make release ``` --- ### 📖 Подробные инструкции #### 1. Установка зависимостей ##### Вариант А: Автоматическая установка ```bash make install-pyinstaller ``` ##### Вариант Б: Ручная установка ```bash pip install pyinstaller pip install -r requirements.txt ``` #### 2. Сборка для Linux **На Linux системе:** ```bash make build-linux ``` **Результат:** - Файл: `dist/letsencrypt-regru` - Размер: ~45-55 MB - Формат: ELF 64-bit executable **Тестирование:** ```bash ./dist/letsencrypt-regru --help sudo ./dist/letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json ``` #### 3. Сборка для Windows **На Windows системе (PowerShell/CMD):** ```bash make build-windows ``` **Результат:** - Файл: `dist/letsencrypt-regru.exe` - Размер: ~40-50 MB - Формат: PE32+ executable (Windows) **Тестирование:** ```powershell .\dist\letsencrypt-regru.exe --help ``` #### 4. Создание пакетов для распространения ##### Linux пакет (tar.gz): ```bash make package-linux ``` **Содержимое пакета:** - `letsencrypt-regru` - исполняемый файл - `README.md` - документация - `systemd/` - systemd unit файлы - `config.json.example` - пример конфигурации **Результат:** `dist/letsencrypt-regru-linux-x86_64.tar.gz` ##### Windows пакет (zip): ```bash make package-windows ``` **Результат:** `dist/letsencrypt-regru-windows-x86_64.zip` #### 5. Полный цикл релиза Создание релиза со всеми артефактами: ```bash make release ``` **Что происходит:** 1. Очистка старых артефактов (`clean-build`) 2. Установка/обновление PyInstaller 3. Сборка для Linux (`build-linux`) 4. Сборка для Windows (`build-windows`) 5. Создание пакета для Linux (`package-linux`) 6. Создание пакета для Windows (`package-windows`) 7. Генерация SHA256 контрольных сумм **Результат в `dist/`:** ``` letsencrypt-regru # Linux executable letsencrypt-regru.exe # Windows executable letsencrypt-regru-linux-x86_64.tar.gz letsencrypt-regru-windows-x86_64.zip ``` --- ### 🔄 Кросс-компиляция #### ⚠️ Важные замечания **Не рекомендуется:** - Собирать Linux версию на Windows - Собирать Windows версию на Linux - Собирать macOS версию на других ОС **Причины:** - Несовместимость системных библиотек - Разные форматы исполняемых файлов - Проблемы с путями и разделителями #### Рекомендации ##### Для Linux сборки: 1. Используйте Ubuntu 20.04+ или Debian 10+ 2. Установите build-essential 3. Используйте виртуальное окружение Python ```bash sudo apt-get update sudo apt-get install -y python3 python3-pip build-essential make build-linux ``` ##### Для Windows сборки: 1. Используйте Windows 10/11 2. Установите Python 3.8+ 3. Используйте PowerShell или CMD ```powershell python -m pip install --upgrade pip make build-windows ``` ##### Для обеих платформ: Используйте CI/CD (GitHub Actions, GitLab CI): ```yaml ## .github/workflows/build.yml name: Build Releases on: push: tags: - 'v*' jobs: build-linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build Linux run: make build-linux build-windows: runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Build Windows run: make build-windows ``` --- ### 🛠️ Все команды Makefile #### Основные команды: | Команда | Описание | |---------|----------| | `make build` | Собрать для текущей ОС | | `make build-linux` | Собрать для Linux | | `make build-windows` | Собрать для Windows | | `make build-all` | Собрать для всех платформ | | `make package-linux` | Создать tar.gz пакет | | `make package-windows` | Создать zip пакет | | `make release` | Полный цикл релиза | #### Вспомогательные команды: | Команда | Описание | |---------|----------| | `make install-pyinstaller` | Установить PyInstaller | | `make test-build` | Протестировать собранный файл | | `make clean-build` | Очистить артефакты сборки | | `make build-info` | Показать информацию о среде | --- ### 🐛 Troubleshooting #### Проблема: PyInstaller не найден **Ошибка:** ``` make: pyinstaller: Command not found ``` **Решение:** ```bash make install-pyinstaller ## или pip install pyinstaller ``` --- #### Проблема: Импорт модулей не работает **Ошибка:** ``` ModuleNotFoundError: No module named 'requests' ``` **Решение:** ```bash pip install -r requirements.txt ## или добавьте в PyInstaller команду: --hidden-import requests --hidden-import certbot --hidden-import cryptography ``` --- #### Проблема: Большой размер файла **Размер ~100+ MB вместо 40-60 MB** **Причины:** - Включены лишние модули - Не используется `--onefile` - Включены debug символы **Решение:** ```bash ## Используйте флаги оптимизации: pyinstaller --onefile \ --strip \ --exclude-module tkinter \ --exclude-module matplotlib \ letsencrypt_regru_api.py ``` --- #### Проблема: Certbot не работает в исполняемом файле **Ошибка:** ``` certbot: command not found ``` **Решение:** Certbot вызывается через `subprocess` и должен быть установлен в системе: **Linux:** ```bash sudo apt-get install certbot ``` **Windows:** - Не поддерживается напрямую - Используйте WSL или Docker --- #### Проблема: Права доступа к файлам **Ошибка:** ``` Permission denied: /etc/letsencrypt/ ``` **Решение:** ```bash ## Linux/macOS sudo ./dist/letsencrypt-regru --check ## Или установите правильные права: sudo chmod +x ./dist/letsencrypt-regru sudo chown root:root ./dist/letsencrypt-regru ``` --- #### Проблема: Медленный запуск **Первый запуск занимает 5-10 секунд** **Причина:** PyInstaller распаковывает файлы во временную директорию при каждом запуске. **Решение:** - Это нормальное поведение для `--onefile` - Используйте `--onedir` для более быстрого запуска (но будет много файлов) - Кэшируйте временную директорию (автоматически) --- #### Проблема: Антивирус блокирует файл **Windows Defender помечает .exe как вирус** **Причины:** - Самораспаковывающийся архив похож на вредоносное ПО - Отсутствие цифровой подписи - Малоизвестный исполняемый файл **Решение:** 1. **Добавьте в исключения:** - Windows Defender → Settings → Exclusions 2. **Подпишите файл цифровой подписью:** ```bash # Требуется сертификат Code Signing signtool sign /f cert.pfx /p password dist/letsencrypt-regru.exe ``` 3. **Проверьте на VirusTotal:** - Загрузите файл на virustotal.com - Добавьте результаты в README --- ### 📊 Сравнение: Python vs Исполняемый файл | Характеристика | Python скрипт | Исполняемый файл | |----------------|---------------|------------------| | Размер | ~50 KB | ~40-60 MB | | Зависимости | Требует Python + pip | Автономный | | Скорость запуска | Быстро (~1 сек) | Медленно (~5-10 сек) | | Обновление | Просто заменить .py | Требуется пересборка | | Совместимость | Любая ОС с Python | Только для целевой ОС | | Установка | Требует venv setup | Скачать и запустить | | Certbot | Через subprocess | Через subprocess | --- ### 🎯 Рекомендации #### Используйте Python скрипт если: - ✅ Python уже установлен в системе - ✅ Нужны частые обновления кода - ✅ Используете виртуальное окружение - ✅ Работаете на серверах (production) #### Используйте исполняемый файл если: - ✅ Python не установлен - ✅ Нужна простота развертывания - ✅ Распространяете для конечных пользователей - ✅ Тестирование на чистых системах --- ### 📦 Пример использования собранного файла #### Linux: ```bash ## Скачать и распаковать wget https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-linux-x86_64.tar.gz tar -xzf letsencrypt-regru-linux-x86_64.tar.gz ## Установить sudo mv letsencrypt-regru /usr/local/bin/ sudo chmod +x /usr/local/bin/letsencrypt-regru ## Использовать sudo letsencrypt-regru --help sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json ``` #### Windows: ```powershell ## Скачать и распаковать Invoke-WebRequest -Uri "https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-windows-x86_64.zip" -OutFile "letsencrypt-regru.zip" Expand-Archive -Path letsencrypt-regru.zip -DestinationPath "C:\Program Files\LetsEncrypt-RegRu" ## Использовать cd "C:\Program Files\LetsEncrypt-RegRu" .\letsencrypt-regru.exe --help ``` --- ### 📝 Дополнительные ресурсы - [PyInstaller Documentation](https://pyinstaller.org/en/stable/) - [PyInstaller FAQ](https://pyinstaller.org/en/stable/FAQ.html) - [Building Cross-Platform Applications](https://pyinstaller.org/en/stable/operating-mode.html) --- ### 📄 Лицензия Этот проект использует лицензию согласно основному README.md. --- **Автор:** Фофанов Дмитрий **Дата обновления:** 28.10.2025 --- ## Appendix (migrated from docs/RELEASE_GUIDE.md) ## 🎯 Краткое руководство: Автоматические релизы ### Для GitHub #### 1. Создание релиза ```bash ## Создать тег git tag -a v1.0.0 -m "Release version 1.0.0" ## Отправить тег git push origin v1.0.0 ``` #### 2. Что произойдет автоматически GitHub Actions запустит `.github/workflows/build-release.yml`: 1. ✅ Сборка Linux версии (Ubuntu runner) 2. ✅ Сборка Windows версии (Windows runner) 3. ✅ Создание пакетов 4. ✅ Генерация SHA256 checksums 5. ✅ Создание GitHub Release 6. ✅ Загрузка артефактов #### 3. Результат Релиз появится на: `https://github.com/USER/REPO/releases/tag/v1.0.0` **Файлы:** - `letsencrypt-regru-linux-x86_64.tar.gz` - `letsencrypt-regru-linux-x86_64.tar.gz.sha256` - `letsencrypt-regru-windows-x86_64.zip` - `letsencrypt-regru-windows-x86_64.zip.sha256` --- ### Для Gitea #### 1. Настройка (один раз) ##### Включить Actions в Gitea: Отредактируйте `app.ini`: ```ini [actions] ENABLED = true DEFAULT_ACTIONS_URL = https://gitea.com ``` ##### Установить Gitea Runner: ```bash ## Скачать wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner chmod +x act_runner ## Зарегистрировать ./act_runner register --no-interactive \ --instance https://your-gitea.com \ --token YOUR_RUNNER_TOKEN ## Запустить ./act_runner daemon ``` #### 2. Создание релиза ```bash ## Создать тег git tag -a v1.0.0 -m "Release version 1.0.0" ## Отправить тег git push origin v1.0.0 ``` #### 3. Что произойдет Gitea Actions запустит `.gitea/workflows/release.yml`: 1. ✅ Сборка Linux версии 2. ✅ Сборка Windows версии 3. ✅ Создание пакетов 4. ✅ Генерация SHA256 + MD5 checksums 5. ✅ Создание Gitea Release 6. ✅ Детальные release notes #### 4. Результат Релиз появится на: `https://your-gitea.com/USER/REPO/releases/tag/v1.0.0` --- ### 🔧 Проверка перед релизом ```bash ## 1. Локальная сборка make clean-build make release ## 2. Тестирование make test-build ## 3. Проверка файлов ls -lh dist/ ## 4. Если все OK - создать тег git tag -a v1.0.0 -m "Release 1.0.0" git push origin v1.0.0 ``` --- ### 📊 Мониторинг #### GitHub: `https://github.com/USER/REPO/actions` #### Gitea: `https://your-gitea.com/USER/REPO/actions` --- ### 🐛 Если что-то пошло не так #### Удалить тег и релиз: ```bash ## Удалить локальный тег git tag -d v1.0.0 ## Удалить удаленный тег git push --delete origin v1.0.0 ## Удалить релиз вручную через веб-интерфейс ``` #### Пересоздать релиз: ```bash ## Исправить проблему git commit -am "Fix build" ## Пересоздать тег git tag -a v1.0.0 -m "Release 1.0.0" --force git push origin v1.0.0 --force ``` --- ### 📝 Semantic Versioning ```bash ## Major (несовместимые изменения) git tag v2.0.0 ## Minor (новые функции) git tag v1.1.0 ## Patch (исправления) git tag v1.0.1 ## Pre-release git tag v1.0.0-beta.1 git tag v1.0.0-rc.1 ``` --- **См. также:** - [.gitea/README.md](.gitea/README.md) - Полная документация по Gitea Actions - [BUILD_GUIDE.md](Build_and_Release.md) - Руководство по сборке