Files
Dmitriy Fofanov 491db2d5bf
Синхронизация Wiki / Синхронизация Wiki (push) Successful in 2s
Исправлены опечатки и улучшена читаемость документации
2026-02-25 07:54:18 +03:00

819 lines
21 KiB
Markdown
Raw Permalink Blame History

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