Добавлены новые документы и инструкции по настройке, использованию и тестированию SSL сертификатов Let's Encrypt с использованием API reg.ru. Обновлены зависимости в requirements.txt для поддержки новых функций. Включены подробные шаги по автоматизации, созданию и продлению сертификатов, а также интеграции с Nginx Proxy Manager.
This commit is contained in:
330
.gitea/README.md
Normal file
330
.gitea/README.md
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
# Настройка Gitea Actions для автоматической сборки
|
||||||
|
|
||||||
|
## 📋 Предварительные требования
|
||||||
|
|
||||||
|
### 1. Gitea с поддержкой Actions
|
||||||
|
|
||||||
|
Убедитесь, что ваш Gitea имеет включенные Actions:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
# В app.ini Gitea
|
||||||
|
[actions]
|
||||||
|
ENABLED = true
|
||||||
|
DEFAULT_ACTIONS_URL = https://gitea.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Gitea Runner
|
||||||
|
|
||||||
|
Установите и настройте Gitea Act Runner:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Скачать runner
|
||||||
|
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner
|
||||||
|
chmod +x act_runner
|
||||||
|
|
||||||
|
# Зарегистрировать runner
|
||||||
|
./act_runner register --no-interactive \
|
||||||
|
--instance https://your-gitea-instance.com \
|
||||||
|
--token YOUR_RUNNER_TOKEN \
|
||||||
|
--name my-runner
|
||||||
|
|
||||||
|
# Запустить runner
|
||||||
|
./act_runner daemon
|
||||||
|
```
|
||||||
|
|
||||||
|
Или через Docker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d \
|
||||||
|
--name gitea-runner \
|
||||||
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
|
-v $PWD/runner-data:/data \
|
||||||
|
-e GITEA_INSTANCE_URL=https://your-gitea-instance.com \
|
||||||
|
-e GITEA_RUNNER_REGISTRATION_TOKEN=YOUR_TOKEN \
|
||||||
|
gitea/act_runner:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Использование
|
||||||
|
|
||||||
|
### Создание релиза автоматически
|
||||||
|
|
||||||
|
1. **Создайте и отправьте тег:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создать тег
|
||||||
|
git tag -a v1.0.0 -m "Release version 1.0.0"
|
||||||
|
|
||||||
|
# Отправить тег на сервер
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Gitea автоматически:**
|
||||||
|
- Запустит workflow `.gitea/workflows/release.yml`
|
||||||
|
- Соберет Linux версию на Ubuntu runner
|
||||||
|
- Соберет Windows версию на Windows runner
|
||||||
|
- Создаст релиз с артефактами
|
||||||
|
- Добавит контрольные суммы SHA256 и MD5
|
||||||
|
|
||||||
|
### Ручной запуск workflow
|
||||||
|
|
||||||
|
В веб-интерфейсе Gitea:
|
||||||
|
|
||||||
|
1. Перейдите в **Repository → Actions**
|
||||||
|
2. Выберите workflow **Build and Release**
|
||||||
|
3. Нажмите **Run workflow**
|
||||||
|
4. Укажите версию (опционально)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Структура workflows
|
||||||
|
|
||||||
|
```
|
||||||
|
.gitea/
|
||||||
|
└── workflows/
|
||||||
|
├── build-release.yml # Простой workflow (совместим с GitHub)
|
||||||
|
└── release.yml # Расширенный workflow с уведомлениями
|
||||||
|
```
|
||||||
|
|
||||||
|
### build-release.yml
|
||||||
|
|
||||||
|
Базовый workflow, совместимый с GitHub Actions:
|
||||||
|
- Сборка для Linux и Windows
|
||||||
|
- Создание пакетов
|
||||||
|
- Генерация контрольных сумм
|
||||||
|
- Создание релиза
|
||||||
|
|
||||||
|
**Использование:**
|
||||||
|
```bash
|
||||||
|
git tag v1.0.0
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### release.yml
|
||||||
|
|
||||||
|
Расширенный workflow с дополнительными возможностями:
|
||||||
|
- Детальные release notes
|
||||||
|
- MD5 + SHA256 checksums
|
||||||
|
- Уведомления после релиза
|
||||||
|
- Поддержка ручного запуска
|
||||||
|
|
||||||
|
**Использование:**
|
||||||
|
```bash
|
||||||
|
# Автоматически при теге
|
||||||
|
git tag v1.0.0
|
||||||
|
git push origin v1.0.0
|
||||||
|
|
||||||
|
# Или вручную через веб-интерфейс
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Настройка
|
||||||
|
|
||||||
|
### Переменные окружения
|
||||||
|
|
||||||
|
Workflow использует следующие переменные:
|
||||||
|
|
||||||
|
| Переменная | Описание | Где установить |
|
||||||
|
|------------|----------|----------------|
|
||||||
|
| `GITEA_TOKEN` | Токен для создания релиза | Repository Secrets |
|
||||||
|
| `GITHUB_TOKEN` | Автоматически (fallback) | Встроенный |
|
||||||
|
|
||||||
|
### Создание GITEA_TOKEN
|
||||||
|
|
||||||
|
1. В Gitea: **Settings → Applications → Generate New Token**
|
||||||
|
2. Выберите права: `repo`, `write:packages`
|
||||||
|
3. Скопируйте токен
|
||||||
|
4. В репозитории: **Settings → Secrets → Add Secret**
|
||||||
|
- Name: `GITEA_TOKEN`
|
||||||
|
- Value: ваш токен
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Артефакты релиза
|
||||||
|
|
||||||
|
После успешной сборки в релизе будут доступны:
|
||||||
|
|
||||||
|
```
|
||||||
|
letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
letsencrypt-regru-linux-x86_64.tar.gz.md5
|
||||||
|
letsencrypt-regru-windows-x86_64.zip
|
||||||
|
letsencrypt-regru-windows-x86_64.zip.sha256
|
||||||
|
letsencrypt-regru-windows-x86_64.zip.md5
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
### Workflow не запускается
|
||||||
|
|
||||||
|
**Проблема:** После push тега workflow не запускается
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
1. Проверьте, что Actions включены в настройках репозитория
|
||||||
|
2. Проверьте `.gitea/workflows/*.yml` на синтаксические ошибки
|
||||||
|
3. Убедитесь, что runner зарегистрирован и запущен
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверить статус runner
|
||||||
|
./act_runner status
|
||||||
|
|
||||||
|
# Посмотреть логи runner
|
||||||
|
./act_runner daemon --debug
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Ошибка при сборке Windows
|
||||||
|
|
||||||
|
**Проблема:** `make: command not found` на Windows
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
|
||||||
|
Установите Make для Windows или используйте альтернативный workflow:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Build Windows executable (без make)
|
||||||
|
run: |
|
||||||
|
pyinstaller --onefile --name letsencrypt-regru letsencrypt_regru_api.py
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Релиз создается без файлов
|
||||||
|
|
||||||
|
**Проблема:** Релиз создан, но артефакты отсутствуют
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
|
||||||
|
Проверьте логи job `create-release`:
|
||||||
|
|
||||||
|
1. Перейдите в **Actions → Build and Release → create-release**
|
||||||
|
2. Проверьте шаг "Download artifacts"
|
||||||
|
3. Убедитесь, что предыдущие jobs (`build-linux`, `build-windows`) завершились успешно
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Permission denied при создании релиза
|
||||||
|
|
||||||
|
**Проблема:** `Error: Resource not accessible by integration`
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
|
||||||
|
1. Проверьте права токена:
|
||||||
|
- `GITEA_TOKEN` должен иметь права `repo` и `write:packages`
|
||||||
|
|
||||||
|
2. Или используйте встроенный `GITHUB_TOKEN`:
|
||||||
|
- Убедитесь, что в настройках репозитория включены Actions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Мониторинг сборок
|
||||||
|
|
||||||
|
### Просмотр логов
|
||||||
|
|
||||||
|
1. **Web UI:**
|
||||||
|
- Repository → Actions
|
||||||
|
- Выберите workflow run
|
||||||
|
- Кликните на job для просмотра логов
|
||||||
|
|
||||||
|
2. **API:**
|
||||||
|
```bash
|
||||||
|
curl -H "Authorization: token YOUR_TOKEN" \
|
||||||
|
https://your-gitea.com/api/v1/repos/USER/REPO/actions/runs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Статус badges
|
||||||
|
|
||||||
|
Добавьте в README.md:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
[](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 и могут использоваться на обеих платформах.
|
||||||
211
.gitea/workflows/build-release.yml
Normal file
211
.gitea/workflows/build-release.yml
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
name: Build Releases
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*' # Срабатывает на теги вида v1.0, v2.0.1 и т.д.
|
||||||
|
workflow_dispatch: # Возможность запустить вручную
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-linux:
|
||||||
|
name: Build Linux Executable
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install pyinstaller
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
- name: Build Linux executable
|
||||||
|
run: |
|
||||||
|
make build-linux
|
||||||
|
|
||||||
|
- name: Test Linux executable
|
||||||
|
run: |
|
||||||
|
chmod +x dist/letsencrypt-regru
|
||||||
|
dist/letsencrypt-regru --help
|
||||||
|
|
||||||
|
- name: Create Linux package
|
||||||
|
run: |
|
||||||
|
make package-linux
|
||||||
|
|
||||||
|
- name: Upload Linux artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-executable
|
||||||
|
path: dist/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
|
||||||
|
- name: Generate SHA256 checksum
|
||||||
|
run: |
|
||||||
|
cd dist
|
||||||
|
sha256sum letsencrypt-regru-linux-x86_64.tar.gz > letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
|
||||||
|
- name: Upload checksum
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-checksum
|
||||||
|
path: dist/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
|
||||||
|
build-windows:
|
||||||
|
name: Build Windows Executable
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install pyinstaller
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
- name: Build Windows executable
|
||||||
|
run: |
|
||||||
|
make build-windows
|
||||||
|
|
||||||
|
- name: Test Windows executable
|
||||||
|
run: |
|
||||||
|
dist\letsencrypt-regru.exe --help
|
||||||
|
|
||||||
|
- name: Create Windows package
|
||||||
|
run: |
|
||||||
|
make package-windows
|
||||||
|
|
||||||
|
- name: Upload Windows artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-executable
|
||||||
|
path: dist/letsencrypt-regru-windows-x86_64.zip
|
||||||
|
|
||||||
|
- name: Generate SHA256 checksum
|
||||||
|
run: |
|
||||||
|
cd dist
|
||||||
|
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256 > letsencrypt-regru-windows-x86_64.zip.sha256
|
||||||
|
|
||||||
|
- name: Upload checksum
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-checksum
|
||||||
|
path: dist/letsencrypt-regru-windows-x86_64.zip.sha256
|
||||||
|
|
||||||
|
create-release:
|
||||||
|
name: Create Gitea Release
|
||||||
|
needs: [build-linux, build-windows]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Download Linux artifact
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-executable
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Download Linux checksum
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-checksum
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Download Windows artifact
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-executable
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Download Windows checksum
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-checksum
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Get tag name
|
||||||
|
id: get_version
|
||||||
|
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
uses: actions/gitea-release@v1
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
tag_name: ${{ steps.get_version.outputs.VERSION }}
|
||||||
|
name: Let's Encrypt RegRu Manager ${{ steps.get_version.outputs.VERSION }}
|
||||||
|
body: |
|
||||||
|
## Let's Encrypt RegRu Manager ${{ steps.get_version.outputs.VERSION }}
|
||||||
|
|
||||||
|
### 📦 Релизные пакеты
|
||||||
|
|
||||||
|
**Linux (Ubuntu/Debian/CentOS):**
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz` - Исполняемый файл + файлы
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256` - Контрольная сумма
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip` - Исполняемый файл + файлы
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip.sha256` - Контрольная сумма
|
||||||
|
|
||||||
|
### 🚀 Быстрая установка
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
wget https://your-gitea-instance.com/${{ github.repository }}/releases/download/${{ steps.get_version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
sudo mv letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
Скачайте `letsencrypt-regru-windows-x86_64.zip` и распакуйте.
|
||||||
|
|
||||||
|
### 📖 Документация
|
||||||
|
|
||||||
|
- [README.md](README.md)
|
||||||
|
- [BUILD_GUIDE.md](BUILD_GUIDE.md)
|
||||||
|
- [INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md)
|
||||||
|
|
||||||
|
### ⚠️ Важно
|
||||||
|
|
||||||
|
- Исполняемые файлы требуют установленного `certbot` в системе
|
||||||
|
- Linux версия требует права root (sudo)
|
||||||
|
- Windows версия не поддерживает certbot напрямую (используйте WSL)
|
||||||
|
|
||||||
|
### 🔐 Проверка контрольных сумм
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
```powershell
|
||||||
|
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📝 Changelog
|
||||||
|
|
||||||
|
- Автоматическая сборка релиза ${{ steps.get_version.outputs.VERSION }}
|
||||||
|
- См. коммиты для деталей изменений
|
||||||
|
files: |
|
||||||
|
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
./artifacts/letsencrypt-regru-windows-x86_64.zip
|
||||||
|
./artifacts/letsencrypt-regru-windows-x86_64.zip.sha256
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
387
.gitea/workflows/release.yml
Normal file
387
.gitea/workflows/release.yml
Normal file
@@ -0,0 +1,387 @@
|
|||||||
|
name: Build and Release (Gitea Native)
|
||||||
|
|
||||||
|
# Этот workflow оптимизирован для Gitea
|
||||||
|
# Использует нативные возможности Gitea Actions
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
- 'release-*'
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: 'Version tag (e.g., v1.0.0)'
|
||||||
|
required: false
|
||||||
|
default: 'dev'
|
||||||
|
|
||||||
|
env:
|
||||||
|
APP_NAME: letsencrypt-regru
|
||||||
|
PYTHON_VERSION: '3.9'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# ============================================================================
|
||||||
|
# Сборка для Linux
|
||||||
|
# ============================================================================
|
||||||
|
build-linux:
|
||||||
|
name: 🐧 Build Linux
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📥 Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: 🐍 Set up Python ${{ env.PYTHON_VERSION }}
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ env.PYTHON_VERSION }}
|
||||||
|
cache: 'pip'
|
||||||
|
|
||||||
|
- name: 📦 Install system dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y build-essential
|
||||||
|
|
||||||
|
- name: 📚 Install Python dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip setuptools wheel
|
||||||
|
pip install pyinstaller
|
||||||
|
if [ -f requirements.txt ]; then
|
||||||
|
pip install -r requirements.txt
|
||||||
|
else
|
||||||
|
pip install requests certbot cryptography
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: ℹ️ Build info
|
||||||
|
run: |
|
||||||
|
make build-info
|
||||||
|
|
||||||
|
- name: 🔨 Build Linux executable
|
||||||
|
run: |
|
||||||
|
make build-linux
|
||||||
|
|
||||||
|
- name: ✅ Test executable
|
||||||
|
run: |
|
||||||
|
chmod +x dist/${{ env.APP_NAME }}
|
||||||
|
./dist/${{ env.APP_NAME }} --help
|
||||||
|
./dist/${{ env.APP_NAME }} --create-config /tmp/test_config.json
|
||||||
|
|
||||||
|
- name: 📦 Create distribution package
|
||||||
|
run: |
|
||||||
|
make package-linux
|
||||||
|
|
||||||
|
- name: 🔐 Generate checksums
|
||||||
|
run: |
|
||||||
|
cd dist
|
||||||
|
sha256sum ${{ env.APP_NAME }}-linux-x86_64.tar.gz > ${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
|
||||||
|
md5sum ${{ env.APP_NAME }}-linux-x86_64.tar.gz > ${{ env.APP_NAME }}-linux-x86_64.tar.gz.md5
|
||||||
|
cat ${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
|
||||||
|
|
||||||
|
- name: 📤 Upload Linux package
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-package
|
||||||
|
path: |
|
||||||
|
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz
|
||||||
|
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz.sha256
|
||||||
|
dist/${{ env.APP_NAME }}-linux-x86_64.tar.gz.md5
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# Сборка для Windows
|
||||||
|
# ============================================================================
|
||||||
|
build-windows:
|
||||||
|
name: 🪟 Build Windows
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📥 Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: 🐍 Set up Python ${{ env.PYTHON_VERSION }}
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ env.PYTHON_VERSION }}
|
||||||
|
cache: 'pip'
|
||||||
|
|
||||||
|
- name: 📚 Install Python dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip setuptools wheel
|
||||||
|
pip install pyinstaller
|
||||||
|
if (Test-Path requirements.txt) {
|
||||||
|
pip install -r requirements.txt
|
||||||
|
} else {
|
||||||
|
pip install requests certbot cryptography
|
||||||
|
}
|
||||||
|
|
||||||
|
- name: 🔨 Build Windows executable
|
||||||
|
run: |
|
||||||
|
make build-windows
|
||||||
|
|
||||||
|
- name: ✅ Test executable
|
||||||
|
run: |
|
||||||
|
dist\${{ env.APP_NAME }}.exe --help
|
||||||
|
dist\${{ env.APP_NAME }}.exe --create-config test_config.json
|
||||||
|
|
||||||
|
- name: 📦 Create distribution package
|
||||||
|
run: |
|
||||||
|
make package-windows
|
||||||
|
|
||||||
|
- name: 🔐 Generate checksums
|
||||||
|
run: |
|
||||||
|
cd dist
|
||||||
|
certutil -hashfile ${{ env.APP_NAME }}-windows-x86_64.zip SHA256 > ${{ env.APP_NAME }}-windows-x86_64.zip.sha256
|
||||||
|
certutil -hashfile ${{ env.APP_NAME }}-windows-x86_64.zip MD5 > ${{ env.APP_NAME }}-windows-x86_64.zip.md5
|
||||||
|
type ${{ env.APP_NAME }}-windows-x86_64.zip.sha256
|
||||||
|
|
||||||
|
- name: 📤 Upload Windows package
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-package
|
||||||
|
path: |
|
||||||
|
dist/${{ env.APP_NAME }}-windows-x86_64.zip
|
||||||
|
dist/${{ env.APP_NAME }}-windows-x86_64.zip.sha256
|
||||||
|
dist/${{ env.APP_NAME }}-windows-x86_64.zip.md5
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# Создание релиза в Gitea
|
||||||
|
# ============================================================================
|
||||||
|
create-release:
|
||||||
|
name: 📦 Create Release
|
||||||
|
needs: [build-linux, build-windows]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📥 Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: 📥 Download Linux artifacts
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-package
|
||||||
|
path: ./release
|
||||||
|
|
||||||
|
- name: 📥 Download Windows artifacts
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-package
|
||||||
|
path: ./release
|
||||||
|
|
||||||
|
- name: 📋 List release files
|
||||||
|
run: |
|
||||||
|
echo "Release files:"
|
||||||
|
ls -lh ./release/
|
||||||
|
|
||||||
|
- name: 🏷️ Get version info
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
|
||||||
|
VERSION="${{ github.event.inputs.version }}"
|
||||||
|
else
|
||||||
|
VERSION="${GITHUB_REF#refs/tags/}"
|
||||||
|
fi
|
||||||
|
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
echo "Release version: $VERSION"
|
||||||
|
|
||||||
|
- name: 📝 Generate release notes
|
||||||
|
id: release_notes
|
||||||
|
run: |
|
||||||
|
cat > release_notes.md << 'EOF'
|
||||||
|
## 🎉 Let's Encrypt RegRu Manager ${{ steps.version.outputs.VERSION }}
|
||||||
|
|
||||||
|
Автоматическое управление SSL сертификатами Let's Encrypt для доменов на reg.ru с интеграцией в Nginx Proxy Manager.
|
||||||
|
|
||||||
|
### 📦 Файлы релиза
|
||||||
|
|
||||||
|
#### Linux (Ubuntu 20.04+, Debian 10+, CentOS 8+)
|
||||||
|
- **letsencrypt-regru-linux-x86_64.tar.gz** - Исполняемый файл (ELF 64-bit)
|
||||||
|
- **letsencrypt-regru-linux-x86_64.tar.gz.sha256** - SHA256 контрольная сумма
|
||||||
|
- **letsencrypt-regru-linux-x86_64.tar.gz.md5** - MD5 контрольная сумма
|
||||||
|
|
||||||
|
#### Windows (10/11, Server 2019+)
|
||||||
|
- **letsencrypt-regru-windows-x86_64.zip** - Исполняемый файл (PE32+)
|
||||||
|
- **letsencrypt-regru-windows-x86_64.zip.sha256** - SHA256 контрольная сумма
|
||||||
|
- **letsencrypt-regru-windows-x86_64.zip.md5** - MD5 контрольная сумма
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🚀 Быстрая установка
|
||||||
|
|
||||||
|
#### Linux (одна команда):
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://your-gitea.com/api/v1/repos/${{ github.repository }}/releases/tags/${{ steps.version.outputs.VERSION }} | \
|
||||||
|
jq -r '.assets[] | select(.name | contains("linux")) | .browser_download_url' | \
|
||||||
|
xargs wget -O letsencrypt-regru.tar.gz && \
|
||||||
|
tar -xzf letsencrypt-regru.tar.gz && \
|
||||||
|
sudo mv letsencrypt-regru /usr/local/bin/ && \
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Или вручную:
|
||||||
|
```bash
|
||||||
|
# 1. Скачать
|
||||||
|
wget https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
|
||||||
|
# 2. Проверить контрольную сумму
|
||||||
|
wget https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
|
||||||
|
# 3. Распаковать и установить
|
||||||
|
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
sudo mv letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
|
||||||
|
# 4. Проверить
|
||||||
|
letsencrypt-regru --help
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Windows:
|
||||||
|
```powershell
|
||||||
|
# Скачать и распаковать
|
||||||
|
Invoke-WebRequest -Uri "https://your-gitea.com/${{ github.repository }}/releases/download/${{ steps.version.outputs.VERSION }}/letsencrypt-regru-windows-x86_64.zip" -OutFile "letsencrypt-regru.zip"
|
||||||
|
Expand-Archive -Path letsencrypt-regru.zip -DestinationPath "C:\Program Files\LetsEncrypt-RegRu"
|
||||||
|
|
||||||
|
# Проверить
|
||||||
|
& "C:\Program Files\LetsEncrypt-RegRu\letsencrypt-regru.exe" --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ✨ Основные возможности
|
||||||
|
|
||||||
|
- ✅ Автоматическое получение Let's Encrypt сертификатов
|
||||||
|
- ✅ DNS-валидация через API reg.ru
|
||||||
|
- ✅ Поддержка wildcard сертификатов (*.domain.com)
|
||||||
|
- ✅ Автоматическая загрузка в Nginx Proxy Manager
|
||||||
|
- ✅ Автоматическое обновление сертификатов
|
||||||
|
- ✅ Systemd интеграция для автоматизации
|
||||||
|
- ✅ Подробное логирование
|
||||||
|
- ✅ Генерация тестовых самоподписанных сертификатов
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📋 Системные требования
|
||||||
|
|
||||||
|
#### Linux:
|
||||||
|
- Ubuntu 20.04+ / Debian 10+ / CentOS 8+ / RHEL 8+
|
||||||
|
- certbot (устанавливается автоматически через `letsencrypt_regru.sh`)
|
||||||
|
- 50 MB свободного места
|
||||||
|
- Права root (sudo)
|
||||||
|
|
||||||
|
#### Windows:
|
||||||
|
- Windows 10/11 или Server 2019+
|
||||||
|
- **Важно:** certbot не поддерживается напрямую на Windows
|
||||||
|
- Рекомендуется использовать WSL (Windows Subsystem for Linux)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📖 Документация
|
||||||
|
|
||||||
|
- **[README.md](README.md)** - Полное руководство пользователя
|
||||||
|
- **[BUILD_GUIDE.md](BUILD_GUIDE.md)** - Руководство по сборке из исходников
|
||||||
|
- **[INSTALL_GUIDE.md](docs/INSTALL_GUIDE.md)** - Детальная инструкция по установке
|
||||||
|
- **[MAKEFILE_COMMANDS.md](MAKEFILE_COMMANDS.md)** - Справка по командам Makefile
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ⚠️ Важная информация
|
||||||
|
|
||||||
|
1. **Certbot зависимость:**
|
||||||
|
- Исполняемый файл НЕ включает certbot
|
||||||
|
- certbot должен быть установлен в системе
|
||||||
|
- Используется через subprocess
|
||||||
|
|
||||||
|
2. **Размер файла:**
|
||||||
|
- Linux: ~45-55 MB (включая Python runtime)
|
||||||
|
- Windows: ~40-50 MB (включая Python runtime)
|
||||||
|
|
||||||
|
3. **Первый запуск:**
|
||||||
|
- Может занять 5-10 секунд (распаковка)
|
||||||
|
- Последующие запуски быстрее (~1-2 сек)
|
||||||
|
|
||||||
|
4. **Безопасность:**
|
||||||
|
- Файлы подписаны контрольными суммами SHA256 и MD5
|
||||||
|
- Всегда проверяйте контрольные суммы перед использованием
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🔐 Проверка контрольных сумм
|
||||||
|
|
||||||
|
#### Linux:
|
||||||
|
```bash
|
||||||
|
# SHA256
|
||||||
|
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
|
||||||
|
# MD5
|
||||||
|
md5sum -c letsencrypt-regru-linux-x86_64.tar.gz.md5
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Windows:
|
||||||
|
```powershell
|
||||||
|
# SHA256
|
||||||
|
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
|
||||||
|
|
||||||
|
# MD5
|
||||||
|
certutil -hashfile letsencrypt-regru-windows-x86_64.zip MD5
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 🐛 Проблемы и поддержка
|
||||||
|
|
||||||
|
Если у вас возникли проблемы:
|
||||||
|
|
||||||
|
1. Проверьте [Issues](../../issues)
|
||||||
|
2. Создайте новый [Issue](../../issues/new)
|
||||||
|
3. См. раздел [Troubleshooting](BUILD_GUIDE.md#troubleshooting) в BUILD_GUIDE.md
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 📝 Changelog
|
||||||
|
|
||||||
|
См. [коммиты](${{ github.server_url }}/${{ github.repository }}/commits/${{ steps.version.outputs.VERSION }}) для деталей изменений.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Автор:** Фофанов Дмитрий
|
||||||
|
**Дата релиза:** $(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
||||||
|
**Версия:** ${{ steps.version.outputs.VERSION }}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat release_notes.md
|
||||||
|
|
||||||
|
- name: 🚀 Create Gitea Release
|
||||||
|
uses: actions/gitea-release@v1
|
||||||
|
env:
|
||||||
|
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
release/*
|
||||||
|
tag_name: ${{ steps.version.outputs.VERSION }}
|
||||||
|
name: "Let's Encrypt RegRu Manager ${{ steps.version.outputs.VERSION }}"
|
||||||
|
body_path: release_notes.md
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# Уведомление о релизе (опционально)
|
||||||
|
# ============================================================================
|
||||||
|
notify:
|
||||||
|
name: 📢 Notify
|
||||||
|
needs: [create-release]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 📧 Send notification
|
||||||
|
run: |
|
||||||
|
echo "Release created successfully!"
|
||||||
|
echo "Tag: ${{ github.ref_name }}"
|
||||||
|
echo "Repository: ${{ github.repository }}"
|
||||||
|
# Здесь можно добавить отправку уведомлений через webhook, email и т.д.
|
||||||
201
.github/workflows/build-release.yml
vendored
Normal file
201
.github/workflows/build-release.yml
vendored
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
name: Build Releases
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*' # Срабатывает на теги вида v1.0, v2.0.1 и т.д.
|
||||||
|
workflow_dispatch: # Возможность запустить вручную
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-linux:
|
||||||
|
name: Build Linux Executable
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install pyinstaller
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
- name: Build Linux executable
|
||||||
|
run: |
|
||||||
|
make build-linux
|
||||||
|
|
||||||
|
- name: Test Linux executable
|
||||||
|
run: |
|
||||||
|
chmod +x dist/letsencrypt-regru
|
||||||
|
dist/letsencrypt-regru --help
|
||||||
|
|
||||||
|
- name: Create Linux package
|
||||||
|
run: |
|
||||||
|
make package-linux
|
||||||
|
|
||||||
|
- name: Upload Linux artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-executable
|
||||||
|
path: dist/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
|
||||||
|
- name: Generate SHA256 checksum
|
||||||
|
run: |
|
||||||
|
cd dist
|
||||||
|
sha256sum letsencrypt-regru-linux-x86_64.tar.gz > letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
|
||||||
|
- name: Upload checksum
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-checksum
|
||||||
|
path: dist/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
|
||||||
|
build-windows:
|
||||||
|
name: Build Windows Executable
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install pyinstaller
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
- name: Build Windows executable
|
||||||
|
run: |
|
||||||
|
make build-windows
|
||||||
|
|
||||||
|
- name: Test Windows executable
|
||||||
|
run: |
|
||||||
|
dist\letsencrypt-regru.exe --help
|
||||||
|
|
||||||
|
- name: Create Windows package
|
||||||
|
run: |
|
||||||
|
make package-windows
|
||||||
|
|
||||||
|
- name: Upload Windows artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-executable
|
||||||
|
path: dist/letsencrypt-regru-windows-x86_64.zip
|
||||||
|
|
||||||
|
- name: Generate SHA256 checksum
|
||||||
|
run: |
|
||||||
|
cd dist
|
||||||
|
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256 > letsencrypt-regru-windows-x86_64.zip.sha256
|
||||||
|
|
||||||
|
- name: Upload checksum
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-checksum
|
||||||
|
path: dist/letsencrypt-regru-windows-x86_64.zip.sha256
|
||||||
|
|
||||||
|
create-release:
|
||||||
|
name: Create GitHub Release
|
||||||
|
needs: [build-linux, build-windows]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Download Linux artifact
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-executable
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Download Linux checksum
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: linux-checksum
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Download Windows artifact
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-executable
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Download Windows checksum
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: windows-checksum
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
./artifacts/letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
./artifacts/letsencrypt-regru-windows-x86_64.zip
|
||||||
|
./artifacts/letsencrypt-regru-windows-x86_64.zip.sha256
|
||||||
|
body: |
|
||||||
|
## Let's Encrypt RegRu Manager ${{ github.ref_name }}
|
||||||
|
|
||||||
|
### 📦 Релизные пакеты
|
||||||
|
|
||||||
|
**Linux (Ubuntu/Debian/CentOS):**
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz` - Исполняемый файл + файлы
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256` - Контрольная сумма
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip` - Исполняемый файл + файлы
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip.sha256` - Контрольная сумма
|
||||||
|
|
||||||
|
### 🚀 Быстрая установка
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
wget https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
sudo mv letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
Скачайте `letsencrypt-regru-windows-x86_64.zip` и распакуйте.
|
||||||
|
|
||||||
|
### 📖 Документация
|
||||||
|
|
||||||
|
- [README.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/README.md)
|
||||||
|
- [BUILD_GUIDE.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/BUILD_GUIDE.md)
|
||||||
|
- [INSTALL_GUIDE.md](https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/docs/INSTALL_GUIDE.md)
|
||||||
|
|
||||||
|
### ⚠️ Важно
|
||||||
|
|
||||||
|
- Исполняемые файлы требуют установленного `certbot` в системе
|
||||||
|
- Linux версия требует права root (sudo)
|
||||||
|
- Windows версия не поддерживает certbot напрямую (используйте WSL)
|
||||||
|
|
||||||
|
### 🔐 Проверка контрольных сумм
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
sha256sum -c letsencrypt-regru-linux-x86_64.tar.gz.sha256
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
```powershell
|
||||||
|
certutil -hashfile letsencrypt-regru-windows-x86_64.zip SHA256
|
||||||
|
```
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
7
.gitignore
vendored
7
.gitignore
vendored
@@ -30,6 +30,13 @@ PIPE_MANIFEST
|
|||||||
*.manifest
|
*.manifest
|
||||||
*.spec
|
*.spec
|
||||||
|
|
||||||
|
# PyInstaller build artifacts
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
*.tar.gz
|
||||||
|
*.zip
|
||||||
|
*.sha256
|
||||||
|
|
||||||
# Installer logs
|
# Installer logs
|
||||||
pip-log.txt
|
pip-log.txt
|
||||||
pip-delete-this-directory.txt
|
pip-delete-this-directory.txt
|
||||||
|
|||||||
319
Makefile
319
Makefile
@@ -25,7 +25,14 @@ YELLOW = \033[1;33m
|
|||||||
BLUE = \033[0;34m
|
BLUE = \033[0;34m
|
||||||
NC = \033[0m # No Color
|
NC = \033[0m # No Color
|
||||||
|
|
||||||
.PHONY: help install uninstall status check-root setup-dirs install-script install-service install-cron clean
|
.PHONY: help install uninstall status check-root setup-dirs install-script install-service install-cron clean build build-linux build-windows build-all package-linux package-windows release
|
||||||
|
|
||||||
|
# Переменные для сборки
|
||||||
|
PYINSTALLER = pyinstaller
|
||||||
|
APP_NAME = letsencrypt-regru
|
||||||
|
DIST_DIR = dist
|
||||||
|
BUILD_DIR_PY = build
|
||||||
|
SPEC_FILE = $(APP_NAME).spec
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# Помощь
|
# Помощь
|
||||||
@@ -36,7 +43,7 @@ help:
|
|||||||
@echo "$(BLUE)║ Makefile для управления Let's Encrypt SSL сертификатами ║$(NC)"
|
@echo "$(BLUE)║ Makefile для управления Let's Encrypt SSL сертификатами ║$(NC)"
|
||||||
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "$(GREEN)Доступные команды:$(NC)"
|
@echo "$(GREEN)Команды для установки:$(NC)"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo " $(YELLOW)make install$(NC) - Установить скрипт и настроить автоматизацию"
|
@echo " $(YELLOW)make install$(NC) - Установить скрипт и настроить автоматизацию"
|
||||||
@echo " $(YELLOW)make uninstall$(NC) - Удалить скрипт и очистить систему"
|
@echo " $(YELLOW)make uninstall$(NC) - Удалить скрипт и очистить систему"
|
||||||
@@ -45,6 +52,18 @@ help:
|
|||||||
@echo " $(YELLOW)make test-run$(NC) - Тестовый запуск скрипта"
|
@echo " $(YELLOW)make test-run$(NC) - Тестовый запуск скрипта"
|
||||||
@echo " $(YELLOW)make test-cert$(NC) - Создать тестовый самоподписанный сертификат"
|
@echo " $(YELLOW)make test-cert$(NC) - Создать тестовый самоподписанный сертификат"
|
||||||
@echo " $(YELLOW)make logs$(NC) - Показать логи"
|
@echo " $(YELLOW)make logs$(NC) - Показать логи"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)Команды для сборки (PyInstaller):$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo " $(YELLOW)make build$(NC) - Собрать исполняемый файл для текущей ОС"
|
||||||
|
@echo " $(YELLOW)make build-linux$(NC) - Собрать исполняемый файл для Linux"
|
||||||
|
@echo " $(YELLOW)make build-windows$(NC) - Собрать исполняемый файл для Windows"
|
||||||
|
@echo " $(YELLOW)make build-all$(NC) - Собрать для всех платформ"
|
||||||
|
@echo " $(YELLOW)make package-linux$(NC) - Создать tar.gz пакет для Linux"
|
||||||
|
@echo " $(YELLOW)make package-windows$(NC) - Создать zip пакет для Windows"
|
||||||
|
@echo " $(YELLOW)make release$(NC) - Полный цикл релиза (build + package)"
|
||||||
|
@echo " $(YELLOW)make clean-build$(NC) - Очистить артефакты сборки"
|
||||||
|
@echo ""
|
||||||
@echo " $(YELLOW)make help$(NC) - Показать эту справку"
|
@echo " $(YELLOW)make help$(NC) - Показать эту справку"
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|
||||||
@@ -449,5 +468,301 @@ clean:
|
|||||||
@find . -type d -name "__pycache__" -delete
|
@find . -type d -name "__pycache__" -delete
|
||||||
@echo "$(GREEN)✓ Очистка завершена$(NC)"
|
@echo "$(GREEN)✓ Очистка завершена$(NC)"
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# Сборка исполняемых файлов с PyInstaller
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Установка PyInstaller
|
||||||
|
install-pyinstaller:
|
||||||
|
@echo "$(YELLOW)→ Установка PyInstaller...$(NC)"
|
||||||
|
@if command -v pip3 >/dev/null 2>&1; then \
|
||||||
|
pip3 install --upgrade pyinstaller; \
|
||||||
|
elif command -v pip >/dev/null 2>&1; then \
|
||||||
|
pip install --upgrade pyinstaller; \
|
||||||
|
else \
|
||||||
|
echo "$(RED)✗ pip не найден. Установите pip сначала.$(NC)"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@echo "$(GREEN)✓ PyInstaller установлен$(NC)"
|
||||||
|
|
||||||
|
# Сборка для текущей ОС
|
||||||
|
build:
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Сборка исполняемого файла для текущей ОС ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@if ! command -v $(PYINSTALLER) >/dev/null 2>&1; then \
|
||||||
|
echo "$(YELLOW)PyInstaller не найден. Установка...$(NC)"; \
|
||||||
|
$(MAKE) install-pyinstaller; \
|
||||||
|
fi
|
||||||
|
@echo "$(YELLOW)→ Компиляция $(SCRIPT_NAME) в исполняемый файл...$(NC)"
|
||||||
|
@$(PYINSTALLER) --onefile \
|
||||||
|
--name $(APP_NAME) \
|
||||||
|
--add-data "README.md:." \
|
||||||
|
--hidden-import requests \
|
||||||
|
--hidden-import certbot \
|
||||||
|
--hidden-import cryptography \
|
||||||
|
--collect-all certbot \
|
||||||
|
--noconfirm \
|
||||||
|
$(SCRIPT_NAME)
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(GREEN)║ ✓ Сборка завершена успешно! ║$(NC)"
|
||||||
|
@echo "$(GREEN)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Исполняемый файл:$(NC)"
|
||||||
|
@ls -lh $(DIST_DIR)/$(APP_NAME) 2>/dev/null || dir $(DIST_DIR)\$(APP_NAME).exe 2>/dev/null || echo " $(DIST_DIR)/$(APP_NAME)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Размер файла:$(NC)"
|
||||||
|
@du -h $(DIST_DIR)/$(APP_NAME) 2>/dev/null || echo " ~40-60 MB (включая Python runtime и все библиотеки)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Примечание:$(NC)"
|
||||||
|
@echo " • Исполняемый файл содержит весь Python runtime"
|
||||||
|
@echo " • Certbot все равно должен быть установлен в системе"
|
||||||
|
@echo " • Запускайте с sudo для работы с сертификатами"
|
||||||
|
|
||||||
|
# Сборка для Linux
|
||||||
|
build-linux:
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Сборка исполняемого файла для Linux ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@UNAME=$$(uname -s 2>/dev/null || echo "Unknown"); \
|
||||||
|
if [ "$$UNAME" != "Linux" ]; then \
|
||||||
|
echo "$(RED)ВНИМАНИЕ: Сборка на $$UNAME, но целевая ОС - Linux$(NC)"; \
|
||||||
|
echo "$(YELLOW)Рекомендуется собирать на Linux для лучшей совместимости$(NC)"; \
|
||||||
|
echo ""; \
|
||||||
|
fi
|
||||||
|
@if ! command -v $(PYINSTALLER) >/dev/null 2>&1; then \
|
||||||
|
echo "$(YELLOW)PyInstaller не найден. Установка...$(NC)"; \
|
||||||
|
$(MAKE) install-pyinstaller; \
|
||||||
|
fi
|
||||||
|
@echo "$(YELLOW)→ Компиляция для Linux (x86_64)...$(NC)"
|
||||||
|
@$(PYINSTALLER) --onefile \
|
||||||
|
--name $(APP_NAME) \
|
||||||
|
--add-data "README.md:." \
|
||||||
|
--hidden-import requests \
|
||||||
|
--hidden-import certbot \
|
||||||
|
--hidden-import cryptography \
|
||||||
|
--collect-all certbot \
|
||||||
|
--target-arch x86_64 \
|
||||||
|
--noconfirm \
|
||||||
|
$(SCRIPT_NAME)
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)✓ Сборка для Linux завершена!$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Исполняемый файл:$(NC) $(DIST_DIR)/$(APP_NAME)"
|
||||||
|
@file $(DIST_DIR)/$(APP_NAME) 2>/dev/null || echo " ELF 64-bit executable"
|
||||||
|
@ls -lh $(DIST_DIR)/$(APP_NAME) 2>/dev/null || echo ""
|
||||||
|
|
||||||
|
# Сборка для Windows
|
||||||
|
build-windows:
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Сборка исполняемого файла для Windows ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@UNAME=$$(uname -s 2>/dev/null || echo "Windows"); \
|
||||||
|
SEPARATOR=";"; \
|
||||||
|
if [ "$$UNAME" = "Linux" ] || [ "$$UNAME" = "Darwin" ]; then \
|
||||||
|
echo "$(RED)ВНИМАНИЕ: Кросс-компиляция для Windows из $$UNAME$(NC)"; \
|
||||||
|
echo "$(YELLOW)Используем разделитель ':' вместо ';' для PyInstaller$(NC)"; \
|
||||||
|
echo "$(YELLOW)Рекомендуется: собирайте на нативной Windows для лучших результатов$(NC)"; \
|
||||||
|
echo ""; \
|
||||||
|
SEPARATOR=":"; \
|
||||||
|
fi; \
|
||||||
|
if ! command -v $(PYINSTALLER) >/dev/null 2>&1; then \
|
||||||
|
echo "$(YELLOW)PyInstaller не найден. Установка...$(NC)"; \
|
||||||
|
$(MAKE) install-pyinstaller; \
|
||||||
|
fi; \
|
||||||
|
echo "$(YELLOW)→ Компиляция для Windows (x86_64) с разделителем $$SEPARATOR...$(NC)"; \
|
||||||
|
$(PYINSTALLER) --onefile \
|
||||||
|
--name $(APP_NAME) \
|
||||||
|
--add-data "README.md$${SEPARATOR}." \
|
||||||
|
--hidden-import requests \
|
||||||
|
--hidden-import certbot \
|
||||||
|
--hidden-import cryptography \
|
||||||
|
--collect-all certbot \
|
||||||
|
--icon NONE \
|
||||||
|
--noconfirm \
|
||||||
|
$(SCRIPT_NAME)
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)✓ Сборка для Windows завершена!$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Исполняемый файл:$(NC) $(DIST_DIR)/$(APP_NAME).exe"
|
||||||
|
@ls -lh $(DIST_DIR)/$(APP_NAME).exe 2>/dev/null || dir $(DIST_DIR)\$(APP_NAME).exe 2>/dev/null || echo ""
|
||||||
|
|
||||||
|
# Сборка для всех платформ
|
||||||
|
build-all:
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Сборка для всех платформ ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(RED)⚠️ ВНИМАНИЕ: Кросс-компиляция Windows из Linux НЕ РАБОТАЕТ!$(NC)"
|
||||||
|
@echo "$(YELLOW)→ PyInstaller не может создать .exe файл на Linux/macOS$(NC)"
|
||||||
|
@echo "$(YELLOW)→ Для Windows сборки используйте нативную Windows систему$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Рекомендации:$(NC)"
|
||||||
|
@echo " • Собирать Linux версию на Linux (работает ✓)"
|
||||||
|
@echo " • Собирать Windows версию на Windows (обязательно!)"
|
||||||
|
@echo " • Использовать GitHub Actions для автоматической сборки"
|
||||||
|
@echo ""
|
||||||
|
@$(MAKE) build-linux
|
||||||
|
@echo ""
|
||||||
|
@UNAME=$$(uname -s 2>/dev/null || echo "Windows"); \
|
||||||
|
if [ "$$UNAME" != "Windows" ] && [ "$$UNAME" != "MINGW"* ] && [ "$$UNAME" != "MSYS"* ]; then \
|
||||||
|
echo "$(YELLOW)Пропускаем Windows сборку (текущая ОС: $$UNAME)$(NC)"; \
|
||||||
|
echo "$(YELLOW)Используйте Windows для создания .exe файла$(NC)"; \
|
||||||
|
else \
|
||||||
|
$(MAKE) build-windows; \
|
||||||
|
fi
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(GREEN)║ ✓ Сборка завершена! ║$(NC)"
|
||||||
|
@echo "$(GREEN)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Файлы в директории $(DIST_DIR)/:$(NC)"
|
||||||
|
@ls -lh $(DIST_DIR)/ 2>/dev/null || dir $(DIST_DIR) 2>/dev/null || echo " Проверьте $(DIST_DIR)/"
|
||||||
|
|
||||||
|
# Создание пакета для Linux (tar.gz)
|
||||||
|
package-linux: build-linux
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Создание пакета для Linux ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)→ Подготовка файлов...$(NC)"
|
||||||
|
@mkdir -p $(DIST_DIR)/package
|
||||||
|
@cp $(DIST_DIR)/$(APP_NAME) $(DIST_DIR)/package/
|
||||||
|
@cp README.md $(DIST_DIR)/package/ 2>/dev/null || true
|
||||||
|
@cp -r systemd $(DIST_DIR)/package/ 2>/dev/null || true
|
||||||
|
@if [ -f "config.json.example" ]; then \
|
||||||
|
cp config.json.example $(DIST_DIR)/package/; \
|
||||||
|
fi
|
||||||
|
@echo "$(YELLOW)→ Создание архива...$(NC)"
|
||||||
|
@cd $(DIST_DIR)/package && tar -czf ../$(APP_NAME)-linux-x86_64.tar.gz *
|
||||||
|
@rm -rf $(DIST_DIR)/package
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)✓ Пакет создан:$(NC) $(DIST_DIR)/$(APP_NAME)-linux-x86_64.tar.gz"
|
||||||
|
@ls -lh $(DIST_DIR)/$(APP_NAME)-linux-x86_64.tar.gz
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Содержимое пакета:$(NC)"
|
||||||
|
@tar -tzf $(DIST_DIR)/$(APP_NAME)-linux-x86_64.tar.gz | head -10
|
||||||
|
|
||||||
|
# Создание пакета для Windows (zip)
|
||||||
|
package-windows: build-windows
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Создание пакета для Windows ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@if [ ! -f "$(DIST_DIR)/$(APP_NAME).exe" ]; then \
|
||||||
|
echo "$(RED)✗ Ошибка: Файл $(APP_NAME).exe не найден$(NC)"; \
|
||||||
|
echo "$(YELLOW)⚠️ Кросс-компиляция для Windows из Linux/macOS не создает .exe файл!$(NC)"; \
|
||||||
|
echo "$(YELLOW)→ Используйте нативную Windows систему для сборки Windows версии$(NC)"; \
|
||||||
|
echo ""; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
@echo "$(YELLOW)→ Подготовка файлов...$(NC)"
|
||||||
|
@mkdir -p $(DIST_DIR)/package
|
||||||
|
@cp $(DIST_DIR)/$(APP_NAME).exe $(DIST_DIR)/package/
|
||||||
|
@cp README.md $(DIST_DIR)/package/ 2>/dev/null || true
|
||||||
|
@if [ -f "config.json.example" ]; then cp config.json.example $(DIST_DIR)/package/; fi
|
||||||
|
@echo "$(YELLOW)→ Создание архива (tar.gz)...$(NC)"
|
||||||
|
@cd $(DIST_DIR)/package && tar -czf ../$(APP_NAME)-windows-x86_64.tar.gz *
|
||||||
|
@rm -rf $(DIST_DIR)/package
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)✓ Пакет создан:$(NC) $(DIST_DIR)/$(APP_NAME)-windows-x86_64.tar.gz"
|
||||||
|
@ls -lh $(DIST_DIR)/$(APP_NAME)-windows-x86_64.tar.gz
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Содержимое пакета:$(NC)"
|
||||||
|
@tar -tzf $(DIST_DIR)/$(APP_NAME)-windows-x86_64.tar.gz | head -10
|
||||||
|
|
||||||
|
# Полный цикл релиза
|
||||||
|
release:
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ ПОЛНЫЙ ЦИКЛ РЕЛИЗА ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@$(MAKE) clean-build
|
||||||
|
@$(MAKE) install-pyinstaller
|
||||||
|
@$(MAKE) build-all
|
||||||
|
@$(MAKE) package-linux
|
||||||
|
@$(MAKE) package-windows
|
||||||
|
@echo ""
|
||||||
|
@echo "$(GREEN)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(GREEN)║ ✓ РЕЛИЗ ГОТОВ! ║$(NC)"
|
||||||
|
@echo "$(GREEN)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Артефакты релиза:$(NC)"
|
||||||
|
@ls -lh $(DIST_DIR)/*.tar.gz $(DIST_DIR)/*.zip 2>/dev/null || dir $(DIST_DIR)\*.zip 2>/dev/null || echo " Проверьте $(DIST_DIR)/"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Контрольные суммы SHA256:$(NC)"
|
||||||
|
@cd $(DIST_DIR) && sha256sum *.tar.gz *.zip 2>/dev/null || \
|
||||||
|
cd $(DIST_DIR) && certutil -hashfile $(APP_NAME)-windows-x86_64.zip SHA256 2>/dev/null || \
|
||||||
|
echo " Используйте sha256sum или certutil для проверки контрольных сумм"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Следующие шаги:$(NC)"
|
||||||
|
@echo " 1. Протестируйте исполняемые файлы"
|
||||||
|
@echo " 2. Создайте GitHub Release"
|
||||||
|
@echo " 3. Загрузите пакеты как Assets"
|
||||||
|
|
||||||
|
# Тестирование собранного файла
|
||||||
|
test-build:
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Тестирование собранного файла ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@if [ -f "$(DIST_DIR)/$(APP_NAME)" ]; then \
|
||||||
|
echo "$(YELLOW)→ Тестирование Linux версии...$(NC)"; \
|
||||||
|
chmod +x $(DIST_DIR)/$(APP_NAME); \
|
||||||
|
$(DIST_DIR)/$(APP_NAME) --help; \
|
||||||
|
echo ""; \
|
||||||
|
echo "$(GREEN)✓ Linux версия работает$(NC)"; \
|
||||||
|
elif [ -f "$(DIST_DIR)/$(APP_NAME).exe" ]; then \
|
||||||
|
echo "$(YELLOW)→ Тестирование Windows версии...$(NC)"; \
|
||||||
|
$(DIST_DIR)/$(APP_NAME).exe --help; \
|
||||||
|
echo ""; \
|
||||||
|
echo "$(GREEN)✓ Windows версия работает$(NC)"; \
|
||||||
|
else \
|
||||||
|
echo "$(RED)✗ Исполняемый файл не найден$(NC)"; \
|
||||||
|
echo "$(YELLOW)Запустите 'make build' сначала$(NC)"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Очистка артефактов сборки
|
||||||
|
clean-build:
|
||||||
|
@echo "$(YELLOW)→ Очистка артефактов сборки...$(NC)"
|
||||||
|
@rm -rf $(BUILD_DIR_PY) $(DIST_DIR) $(SPEC_FILE) __pycache__ *.pyc
|
||||||
|
@echo "$(GREEN)✓ Артефакты сборки удалены$(NC)"
|
||||||
|
|
||||||
|
# Информация о среде сборки
|
||||||
|
build-info:
|
||||||
|
@echo "$(BLUE)╔════════════════════════════════════════════════════════════════╗$(NC)"
|
||||||
|
@echo "$(BLUE)║ Информация о среде сборки ║$(NC)"
|
||||||
|
@echo "$(BLUE)╚════════════════════════════════════════════════════════════════╝$(NC)"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Система:$(NC)"
|
||||||
|
@echo " ОС: $$(uname -s 2>/dev/null || echo 'Windows')"
|
||||||
|
@echo " Архитектура: $$(uname -m 2>/dev/null || echo 'x86_64')"
|
||||||
|
@echo " Ядро: $$(uname -r 2>/dev/null || echo 'N/A')"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Python:$(NC)"
|
||||||
|
@echo " Версия: $$($(PYTHON) --version 2>&1)"
|
||||||
|
@echo " Путь: $$(which $(PYTHON) 2>/dev/null || where $(PYTHON) 2>/dev/null || echo 'N/A')"
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)PyInstaller:$(NC)"
|
||||||
|
@if command -v $(PYINSTALLER) >/dev/null 2>&1; then \
|
||||||
|
echo " Версия: $$($(PYINSTALLER) --version 2>&1)"; \
|
||||||
|
echo " Путь: $$(which $(PYINSTALLER) 2>/dev/null || where $(PYINSTALLER) 2>/dev/null)"; \
|
||||||
|
echo " $(GREEN)✓ Установлен$(NC)"; \
|
||||||
|
else \
|
||||||
|
echo " $(RED)✗ Не установлен$(NC)"; \
|
||||||
|
echo " Установите: make install-pyinstaller"; \
|
||||||
|
fi
|
||||||
|
@echo ""
|
||||||
|
@echo "$(YELLOW)Конфигурация сборки:$(NC)"
|
||||||
|
@echo " Исходный файл: $(SCRIPT_NAME)"
|
||||||
|
@echo " Название приложения: $(APP_NAME)"
|
||||||
|
@echo " Директория сборки: $(DIST_DIR)/"
|
||||||
|
@echo ""
|
||||||
|
|
||||||
# По умолчанию показываем помощь
|
# По умолчанию показываем помощь
|
||||||
.DEFAULT_GOAL := help
|
.DEFAULT_GOAL := help
|
||||||
|
|||||||
96
README.md
96
README.md
@@ -16,18 +16,19 @@ Python скрипт теперь автоматически загружает
|
|||||||
## Содержание
|
## Содержание
|
||||||
1. [Введение](#введение)
|
1. [Введение](#введение)
|
||||||
2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush)
|
2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush)
|
||||||
3. [Быстрый старт](#-быстрый-старт)
|
3. [🔨 Сборка исполняемых файлов](#-сборка-исполняемых-файлов)
|
||||||
4. [Установка через Makefile](#-установка-через-makefile)
|
4. [Быстрый старт](#-быстрый-старт)
|
||||||
5. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
|
5. [Установка через Makefile](#-установка-через-makefile)
|
||||||
6. [Требования](#требования)
|
6. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
|
||||||
7. [Установка зависимостей](#установка-зависимостей)
|
7. [Требования](#требования)
|
||||||
8. [Настройка](#настройка)
|
8. [Установка зависимостей](#установка-зависимостей)
|
||||||
9. [Использование Bash скрипта](#использование-bash-скрипта)
|
9. [Настройка](#настройка)
|
||||||
10. [Использование Python скрипта](#использование-python-скрипта)
|
10. [Использование Bash скрипта](#использование-bash-скрипта)
|
||||||
11. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
|
11. [Использование Python скрипта](#использование-python-скрипта)
|
||||||
12. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
|
12. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
|
||||||
13. [Автоматизация обновления](#автоматизация-обновления)
|
13. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
|
||||||
14. [Устранение неполадок](#устранение-неполадок)
|
14. [Автоматизация обновления](#автоматизация-обновления)
|
||||||
|
15. [Устранение неполадок](#устранение-неполадок)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -697,7 +698,76 @@ sudo python3 letsencrypt_regru_api.py -c /etc/letsencrypt/regru_config.json
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Быстрый старт
|
## <EFBFBD> Сборка исполняемых файлов
|
||||||
|
|
||||||
|
### PyInstaller - компиляция в исполняемые файлы
|
||||||
|
|
||||||
|
Скрипт можно скомпилировать в исполняемый файл для Linux и Windows с помощью PyInstaller.
|
||||||
|
|
||||||
|
**Преимущества:**
|
||||||
|
- ✅ Не требуется установленный Python на целевой системе
|
||||||
|
- ✅ Все зависимости включены в один файл
|
||||||
|
- ✅ Простота распространения и развертывания
|
||||||
|
|
||||||
|
**Недостатки:**
|
||||||
|
- ❌ Большой размер (~40-60 MB)
|
||||||
|
- ❌ Certbot всё равно должен быть установлен в системе
|
||||||
|
- ❌ Медленный первый запуск
|
||||||
|
|
||||||
|
### Быстрая сборка
|
||||||
|
|
||||||
|
#### Для Linux:
|
||||||
|
```bash
|
||||||
|
make build-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Для Windows:
|
||||||
|
```bash
|
||||||
|
make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Для всех платформ:
|
||||||
|
```bash
|
||||||
|
make build-all
|
||||||
|
```
|
||||||
|
|
||||||
|
### Полный релиз с пакетами
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создаст tar.gz для Linux и zip для Windows
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
- `dist/letsencrypt-regru` - Linux executable
|
||||||
|
- `dist/letsencrypt-regru.exe` - Windows executable
|
||||||
|
- `dist/letsencrypt-regru-linux-x86_64.tar.gz`
|
||||||
|
- `dist/letsencrypt-regru-windows-x86_64.zip`
|
||||||
|
|
||||||
|
### Использование собранного файла
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
# Установка
|
||||||
|
sudo cp dist/letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
|
||||||
|
# Использование
|
||||||
|
sudo letsencrypt-regru --help
|
||||||
|
sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
```powershell
|
||||||
|
# Просто запустить
|
||||||
|
.\dist\letsencrypt-regru.exe --help
|
||||||
|
```
|
||||||
|
|
||||||
|
📖 **Подробнее:** См. [BUILD_GUIDE.md](BUILD_GUIDE.md) для детальных инструкций по сборке.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## <20>🚀 Быстрый старт
|
||||||
|
|
||||||
### За 3 простых шага получите SSL сертификат в Nginx Proxy Manager!
|
### За 3 простых шага получите SSL сертификат в Nginx Proxy Manager!
|
||||||
|
|
||||||
|
|||||||
455
docs/en/BUILD_GUIDE_EN.md
Normal file
455
docs/en/BUILD_GUIDE_EN.md
Normal file
@@ -0,0 +1,455 @@
|
|||||||
|
# 🔨 Executable Build Guide
|
||||||
|
|
||||||
|
This guide describes the process of compiling the `letsencrypt_regru_api.py` Python script into executable files for Linux and Windows using PyInstaller.
|
||||||
|
|
||||||
|
## 📋 Table of Contents
|
||||||
|
|
||||||
|
- [Advantages of Executable Files](#advantages-of-executable-files)
|
||||||
|
- [Quick Start](#quick-start)
|
||||||
|
- [Detailed Instructions](#detailed-instructions)
|
||||||
|
- [Cross-Compilation](#cross-compilation)
|
||||||
|
- [Troubleshooting](#troubleshooting)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Advantages of Executable Files
|
||||||
|
|
||||||
|
### Pros:
|
||||||
|
- ✅ **Single file** - easy to distribute and deploy
|
||||||
|
- ✅ **Standalone** - no Python installation required on target system
|
||||||
|
- ✅ **All dependencies included** - requests, cryptography, and certbot modules are bundled
|
||||||
|
- ✅ **Simple execution** - just download and run
|
||||||
|
|
||||||
|
### Cons:
|
||||||
|
- ❌ **Large size** - ~40-60 MB (including Python runtime and libraries)
|
||||||
|
- ❌ **Certbot dependency** - system certbot is still required
|
||||||
|
- ❌ **Slow first launch** - unpacking takes a few seconds
|
||||||
|
- ❌ **Rebuild required** - code changes require recompilation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
### Build for current OS:
|
||||||
|
```bash
|
||||||
|
make build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build for all platforms:
|
||||||
|
```bash
|
||||||
|
make build-all
|
||||||
|
```
|
||||||
|
|
||||||
|
### Full release (build + packages):
|
||||||
|
```bash
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📖 Detailed Instructions
|
||||||
|
|
||||||
|
### 1. Install Dependencies
|
||||||
|
|
||||||
|
#### Option A: Automatic Installation
|
||||||
|
```bash
|
||||||
|
make install-pyinstaller
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option B: Manual Installation
|
||||||
|
```bash
|
||||||
|
pip install pyinstaller
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Build for Linux
|
||||||
|
|
||||||
|
**On Linux system:**
|
||||||
|
```bash
|
||||||
|
make build-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
**Result:**
|
||||||
|
- File: `dist/letsencrypt-regru`
|
||||||
|
- Size: ~45-55 MB
|
||||||
|
- Format: ELF 64-bit executable
|
||||||
|
|
||||||
|
**Testing:**
|
||||||
|
```bash
|
||||||
|
./dist/letsencrypt-regru --help
|
||||||
|
sudo ./dist/letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Build for Windows
|
||||||
|
|
||||||
|
**On Windows system (PowerShell/CMD):**
|
||||||
|
```bash
|
||||||
|
make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
**Result:**
|
||||||
|
- File: `dist/letsencrypt-regru.exe`
|
||||||
|
- Size: ~40-50 MB
|
||||||
|
- Format: PE32+ executable (Windows)
|
||||||
|
|
||||||
|
**Testing:**
|
||||||
|
```powershell
|
||||||
|
.\dist\letsencrypt-regru.exe --help
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Create Distribution Packages
|
||||||
|
|
||||||
|
#### Linux package (tar.gz):
|
||||||
|
```bash
|
||||||
|
make package-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
**Package contents:**
|
||||||
|
- `letsencrypt-regru` - executable file
|
||||||
|
- `README.md` - documentation
|
||||||
|
- `systemd/` - systemd unit files
|
||||||
|
- `config.json.example` - configuration example
|
||||||
|
|
||||||
|
**Result:** `dist/letsencrypt-regru-linux-x86_64.tar.gz`
|
||||||
|
|
||||||
|
#### Windows package (zip):
|
||||||
|
```bash
|
||||||
|
make package-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
**Result:** `dist/letsencrypt-regru-windows-x86_64.zip`
|
||||||
|
|
||||||
|
### 5. Full Release Cycle
|
||||||
|
|
||||||
|
Create release with all artifacts:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
**What happens:**
|
||||||
|
1. Clean old artifacts (`clean-build`)
|
||||||
|
2. Install/update PyInstaller
|
||||||
|
3. Build for Linux (`build-linux`)
|
||||||
|
4. Build for Windows (`build-windows`)
|
||||||
|
5. Create Linux package (`package-linux`)
|
||||||
|
6. Create Windows package (`package-windows`)
|
||||||
|
7. Generate SHA256 checksums
|
||||||
|
|
||||||
|
**Result in `dist/`:**
|
||||||
|
```
|
||||||
|
letsencrypt-regru # Linux executable
|
||||||
|
letsencrypt-regru.exe # Windows executable
|
||||||
|
letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
letsencrypt-regru-windows-x86_64.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Cross-Compilation
|
||||||
|
|
||||||
|
### ⚠️ Important Notes
|
||||||
|
|
||||||
|
**Not recommended:**
|
||||||
|
- Building Linux version on Windows
|
||||||
|
- Building Windows version on Linux
|
||||||
|
- Building macOS version on other OSes
|
||||||
|
|
||||||
|
**Reasons:**
|
||||||
|
- System library incompatibility
|
||||||
|
- Different executable formats
|
||||||
|
- Path and separator issues
|
||||||
|
|
||||||
|
### Recommendations
|
||||||
|
|
||||||
|
#### For Linux builds:
|
||||||
|
1. Use Ubuntu 20.04+ or Debian 10+
|
||||||
|
2. Install build-essential
|
||||||
|
3. Use Python virtual environment
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y python3 python3-pip build-essential
|
||||||
|
make build-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
#### For Windows builds:
|
||||||
|
1. Use Windows 10/11
|
||||||
|
2. Install Python 3.8+
|
||||||
|
3. Use PowerShell or CMD
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
#### For both platforms:
|
||||||
|
Use CI/CD (GitHub Actions, GitLab CI):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# .github/workflows/build.yml
|
||||||
|
name: Build Releases
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-linux:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Build Linux
|
||||||
|
run: make build-linux
|
||||||
|
|
||||||
|
build-windows:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Build Windows
|
||||||
|
run: make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ All Makefile Commands
|
||||||
|
|
||||||
|
### Main Commands:
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
|---------|-------------|
|
||||||
|
| `make build` | Build for current OS |
|
||||||
|
| `make build-linux` | Build for Linux |
|
||||||
|
| `make build-windows` | Build for Windows |
|
||||||
|
| `make build-all` | Build for all platforms |
|
||||||
|
| `make package-linux` | Create tar.gz package |
|
||||||
|
| `make package-windows` | Create zip package |
|
||||||
|
| `make release` | Full release cycle |
|
||||||
|
|
||||||
|
### Supporting Commands:
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
|---------|-------------|
|
||||||
|
| `make install-pyinstaller` | Install PyInstaller |
|
||||||
|
| `make test-build` | Test built file |
|
||||||
|
| `make clean-build` | Clean build artifacts |
|
||||||
|
| `make build-info` | Show environment info |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
### Issue: PyInstaller not found
|
||||||
|
|
||||||
|
**Error:**
|
||||||
|
```
|
||||||
|
make: pyinstaller: Command not found
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
```bash
|
||||||
|
make install-pyinstaller
|
||||||
|
# or
|
||||||
|
pip install pyinstaller
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue: Module imports not working
|
||||||
|
|
||||||
|
**Error:**
|
||||||
|
```
|
||||||
|
ModuleNotFoundError: No module named 'requests'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
# or add to PyInstaller command:
|
||||||
|
--hidden-import requests
|
||||||
|
--hidden-import certbot
|
||||||
|
--hidden-import cryptography
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue: Large file size
|
||||||
|
|
||||||
|
**Size ~100+ MB instead of 40-60 MB**
|
||||||
|
|
||||||
|
**Causes:**
|
||||||
|
- Extra modules included
|
||||||
|
- Not using `--onefile`
|
||||||
|
- Debug symbols included
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
```bash
|
||||||
|
# Use optimization flags:
|
||||||
|
pyinstaller --onefile \
|
||||||
|
--strip \
|
||||||
|
--exclude-module tkinter \
|
||||||
|
--exclude-module matplotlib \
|
||||||
|
letsencrypt_regru_api.py
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue: Certbot not working in executable
|
||||||
|
|
||||||
|
**Error:**
|
||||||
|
```
|
||||||
|
certbot: command not found
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
|
||||||
|
Certbot is called via `subprocess` and must be installed on the system:
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
sudo apt-get install certbot
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
- Not directly supported
|
||||||
|
- Use WSL or Docker
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue: File permission errors
|
||||||
|
|
||||||
|
**Error:**
|
||||||
|
```
|
||||||
|
Permission denied: /etc/letsencrypt/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
```bash
|
||||||
|
# Linux/macOS
|
||||||
|
sudo ./dist/letsencrypt-regru --check
|
||||||
|
|
||||||
|
# Or set proper permissions:
|
||||||
|
sudo chmod +x ./dist/letsencrypt-regru
|
||||||
|
sudo chown root:root ./dist/letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue: Slow startup
|
||||||
|
|
||||||
|
**First launch takes 5-10 seconds**
|
||||||
|
|
||||||
|
**Reason:**
|
||||||
|
PyInstaller unpacks files to temporary directory on each run.
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
- This is normal behavior for `--onefile`
|
||||||
|
- Use `--onedir` for faster startup (but many files)
|
||||||
|
- Temporary directory is cached automatically
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Issue: Antivirus blocking file
|
||||||
|
|
||||||
|
**Windows Defender marks .exe as virus**
|
||||||
|
|
||||||
|
**Reasons:**
|
||||||
|
- Self-extracting archive looks like malware
|
||||||
|
- No digital signature
|
||||||
|
- Unknown executable file
|
||||||
|
|
||||||
|
**Solution:**
|
||||||
|
1. **Add to exclusions:**
|
||||||
|
- Windows Defender → Settings → Exclusions
|
||||||
|
|
||||||
|
2. **Sign file with digital signature:**
|
||||||
|
```bash
|
||||||
|
# Requires Code Signing certificate
|
||||||
|
signtool sign /f cert.pfx /p password dist/letsencrypt-regru.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Check on VirusTotal:**
|
||||||
|
- Upload file to virustotal.com
|
||||||
|
- Add results to README
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Comparison: Python vs Executable
|
||||||
|
|
||||||
|
| Feature | Python Script | Executable File |
|
||||||
|
|---------|---------------|-----------------|
|
||||||
|
| Size | ~50 KB | ~40-60 MB |
|
||||||
|
| Dependencies | Requires Python + pip | Standalone |
|
||||||
|
| Startup Speed | Fast (~1 sec) | Slow (~5-10 sec) |
|
||||||
|
| Updates | Just replace .py | Requires rebuild |
|
||||||
|
| Compatibility | Any OS with Python | Only target OS |
|
||||||
|
| Installation | Requires venv setup | Download and run |
|
||||||
|
| Certbot | Via subprocess | Via subprocess |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Recommendations
|
||||||
|
|
||||||
|
### Use Python script if:
|
||||||
|
- ✅ Python already installed on system
|
||||||
|
- ✅ Frequent code updates needed
|
||||||
|
- ✅ Using virtual environment
|
||||||
|
- ✅ Working on servers (production)
|
||||||
|
|
||||||
|
### Use executable file if:
|
||||||
|
- ✅ Python not installed
|
||||||
|
- ✅ Simple deployment needed
|
||||||
|
- ✅ Distributing to end users
|
||||||
|
- ✅ Testing on clean systems
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Using Built File Examples
|
||||||
|
|
||||||
|
### Linux:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Download and extract
|
||||||
|
wget https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
|
||||||
|
# Install
|
||||||
|
sudo mv letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
|
||||||
|
# Use
|
||||||
|
sudo letsencrypt-regru --help
|
||||||
|
sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windows:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Download and extract
|
||||||
|
Invoke-WebRequest -Uri "https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-windows-x86_64.zip" -OutFile "letsencrypt-regru.zip"
|
||||||
|
Expand-Archive -Path letsencrypt-regru.zip -DestinationPath "C:\Program Files\LetsEncrypt-RegRu"
|
||||||
|
|
||||||
|
# Use
|
||||||
|
cd "C:\Program Files\LetsEncrypt-RegRu"
|
||||||
|
.\letsencrypt-regru.exe --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Additional Resources
|
||||||
|
|
||||||
|
- [PyInstaller Documentation](https://pyinstaller.org/en/stable/)
|
||||||
|
- [PyInstaller FAQ](https://pyinstaller.org/en/stable/FAQ.html)
|
||||||
|
- [Building Cross-Platform Applications](https://pyinstaller.org/en/stable/operating-mode.html)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
This project uses the license as specified in the main README.md.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Author:** Dmitry Fofanov
|
||||||
|
**Last Updated:** October 28, 2025
|
||||||
143
docs/en/DESCRIPTION_EN.md
Normal file
143
docs/en/DESCRIPTION_EN.md
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
# 🔒 SSL Certificate Manager for Let's Encrypt + reg.ru
|
||||||
|
|
||||||
|
**Automated Let's Encrypt SSL certificate management with DNS validation via reg.ru API and Nginx Proxy Manager integration**
|
||||||
|
|
||||||
|
## 📖 Description
|
||||||
|
|
||||||
|
Comprehensive solution for automating the creation, renewal, and management of Let's Encrypt SSL certificates for domains registered with reg.ru. Supports DNS-01 validation, wildcard certificates, automatic upload to Nginx Proxy Manager, and test certificate generation for development.
|
||||||
|
|
||||||
|
### ✨ Key Features
|
||||||
|
|
||||||
|
- 🔐 **Automatic SSL certificate issuance** via Let's Encrypt
|
||||||
|
- 🌐 **DNS-01 validation** via reg.ru API (wildcard domain support)
|
||||||
|
- 🔄 **Automatic renewal** with configurable threshold
|
||||||
|
- 📦 **Nginx Proxy Manager integration** - automatic upload and update
|
||||||
|
- 🧪 **Test certificates** - bypass Let's Encrypt rate limits (5 per week)
|
||||||
|
- ⚙️ **Full automation** via systemd/cron
|
||||||
|
- 🔀 **Repository synchronization** - automatic Gitea → GitHub sync
|
||||||
|
|
||||||
|
### 🚀 Quick Start
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install via Makefile
|
||||||
|
sudo make install
|
||||||
|
|
||||||
|
# Configure
|
||||||
|
sudo nano /etc/letsencrypt/regru_config.json
|
||||||
|
|
||||||
|
# Create test certificate (no rate limits)
|
||||||
|
sudo make test-cert
|
||||||
|
|
||||||
|
# Get production certificate
|
||||||
|
sudo make obtain
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📋 Requirements
|
||||||
|
|
||||||
|
- **OS**: Linux (Ubuntu/Debian/CentOS)
|
||||||
|
- **Python**: 3.6+
|
||||||
|
- **Dependencies**: certbot, requests, cryptography
|
||||||
|
- **API**: reg.ru (DNS management access)
|
||||||
|
- **Optional**: Nginx Proxy Manager
|
||||||
|
|
||||||
|
### 🎯 Use Cases
|
||||||
|
|
||||||
|
- ✅ SSL certificate automation for web servers
|
||||||
|
- ✅ Centralized management via Nginx Proxy Manager
|
||||||
|
- ✅ Development and testing with self-signed certificates
|
||||||
|
- ✅ CI/CD integration
|
||||||
|
- ✅ Multi-domain configurations with wildcards
|
||||||
|
|
||||||
|
### 📚 Documentation
|
||||||
|
|
||||||
|
#### English Documentation
|
||||||
|
- [BUILD_GUIDE_EN.md](../en/BUILD_GUIDE_EN.md) - Complete build guide
|
||||||
|
- [QUICKSTART_BUILD_EN.md](../en/QUICKSTART_BUILD_EN.md) - Quick build start
|
||||||
|
- [RELEASE_GUIDE_EN.md](../en/RELEASE_GUIDE_EN.md) - Release creation guide
|
||||||
|
- [MAKEFILE_COMMANDS_EN.md](../en/MAKEFILE_COMMANDS_EN.md) - Makefile commands reference
|
||||||
|
- [TESTING_GUIDE_EN.md](../en/TESTING_GUIDE_EN.md) - Testing guide
|
||||||
|
- [CHEATSHEET_EN.md](../en/CHEATSHEET_EN.md) - Quick reference
|
||||||
|
- [GITEA_SYNC_EN.md](../en/GITEA_SYNC_EN.md) - Gitea → GitHub sync
|
||||||
|
- [PROJECT_STRUCTURE_EN.md](../en/PROJECT_STRUCTURE_EN.md) - Project structure
|
||||||
|
|
||||||
|
#### Russian Documentation / Русская документация
|
||||||
|
- [BUILD_GUIDE.md](../ru/BUILD_GUIDE.md) - Полное руководство по сборке
|
||||||
|
- [QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md) - Быстрый старт сборки
|
||||||
|
- [RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md) - Руководство по созданию релизов
|
||||||
|
- [MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md) - Справочник команд Makefile
|
||||||
|
- [TESTING_GUIDE.md](../ru/TESTING_GUIDE.md) - Руководство по тестированию
|
||||||
|
- [CHEATSHEET.md](../ru/CHEATSHEET.md) - Быстрая шпаргалка
|
||||||
|
- [GITEA_SYNC.md](../ru/GITEA_SYNC.md) - Синхронизация Gitea → GitHub
|
||||||
|
- [PROJECT_STRUCTURE.md](../ru/PROJECT_STRUCTURE.md) - Структура проекта
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔨 Building Executables
|
||||||
|
|
||||||
|
The project supports building standalone executables for Linux and Windows:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build for current OS
|
||||||
|
make build
|
||||||
|
|
||||||
|
# Build for all platforms
|
||||||
|
make build-all
|
||||||
|
|
||||||
|
# Create full release
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
**Result:**
|
||||||
|
- Linux: `letsencrypt-regru` (~45-55 MB)
|
||||||
|
- Windows: `letsencrypt-regru.exe` (~40-50 MB)
|
||||||
|
|
||||||
|
See [BUILD_GUIDE_EN.md](../en/BUILD_GUIDE_EN.md) for details.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Automated Releases
|
||||||
|
|
||||||
|
### GitHub Actions
|
||||||
|
|
||||||
|
Create a tag to trigger automatic build and release:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -a v1.0.0 -m "Release 1.0.0"
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gitea Actions
|
||||||
|
|
||||||
|
Same workflow available for self-hosted Gitea:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -a v1.0.0 -m "Release 1.0.0"
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
See [RELEASE_GUIDE_EN.md](../en/RELEASE_GUIDE_EN.md) for details.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 👤 Author
|
||||||
|
|
||||||
|
**Dmitry Fofanov** @ 2025
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
Open Source - Free to use
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
Pull requests are welcome!
|
||||||
|
|
||||||
|
## 🔗 Links
|
||||||
|
|
||||||
|
- **reg.ru API Documentation**: https://www.reg.ru/support/api
|
||||||
|
- **Let's Encrypt**: https://letsencrypt.org/
|
||||||
|
- **Nginx Proxy Manager**: https://nginxproxymanager.com/
|
||||||
|
- **PyInstaller**: https://pyinstaller.org/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** October 28, 2025
|
||||||
174
docs/en/DOCS_INDEX_EN.md
Normal file
174
docs/en/DOCS_INDEX_EN.md
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
# 📚 Documentation Index
|
||||||
|
|
||||||
|
## 🇬🇧 English Documentation
|
||||||
|
|
||||||
|
### Main Guides
|
||||||
|
- **[DESCRIPTION_EN.md](DESCRIPTION_EN.md)** - Project Description & Overview
|
||||||
|
- **[BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md)** - Complete Build Guide
|
||||||
|
- **[QUICKSTART_BUILD_EN.md](QUICKSTART_BUILD_EN.md)** - Quick Build Start (5 minutes)
|
||||||
|
- **[RELEASE_GUIDE_EN.md](RELEASE_GUIDE_EN.md)** - Automated Release Guide
|
||||||
|
- **[INSTALL_GUIDE_EN.md](INSTALL_GUIDE_EN.md)** - Installation Guide
|
||||||
|
- **[TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md)** - Testing Guide
|
||||||
|
|
||||||
|
### Reference Materials
|
||||||
|
- **[MAKEFILE_COMMANDS_EN.md](MAKEFILE_COMMANDS_EN.md)** - Makefile Commands Reference
|
||||||
|
- **[CHEATSHEET_EN.md](CHEATSHEET_EN.md)** - Quick Reference
|
||||||
|
- **[CHANGELOG_EN.md](CHANGELOG_EN.md)** - Change History
|
||||||
|
|
||||||
|
### Developer Guides
|
||||||
|
- **[PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md)** - Project Structure
|
||||||
|
- **[GITEA_SYNC_EN.md](GITEA_SYNC_EN.md)** - Gitea → GitHub Synchronization
|
||||||
|
|
||||||
|
### SSL & Certificates
|
||||||
|
- **[SSL_SCRIPTS_README_EN.md](SSL_SCRIPTS_README_EN.md)** - SSL Scripts Documentation
|
||||||
|
- **[SSL_Certificate_Creation_and_Renewal_EN.md](SSL_Certificate_Creation_and_Renewal_EN.md)** - SSL Certificate Guide
|
||||||
|
- **[Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md](Add_Lets_Encrypt_Certificate_for_regru_Provider_EN.md)** - Let's Encrypt + reg.ru
|
||||||
|
|
||||||
|
### Nginx Integration
|
||||||
|
- **[Nginx_Manager_SSL_Configuration_EN.md](Nginx_Manager_SSL_Configuration_EN.md)** - Nginx Manager SSL Setup
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🇷🇺 Russian Documentation / Русская документация
|
||||||
|
|
||||||
|
### Основные руководства / Main Guides
|
||||||
|
- **[DESCRIPTION.md](../ru/DESCRIPTION.md)** - Описание проекта
|
||||||
|
- **[BUILD_GUIDE.md](../ru/BUILD_GUIDE.md)** - Полное руководство по сборке
|
||||||
|
- **[QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md)** - Быстрый старт сборки (5 минут)
|
||||||
|
- **[RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md)** - Руководство по автоматическим релизам
|
||||||
|
- **[INSTALL_GUIDE.md](../ru/INSTALL_GUIDE.md)** - Руководство по установке
|
||||||
|
- **[TESTING_GUIDE.md](../ru/TESTING_GUIDE.md)** - Руководство по тестированию
|
||||||
|
|
||||||
|
### Справочная информация / Reference Materials
|
||||||
|
- **[MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md)** - Справочник команд Makefile
|
||||||
|
- **[CHEATSHEET.md](../ru/CHEATSHEET.md)** - Быстрая шпаргалка
|
||||||
|
- **[CHANGELOG.md](../ru/CHANGELOG.md)** - История изменений
|
||||||
|
|
||||||
|
### Руководства для разработчиков / Developer Guides
|
||||||
|
- **[PROJECT_STRUCTURE.md](../ru/PROJECT_STRUCTURE.md)** - Структура проекта
|
||||||
|
- **[GITEA_SYNC.md](../ru/GITEA_SYNC.md)** - Синхронизация Gitea → GitHub
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Quick Start / Быстрый старт
|
||||||
|
|
||||||
|
### For End Users / Для конечных пользователей
|
||||||
|
|
||||||
|
**English:**
|
||||||
|
1. Start here: [DESCRIPTION_EN.md](DESCRIPTION_EN.md)
|
||||||
|
2. Install: [INSTALL_GUIDE_EN.md](INSTALL_GUIDE_EN.md)
|
||||||
|
3. Test: [TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md)
|
||||||
|
4. Quick reference: [CHEATSHEET_EN.md](CHEATSHEET_EN.md)
|
||||||
|
|
||||||
|
**Russian / Русский:**
|
||||||
|
1. Начните здесь: [DESCRIPTION.md](../ru/DESCRIPTION.md)
|
||||||
|
2. Установка: [INSTALL_GUIDE.md](../ru/INSTALL_GUIDE.md)
|
||||||
|
3. Тестирование: [TESTING_GUIDE.md](../ru/TESTING_GUIDE.md)
|
||||||
|
4. Шпаргалка: [CHEATSHEET.md](../ru/CHEATSHEET.md)
|
||||||
|
|
||||||
|
### For Developers / Для разработчиков
|
||||||
|
|
||||||
|
**English:**
|
||||||
|
1. Build guide: [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md)
|
||||||
|
2. Quick build: [QUICKSTART_BUILD_EN.md](QUICKSTART_BUILD_EN.md)
|
||||||
|
3. Create release: [RELEASE_GUIDE_EN.md](RELEASE_GUIDE_EN.md)
|
||||||
|
4. Commands: [MAKEFILE_COMMANDS_EN.md](MAKEFILE_COMMANDS_EN.md)
|
||||||
|
|
||||||
|
**Russian / Русский:**
|
||||||
|
1. Руководство по сборке: [BUILD_GUIDE.md](../ru/BUILD_GUIDE.md)
|
||||||
|
2. Быстрая сборка: [QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md)
|
||||||
|
3. Создание релиза: [RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md)
|
||||||
|
4. Команды: [MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📖 Documentation by Topic / Документация по темам
|
||||||
|
|
||||||
|
### Installation / Установка
|
||||||
|
| Topic | English | Russian |
|
||||||
|
|-------|---------|---------|
|
||||||
|
| Installation Guide | [INSTALL_GUIDE_EN.md](INSTALL_GUIDE_EN.md) | [INSTALL_GUIDE.md](../ru/INSTALL_GUIDE.md) |
|
||||||
|
| Quick Start | [DESCRIPTION_EN.md](DESCRIPTION_EN.md) | [DESCRIPTION.md](../ru/DESCRIPTION.md) |
|
||||||
|
|
||||||
|
### Building / Сборка
|
||||||
|
| Topic | English | Russian |
|
||||||
|
|-------|---------|---------|
|
||||||
|
| Complete Build Guide | [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md) | [BUILD_GUIDE.md](../ru/BUILD_GUIDE.md) |
|
||||||
|
| Quick Build (5 min) | [QUICKSTART_BUILD_EN.md](QUICKSTART_BUILD_EN.md) | [QUICKSTART_BUILD.md](../ru/QUICKSTART_BUILD.md) |
|
||||||
|
| Makefile Commands | [MAKEFILE_COMMANDS_EN.md](MAKEFILE_COMMANDS_EN.md) | [MAKEFILE_COMMANDS.md](../ru/MAKEFILE_COMMANDS.md) |
|
||||||
|
|
||||||
|
### Releases / Релизы
|
||||||
|
| Topic | English | Russian |
|
||||||
|
|-------|---------|---------|
|
||||||
|
| Automated Releases | [RELEASE_GUIDE_EN.md](RELEASE_GUIDE_EN.md) | [RELEASE_GUIDE.md](../ru/RELEASE_GUIDE.md) |
|
||||||
|
| Changelog | [CHANGELOG_EN.md](CHANGELOG_EN.md) | [CHANGELOG.md](../ru/CHANGELOG.md) |
|
||||||
|
|
||||||
|
### Testing / Тестирование
|
||||||
|
| Topic | English | Russian |
|
||||||
|
|-------|---------|---------|
|
||||||
|
| Testing Guide | [TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md) | [TESTING_GUIDE.md](../ru/TESTING_GUIDE.md) |
|
||||||
|
|
||||||
|
### Reference / Справка
|
||||||
|
| Topic | English | Russian |
|
||||||
|
|-------|---------|---------|
|
||||||
|
| Quick Reference | [CHEATSHEET_EN.md](CHEATSHEET_EN.md) | [CHEATSHEET.md](../ru/CHEATSHEET.md) |
|
||||||
|
| Project Structure | [PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md) | [PROJECT_STRUCTURE.md](../ru/PROJECT_STRUCTURE.md) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Documentation Status / Статус документации
|
||||||
|
|
||||||
|
| Document | English | Russian | Status |
|
||||||
|
|----------|---------|---------|--------|
|
||||||
|
| Description | ✅ | ✅ | Complete |
|
||||||
|
| Build Guide | ✅ | ✅ | Complete |
|
||||||
|
| Quick Build | ✅ | ✅ | Complete |
|
||||||
|
| Release Guide | ✅ | ✅ | Complete |
|
||||||
|
| Install Guide | ✅ | ✅ | Complete |
|
||||||
|
| Makefile Commands | ✅ | ✅ | Complete |
|
||||||
|
| Testing Guide | ✅ | ✅ | Complete |
|
||||||
|
| Cheatsheet | ✅ | ✅ | Complete |
|
||||||
|
| Project Structure | ✅ | ✅ | Complete |
|
||||||
|
| Gitea Sync | ✅ | ✅ | Complete |
|
||||||
|
| Changelog | ✅ | ✅ | Complete |
|
||||||
|
|
||||||
|
**Legend:**
|
||||||
|
- ✅ Complete / Готово
|
||||||
|
- 🔄 In Progress / В разработке
|
||||||
|
- ❌ Not Started / Не начато
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Choose Your Language / Выберите язык
|
||||||
|
|
||||||
|
### 🇬🇧 Prefer English?
|
||||||
|
👉 Start with [DESCRIPTION_EN.md](DESCRIPTION_EN.md)
|
||||||
|
|
||||||
|
### 🇷🇺 Предпочитаете русский?
|
||||||
|
👉 Начните с [DESCRIPTION.md](../ru/DESCRIPTION.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Contributing / Вклад
|
||||||
|
|
||||||
|
Help improve documentation / Помогите улучшить документацию:
|
||||||
|
- Report issues / Сообщайте об ошибках
|
||||||
|
- Suggest improvements / Предлагайте улучшения
|
||||||
|
- Fix typos / Исправляйте опечатки
|
||||||
|
- Translate / Переводите
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 External Resources / Внешние ресурсы
|
||||||
|
|
||||||
|
- **reg.ru API**: https://www.reg.ru/support/api
|
||||||
|
- **Let's Encrypt**: https://letsencrypt.org/
|
||||||
|
- **Nginx Proxy Manager**: https://nginxproxymanager.com/
|
||||||
|
- **PyInstaller**: https://pyinstaller.org/
|
||||||
|
- **GitHub Actions**: https://docs.github.com/actions
|
||||||
|
- **Gitea Actions**: https://docs.gitea.com/usage/actions/overview
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated / Обновлено**: October 28, 2025
|
||||||
|
**Maintained by / Поддерживает**: Dmitry Fofanov
|
||||||
365
docs/en/INSTALL_GUIDE_EN.md
Normal file
365
docs/en/INSTALL_GUIDE_EN.md
Normal file
@@ -0,0 +1,365 @@
|
|||||||
|
# Installation Guide for letsencrypt_regru.sh
|
||||||
|
|
||||||
|
**Author:** Dmitry Fofanov
|
||||||
|
**Date:** October 28, 2025
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
`letsencrypt_regru.sh` is an automated installer for Let's Encrypt Manager with reg.ru and Nginx Proxy Manager integration.
|
||||||
|
|
||||||
|
The script automates:
|
||||||
|
- Installation of all system dependencies
|
||||||
|
- Python virtual environment creation
|
||||||
|
- Python library installation (requests, cryptography, certbot)
|
||||||
|
- Interactive configuration setup
|
||||||
|
- Creating and configuring systemd services
|
||||||
|
- Automatic certificate renewal setup
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Linux (Debian/Ubuntu, CentOS/RHEL/Fedora)
|
||||||
|
- Root access (sudo)
|
||||||
|
- Minimum 512MB RAM
|
||||||
|
- Minimum 1GB free disk space
|
||||||
|
- Internet connection
|
||||||
|
|
||||||
|
## Quick Installation
|
||||||
|
|
||||||
|
**Method 1: Automatic Installation (Recommended)**
|
||||||
|
|
||||||
|
The fastest way - run installation directly from GitHub:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo bash -c "$(curl -fsSL https://github.com/DFofanov/configure_nginx_manager/raw/refs/heads/master/letsencrypt_regru.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
This command will:
|
||||||
|
- Automatically download the installation script
|
||||||
|
- Run it with root privileges
|
||||||
|
- Guide you through interactive setup
|
||||||
|
|
||||||
|
**Method 2: Clone Repository**
|
||||||
|
|
||||||
|
If you want to review the code before installation:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Download repository
|
||||||
|
git clone https://github.com/DFofanov/configure_nginx_manager.git
|
||||||
|
cd configure_nginx_manager
|
||||||
|
|
||||||
|
# 2. Make executable
|
||||||
|
chmod +x letsencrypt_regru.sh
|
||||||
|
|
||||||
|
# 3. Run installation
|
||||||
|
sudo ./letsencrypt_regru.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Interactive Setup
|
||||||
|
|
||||||
|
During installation, the script will ask for:
|
||||||
|
|
||||||
|
1. **Domain** - your main domain (e.g., `example.com`)
|
||||||
|
2. **Email** - for Let's Encrypt notifications
|
||||||
|
3. **reg.ru credentials:**
|
||||||
|
- Username
|
||||||
|
- Password
|
||||||
|
4. **Wildcard certificate** - create `*.example.com` (recommended: Yes)
|
||||||
|
5. **NPM integration** (optional):
|
||||||
|
- NPM address (e.g., `http://10.10.10.14:81`)
|
||||||
|
- NPM login email
|
||||||
|
- NPM password
|
||||||
|
|
||||||
|
## Structure After Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
/opt/letsencrypt-regru/ # Application
|
||||||
|
├── letsencrypt_regru_api.py # Main script
|
||||||
|
├── venv/ # Python virtual environment
|
||||||
|
└── docs/ # Documentation
|
||||||
|
|
||||||
|
/etc/letsencrypt-regru/ # Configuration
|
||||||
|
└── config.json # Settings (credentials, domain, NPM)
|
||||||
|
|
||||||
|
/var/log/letsencrypt-regru/ # Logs
|
||||||
|
└── letsencrypt_regru.log
|
||||||
|
|
||||||
|
/etc/letsencrypt/live/ # Let's Encrypt certificates
|
||||||
|
└── example.com/
|
||||||
|
├── privkey.pem
|
||||||
|
├── cert.pem
|
||||||
|
├── chain.pem
|
||||||
|
└── fullchain.pem
|
||||||
|
|
||||||
|
/etc/systemd/system/ # Systemd services
|
||||||
|
├── letsencrypt-regru.service # Renewal service
|
||||||
|
└── letsencrypt-regru.timer # Timer (every 12 hours)
|
||||||
|
|
||||||
|
/usr/local/bin/
|
||||||
|
└── letsencrypt-regru # Global command
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using letsencrypt-regru Command
|
||||||
|
|
||||||
|
After installation, a convenient command is available:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check current certificate expiration
|
||||||
|
letsencrypt-regru --check
|
||||||
|
|
||||||
|
# Obtain new Let's Encrypt certificate
|
||||||
|
letsencrypt-regru --obtain
|
||||||
|
|
||||||
|
# Renew existing certificate
|
||||||
|
letsencrypt-regru --renew
|
||||||
|
|
||||||
|
# Automatically check and renew if needed
|
||||||
|
letsencrypt-regru --auto
|
||||||
|
|
||||||
|
# Create test self-signed certificate
|
||||||
|
letsencrypt-regru --test-cert
|
||||||
|
|
||||||
|
# Show help
|
||||||
|
letsencrypt-regru --help
|
||||||
|
```
|
||||||
|
|
||||||
|
## Automatic Renewal
|
||||||
|
|
||||||
|
The installer configures a systemd timer for automatic checks:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check timer status
|
||||||
|
systemctl status letsencrypt-regru.timer
|
||||||
|
|
||||||
|
# When is next run
|
||||||
|
systemctl list-timers letsencrypt-regru.timer
|
||||||
|
|
||||||
|
# View run history
|
||||||
|
journalctl -u letsencrypt-regru
|
||||||
|
|
||||||
|
# Follow logs in real-time
|
||||||
|
journalctl -u letsencrypt-regru -f
|
||||||
|
```
|
||||||
|
|
||||||
|
### Timer Settings
|
||||||
|
|
||||||
|
Default settings:
|
||||||
|
- First run: 15 minutes after system boot
|
||||||
|
- Frequency: every 12 hours
|
||||||
|
- Random delay: up to 1 hour (to avoid creating load)
|
||||||
|
|
||||||
|
Can be modified in `/etc/systemd/system/letsencrypt-regru.timer`.
|
||||||
|
|
||||||
|
## Editing Configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Open configuration in editor
|
||||||
|
sudo nano /etc/letsencrypt-regru/config.json
|
||||||
|
|
||||||
|
# After changes, restart timer
|
||||||
|
sudo systemctl restart letsencrypt-regru.timer
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example config.json
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"regru_username": "your_username",
|
||||||
|
"regru_password": "your_password",
|
||||||
|
"domain": "example.com",
|
||||||
|
"wildcard": true,
|
||||||
|
"email": "admin@example.com",
|
||||||
|
"cert_dir": "/etc/letsencrypt/live",
|
||||||
|
"log_file": "/var/log/letsencrypt-regru/letsencrypt_regru.log",
|
||||||
|
"dns_propagation_wait": 60,
|
||||||
|
"dns_check_attempts": 10,
|
||||||
|
"dns_check_interval": 10,
|
||||||
|
"renewal_days": 30,
|
||||||
|
"npm_enabled": true,
|
||||||
|
"npm_host": "http://10.10.10.14:81",
|
||||||
|
"npm_email": "admin@npm.local",
|
||||||
|
"npm_password": "secure_password"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Updating Application
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Download latest version
|
||||||
|
cd configure_nginx_manager
|
||||||
|
git pull
|
||||||
|
|
||||||
|
# Run update
|
||||||
|
sudo ./letsencrypt_regru.sh update
|
||||||
|
```
|
||||||
|
|
||||||
|
Update will:
|
||||||
|
- Stop timer
|
||||||
|
- Update script
|
||||||
|
- Update Python dependencies
|
||||||
|
- Restart timer
|
||||||
|
|
||||||
|
## Uninstallation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Complete application removal
|
||||||
|
sudo ./letsencrypt_regru.sh uninstall
|
||||||
|
```
|
||||||
|
|
||||||
|
Script will remove:
|
||||||
|
- Application from `/opt/letsencrypt-regru/`
|
||||||
|
- Systemd services
|
||||||
|
- Global command
|
||||||
|
|
||||||
|
Certificates in `/etc/letsencrypt/live/` are preserved!
|
||||||
|
|
||||||
|
Optionally you can remove:
|
||||||
|
- Configuration `/etc/letsencrypt-regru/`
|
||||||
|
- Logs `/var/log/letsencrypt-regru/`
|
||||||
|
|
||||||
|
## Viewing Logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Systemd logs (recommended)
|
||||||
|
journalctl -u letsencrypt-regru -f
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||||
|
|
||||||
|
# Last 100 lines
|
||||||
|
tail -n 100 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Installation Check
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check command availability
|
||||||
|
which letsencrypt-regru
|
||||||
|
|
||||||
|
# Check Python environment
|
||||||
|
ls -la /opt/letsencrypt-regru/venv/
|
||||||
|
|
||||||
|
# Check systemd services
|
||||||
|
systemctl list-unit-files | grep letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
### Installation Errors
|
||||||
|
|
||||||
|
**Error: "Permission denied"**
|
||||||
|
```bash
|
||||||
|
# Run with sudo
|
||||||
|
sudo ./letsencrypt_regru.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
**Error: "Package not found"**
|
||||||
|
```bash
|
||||||
|
# Update package lists
|
||||||
|
sudo apt-get update # Debian/Ubuntu
|
||||||
|
sudo yum update # CentOS/RHEL
|
||||||
|
```
|
||||||
|
|
||||||
|
**Error: "Python module not found"**
|
||||||
|
```bash
|
||||||
|
# Reinstall virtual environment
|
||||||
|
sudo rm -rf /opt/letsencrypt-regru/venv
|
||||||
|
sudo ./letsencrypt_regru.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Certificate Issues
|
||||||
|
|
||||||
|
**Certificate not created**
|
||||||
|
```bash
|
||||||
|
# Check logs
|
||||||
|
tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||||
|
|
||||||
|
# Check configuration
|
||||||
|
cat /etc/letsencrypt-regru/config.json
|
||||||
|
|
||||||
|
# Try manually
|
||||||
|
letsencrypt-regru --obtain -v
|
||||||
|
```
|
||||||
|
|
||||||
|
**DNS not updating**
|
||||||
|
```bash
|
||||||
|
# Increase wait time in config.json
|
||||||
|
"dns_propagation_wait": 120,
|
||||||
|
"dns_check_attempts": 20
|
||||||
|
```
|
||||||
|
|
||||||
|
### NPM Issues
|
||||||
|
|
||||||
|
**Not uploading to NPM**
|
||||||
|
```bash
|
||||||
|
# Check NPM availability
|
||||||
|
curl http://192.168.10.14:81
|
||||||
|
|
||||||
|
# Check credentials in config.json
|
||||||
|
# Try manually
|
||||||
|
letsencrypt-regru --test-cert -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## Supported OS
|
||||||
|
|
||||||
|
✅ Debian 10, 11, 12
|
||||||
|
✅ Ubuntu 20.04, 22.04, 24.04
|
||||||
|
✅ CentOS 7, 8
|
||||||
|
✅ RHEL 7, 8, 9
|
||||||
|
✅ Fedora 35+
|
||||||
|
|
||||||
|
## Additional Features
|
||||||
|
|
||||||
|
### Test Certificate
|
||||||
|
|
||||||
|
For testing without Let's Encrypt rate limits:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
letsencrypt-regru --test-cert
|
||||||
|
```
|
||||||
|
|
||||||
|
Creates self-signed certificate valid for 90 days.
|
||||||
|
|
||||||
|
### Manual Renewal Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start service manually
|
||||||
|
sudo systemctl start letsencrypt-regru.service
|
||||||
|
|
||||||
|
# Check status
|
||||||
|
systemctl status letsencrypt-regru.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Change Check Frequency
|
||||||
|
|
||||||
|
Edit `/etc/systemd/system/letsencrypt-regru.timer`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[Timer]
|
||||||
|
# Every 6 hours instead of 12
|
||||||
|
OnUnitActiveSec=6h
|
||||||
|
```
|
||||||
|
|
||||||
|
Then:
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl restart letsencrypt-regru.timer
|
||||||
|
```
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
- Configuration with passwords has `600` permissions (root only)
|
||||||
|
- Certificate private keys have `600` permissions
|
||||||
|
- All operations run as root
|
||||||
|
- Logs accessible only to root
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
- GitHub Issues: https://github.com/DFofanov/configure_nginx_manager/issues
|
||||||
|
- Documentation: `/opt/letsencrypt-regru/docs/`
|
||||||
|
- Email: admin@dfv24.com
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Developed by:** Dmitry Fofanov
|
||||||
|
**Date:** October 28, 2025
|
||||||
|
**Version:** 2.0
|
||||||
159
docs/en/MAKEFILE_COMMANDS_EN.md
Normal file
159
docs/en/MAKEFILE_COMMANDS_EN.md
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
# Makefile Commands - Quick Reference
|
||||||
|
|
||||||
|
## 📋 Command Categories
|
||||||
|
|
||||||
|
### 🛠️ Installation and Deployment
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make install # Full application installation
|
||||||
|
make uninstall # Remove application
|
||||||
|
make status # Check installation status
|
||||||
|
make check-config # Verify configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔨 Building Executables
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make build # Build for current OS
|
||||||
|
make build-linux # Build for Linux
|
||||||
|
make build-windows # Build for Windows
|
||||||
|
make build-all # Build for all platforms
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📦 Creating Packages
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make package-linux # Create tar.gz for Linux
|
||||||
|
make package-windows # Create zip for Windows
|
||||||
|
make release # Full release cycle
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🧪 Testing
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make test-run # Test script run
|
||||||
|
make test-cert # Create test certificate
|
||||||
|
make test-build # Test built file
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🚀 Running Operations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make run # Automatic check and renewal
|
||||||
|
make obtain # Obtain new certificate
|
||||||
|
make renew # Renew existing certificate
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📊 Monitoring
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make logs # Show logs
|
||||||
|
make status # Service status
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🧹 Cleanup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make clean # Clean Python temporary files
|
||||||
|
make clean-build # Clean build artifacts
|
||||||
|
```
|
||||||
|
|
||||||
|
### ℹ️ Information
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make help # Show help
|
||||||
|
make build-info # Build environment information
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Common Scenarios
|
||||||
|
|
||||||
|
### Initial Installation
|
||||||
|
```bash
|
||||||
|
sudo make install
|
||||||
|
sudo make check-config
|
||||||
|
sudo make test-run
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building Release for GitHub
|
||||||
|
```bash
|
||||||
|
make clean-build
|
||||||
|
make release
|
||||||
|
# Files will be in dist/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating Test Environment
|
||||||
|
```bash
|
||||||
|
sudo make install
|
||||||
|
sudo make test-cert
|
||||||
|
sudo make status
|
||||||
|
```
|
||||||
|
|
||||||
|
### Manual Certificate Renewal
|
||||||
|
```bash
|
||||||
|
sudo make run
|
||||||
|
sudo make logs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Removing Application
|
||||||
|
```bash
|
||||||
|
sudo make uninstall
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Environment Variables
|
||||||
|
|
||||||
|
Main variables defined in Makefile:
|
||||||
|
|
||||||
|
```makefile
|
||||||
|
INSTALL_DIR = /opt/letsencrypt-regru
|
||||||
|
CONFIG_FILE = /etc/letsencrypt/regru_config.json
|
||||||
|
LOG_FILE = /var/log/letsencrypt_regru.log
|
||||||
|
SERVICE_NAME = letsencrypt-regru
|
||||||
|
PYTHON = python3
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Required Permissions
|
||||||
|
|
||||||
|
**Require sudo:**
|
||||||
|
- `make install`
|
||||||
|
- `make uninstall`
|
||||||
|
- `make run`
|
||||||
|
- `make obtain`
|
||||||
|
- `make renew`
|
||||||
|
- `make test-run`
|
||||||
|
- `make test-cert`
|
||||||
|
|
||||||
|
**Don't require sudo:**
|
||||||
|
- `make build*`
|
||||||
|
- `make package*`
|
||||||
|
- `make clean*`
|
||||||
|
- `make help`
|
||||||
|
- `make build-info`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Useful Combinations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Full reinstallation
|
||||||
|
sudo make uninstall && sudo make install
|
||||||
|
|
||||||
|
# Build and test
|
||||||
|
make build && make test-build
|
||||||
|
|
||||||
|
# Clean and release
|
||||||
|
make clean-build && make release
|
||||||
|
|
||||||
|
# Post-installation check
|
||||||
|
sudo make status && sudo make test-run && sudo make logs
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Author:** Dmitry Fofanov
|
||||||
|
**Last Updated:** October 28, 2025
|
||||||
111
docs/en/QUICKSTART_BUILD_EN.md
Normal file
111
docs/en/QUICKSTART_BUILD_EN.md
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
# 🎯 Quick Start - Building Executables
|
||||||
|
|
||||||
|
This is a quick guide for those who want to build an executable file fast.
|
||||||
|
|
||||||
|
## For Linux
|
||||||
|
|
||||||
|
### 1. Install dependencies
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y python3 python3-pip git make
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Clone repository
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/DFofanov/configure_nginx_manager.git
|
||||||
|
cd configure_nginx_manager
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Build
|
||||||
|
```bash
|
||||||
|
make build-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Result
|
||||||
|
```bash
|
||||||
|
ls -lh dist/letsencrypt-regru
|
||||||
|
# Executable file is ready!
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Install (optional)
|
||||||
|
```bash
|
||||||
|
sudo cp dist/letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Use
|
||||||
|
```bash
|
||||||
|
letsencrypt-regru --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## For Windows
|
||||||
|
|
||||||
|
### 1. Install Python
|
||||||
|
Download from [python.org](https://www.python.org/downloads/) and install
|
||||||
|
|
||||||
|
### 2. Clone repository
|
||||||
|
```powershell
|
||||||
|
git clone https://github.com/DFofanov/configure_nginx_manager.git
|
||||||
|
cd configure_nginx_manager
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Build
|
||||||
|
```powershell
|
||||||
|
make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Result
|
||||||
|
```powershell
|
||||||
|
dir dist\letsencrypt-regru.exe
|
||||||
|
# Executable file is ready!
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Use
|
||||||
|
```powershell
|
||||||
|
.\dist\letsencrypt-regru.exe --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Creating Release for Both Platforms
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# This will create packages for Linux and Windows
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
**Result in `dist/`:**
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz`
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Useful Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Show help for all commands
|
||||||
|
make help
|
||||||
|
|
||||||
|
# Build environment information
|
||||||
|
make build-info
|
||||||
|
|
||||||
|
# Test built file
|
||||||
|
make test-build
|
||||||
|
|
||||||
|
# Clean artifacts
|
||||||
|
make clean-build
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❓ Problems?
|
||||||
|
|
||||||
|
See [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md) for detailed instructions and troubleshooting.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**File size:** ~40-60 MB (including Python runtime)
|
||||||
|
**Build time:** ~2-5 minutes
|
||||||
|
**Requirements:** Python 3.8+, PyInstaller
|
||||||
178
docs/en/RELEASE_GUIDE_EN.md
Normal file
178
docs/en/RELEASE_GUIDE_EN.md
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
# 🎯 Quick Guide: Automatic Releases
|
||||||
|
|
||||||
|
## For GitHub
|
||||||
|
|
||||||
|
### 1. Creating a Release
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create tag
|
||||||
|
git tag -a v1.0.0 -m "Release version 1.0.0"
|
||||||
|
|
||||||
|
# Push tag
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. What Happens Automatically
|
||||||
|
|
||||||
|
GitHub Actions will run `.github/workflows/build-release.yml`:
|
||||||
|
|
||||||
|
1. ✅ Build Linux version (Ubuntu runner)
|
||||||
|
2. ✅ Build Windows version (Windows runner)
|
||||||
|
3. ✅ Create packages
|
||||||
|
4. ✅ Generate SHA256 checksums
|
||||||
|
5. ✅ Create GitHub Release
|
||||||
|
6. ✅ Upload artifacts
|
||||||
|
|
||||||
|
### 3. Result
|
||||||
|
|
||||||
|
Release will appear at: `https://github.com/USER/REPO/releases/tag/v1.0.0`
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz`
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256`
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip`
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip.sha256`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## For Gitea
|
||||||
|
|
||||||
|
### 1. Setup (one time)
|
||||||
|
|
||||||
|
#### Enable Actions in Gitea:
|
||||||
|
|
||||||
|
Edit `app.ini`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[actions]
|
||||||
|
ENABLED = true
|
||||||
|
DEFAULT_ACTIONS_URL = https://gitea.com
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Install Gitea Runner:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Download
|
||||||
|
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner
|
||||||
|
chmod +x act_runner
|
||||||
|
|
||||||
|
# Register
|
||||||
|
./act_runner register --no-interactive \
|
||||||
|
--instance https://your-gitea.com \
|
||||||
|
--token YOUR_RUNNER_TOKEN
|
||||||
|
|
||||||
|
# Run
|
||||||
|
./act_runner daemon
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Creating a Release
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Create tag
|
||||||
|
git tag -a v1.0.0 -m "Release version 1.0.0"
|
||||||
|
|
||||||
|
# Push tag
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. What Happens
|
||||||
|
|
||||||
|
Gitea Actions will run `.gitea/workflows/release.yml`:
|
||||||
|
|
||||||
|
1. ✅ Build Linux version
|
||||||
|
2. ✅ Build Windows version
|
||||||
|
3. ✅ Create packages
|
||||||
|
4. ✅ Generate SHA256 + MD5 checksums
|
||||||
|
5. ✅ Create Gitea Release
|
||||||
|
6. ✅ Detailed release notes
|
||||||
|
|
||||||
|
### 4. Result
|
||||||
|
|
||||||
|
Release will appear at: `https://your-gitea.com/USER/REPO/releases/tag/v1.0.0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Pre-Release Checklist
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Local build
|
||||||
|
make clean-build
|
||||||
|
make release
|
||||||
|
|
||||||
|
# 2. Testing
|
||||||
|
make test-build
|
||||||
|
|
||||||
|
# 3. Check files
|
||||||
|
ls -lh dist/
|
||||||
|
|
||||||
|
# 4. If all OK - create tag
|
||||||
|
git tag -a v1.0.0 -m "Release 1.0.0"
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Monitoring
|
||||||
|
|
||||||
|
### GitHub:
|
||||||
|
`https://github.com/USER/REPO/actions`
|
||||||
|
|
||||||
|
### Gitea:
|
||||||
|
`https://your-gitea.com/USER/REPO/actions`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 If Something Goes Wrong
|
||||||
|
|
||||||
|
### Delete tag and release:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Delete local tag
|
||||||
|
git tag -d v1.0.0
|
||||||
|
|
||||||
|
# Delete remote tag
|
||||||
|
git push --delete origin v1.0.0
|
||||||
|
|
||||||
|
# Delete release manually via web interface
|
||||||
|
```
|
||||||
|
|
||||||
|
### Recreate release:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fix the issue
|
||||||
|
git commit -am "Fix build"
|
||||||
|
|
||||||
|
# Recreate tag
|
||||||
|
git tag -a v1.0.0 -m "Release 1.0.0" --force
|
||||||
|
git push origin v1.0.0 --force
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Semantic Versioning
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Major (breaking changes)
|
||||||
|
git tag v2.0.0
|
||||||
|
|
||||||
|
# Minor (new features)
|
||||||
|
git tag v1.1.0
|
||||||
|
|
||||||
|
# Patch (bug fixes)
|
||||||
|
git tag v1.0.1
|
||||||
|
|
||||||
|
# Pre-release
|
||||||
|
git tag v1.0.0-beta.1
|
||||||
|
git tag v1.0.0-rc.1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**See also:**
|
||||||
|
- [.gitea/README.md](../../.gitea/README.md) - Full Gitea Actions documentation
|
||||||
|
- [BUILD_GUIDE_EN.md](BUILD_GUIDE_EN.md) - Build guide
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Author:** Dmitry Fofanov
|
||||||
|
**Last Updated:** October 28, 2025
|
||||||
455
docs/ru/BUILD_GUIDE.md
Normal file
455
docs/ru/BUILD_GUIDE.md
Normal file
@@ -0,0 +1,455 @@
|
|||||||
|
# 🔨 Руководство по сборке исполняемых файлов
|
||||||
|
|
||||||
|
Данное руководство описывает процесс компиляции Python-скрипта `letsencrypt_regru_api.py` в исполняемые файлы для Linux и Windows с использованием PyInstaller.
|
||||||
|
|
||||||
|
## 📋 Содержание
|
||||||
|
|
||||||
|
- [Преимущества исполняемых файлов](#преимущества-исполняемых-файлов)
|
||||||
|
- [Быстрый старт](#быстрый-старт)
|
||||||
|
- [Подробные инструкции](#подробные-инструкции)
|
||||||
|
- [Кросс-компиляция](#кросс-компиляция)
|
||||||
|
- [Troubleshooting](#troubleshooting)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Преимущества исполняемых файлов
|
||||||
|
|
||||||
|
### Плюсы:
|
||||||
|
- ✅ **Один файл** - легко распространять и развертывать
|
||||||
|
- ✅ **Автономность** - не требует установленного Python на целевой системе
|
||||||
|
- ✅ **Все зависимости включены** - requests, cryptography и certbot модули упакованы
|
||||||
|
- ✅ **Простота запуска** - просто скачать и запустить
|
||||||
|
|
||||||
|
### Минусы:
|
||||||
|
- ❌ **Большой размер** - ~40-60 MB (включая Python runtime и библиотеки)
|
||||||
|
- ❌ **Certbot зависимость** - системный certbot все равно требуется
|
||||||
|
- ❌ **Медленный первый запуск** - распаковка занимает несколько секунд
|
||||||
|
- ❌ **Требуется пересборка** - при изменении кода нужно пересобирать
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Быстрый старт
|
||||||
|
|
||||||
|
### Сборка для текущей ОС:
|
||||||
|
```bash
|
||||||
|
make build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Сборка для всех платформ:
|
||||||
|
```bash
|
||||||
|
make build-all
|
||||||
|
```
|
||||||
|
|
||||||
|
### Полный релиз (сборка + пакеты):
|
||||||
|
```bash
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📖 Подробные инструкции
|
||||||
|
|
||||||
|
### 1. Установка зависимостей
|
||||||
|
|
||||||
|
#### Вариант А: Автоматическая установка
|
||||||
|
```bash
|
||||||
|
make install-pyinstaller
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Вариант Б: Ручная установка
|
||||||
|
```bash
|
||||||
|
pip install pyinstaller
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Сборка для Linux
|
||||||
|
|
||||||
|
**На Linux системе:**
|
||||||
|
```bash
|
||||||
|
make build-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
- Файл: `dist/letsencrypt-regru`
|
||||||
|
- Размер: ~45-55 MB
|
||||||
|
- Формат: ELF 64-bit executable
|
||||||
|
|
||||||
|
**Тестирование:**
|
||||||
|
```bash
|
||||||
|
./dist/letsencrypt-regru --help
|
||||||
|
sudo ./dist/letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Сборка для Windows
|
||||||
|
|
||||||
|
**На Windows системе (PowerShell/CMD):**
|
||||||
|
```bash
|
||||||
|
make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
- Файл: `dist/letsencrypt-regru.exe`
|
||||||
|
- Размер: ~40-50 MB
|
||||||
|
- Формат: PE32+ executable (Windows)
|
||||||
|
|
||||||
|
**Тестирование:**
|
||||||
|
```powershell
|
||||||
|
.\dist\letsencrypt-regru.exe --help
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Создание пакетов для распространения
|
||||||
|
|
||||||
|
#### Linux пакет (tar.gz):
|
||||||
|
```bash
|
||||||
|
make package-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
**Содержимое пакета:**
|
||||||
|
- `letsencrypt-regru` - исполняемый файл
|
||||||
|
- `README.md` - документация
|
||||||
|
- `systemd/` - systemd unit файлы
|
||||||
|
- `config.json.example` - пример конфигурации
|
||||||
|
|
||||||
|
**Результат:** `dist/letsencrypt-regru-linux-x86_64.tar.gz`
|
||||||
|
|
||||||
|
#### Windows пакет (zip):
|
||||||
|
```bash
|
||||||
|
make package-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:** `dist/letsencrypt-regru-windows-x86_64.zip`
|
||||||
|
|
||||||
|
### 5. Полный цикл релиза
|
||||||
|
|
||||||
|
Создание релиза со всеми артефактами:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
**Что происходит:**
|
||||||
|
1. Очистка старых артефактов (`clean-build`)
|
||||||
|
2. Установка/обновление PyInstaller
|
||||||
|
3. Сборка для Linux (`build-linux`)
|
||||||
|
4. Сборка для Windows (`build-windows`)
|
||||||
|
5. Создание пакета для Linux (`package-linux`)
|
||||||
|
6. Создание пакета для Windows (`package-windows`)
|
||||||
|
7. Генерация SHA256 контрольных сумм
|
||||||
|
|
||||||
|
**Результат в `dist/`:**
|
||||||
|
```
|
||||||
|
letsencrypt-regru # Linux executable
|
||||||
|
letsencrypt-regru.exe # Windows executable
|
||||||
|
letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
letsencrypt-regru-windows-x86_64.zip
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Кросс-компиляция
|
||||||
|
|
||||||
|
### ⚠️ Важные замечания
|
||||||
|
|
||||||
|
**Не рекомендуется:**
|
||||||
|
- Собирать Linux версию на Windows
|
||||||
|
- Собирать Windows версию на Linux
|
||||||
|
- Собирать macOS версию на других ОС
|
||||||
|
|
||||||
|
**Причины:**
|
||||||
|
- Несовместимость системных библиотек
|
||||||
|
- Разные форматы исполняемых файлов
|
||||||
|
- Проблемы с путями и разделителями
|
||||||
|
|
||||||
|
### Рекомендации
|
||||||
|
|
||||||
|
#### Для Linux сборки:
|
||||||
|
1. Используйте Ubuntu 20.04+ или Debian 10+
|
||||||
|
2. Установите build-essential
|
||||||
|
3. Используйте виртуальное окружение Python
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y python3 python3-pip build-essential
|
||||||
|
make build-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Для Windows сборки:
|
||||||
|
1. Используйте Windows 10/11
|
||||||
|
2. Установите Python 3.8+
|
||||||
|
3. Используйте PowerShell или CMD
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Для обеих платформ:
|
||||||
|
Используйте CI/CD (GitHub Actions, GitLab CI):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# .github/workflows/build.yml
|
||||||
|
name: Build Releases
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v*'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-linux:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Build Linux
|
||||||
|
run: make build-linux
|
||||||
|
|
||||||
|
build-windows:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Build Windows
|
||||||
|
run: make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Все команды Makefile
|
||||||
|
|
||||||
|
### Основные команды:
|
||||||
|
|
||||||
|
| Команда | Описание |
|
||||||
|
|---------|----------|
|
||||||
|
| `make build` | Собрать для текущей ОС |
|
||||||
|
| `make build-linux` | Собрать для Linux |
|
||||||
|
| `make build-windows` | Собрать для Windows |
|
||||||
|
| `make build-all` | Собрать для всех платформ |
|
||||||
|
| `make package-linux` | Создать tar.gz пакет |
|
||||||
|
| `make package-windows` | Создать zip пакет |
|
||||||
|
| `make release` | Полный цикл релиза |
|
||||||
|
|
||||||
|
### Вспомогательные команды:
|
||||||
|
|
||||||
|
| Команда | Описание |
|
||||||
|
|---------|----------|
|
||||||
|
| `make install-pyinstaller` | Установить PyInstaller |
|
||||||
|
| `make test-build` | Протестировать собранный файл |
|
||||||
|
| `make clean-build` | Очистить артефакты сборки |
|
||||||
|
| `make build-info` | Показать информацию о среде |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
### Проблема: PyInstaller не найден
|
||||||
|
|
||||||
|
**Ошибка:**
|
||||||
|
```
|
||||||
|
make: pyinstaller: Command not found
|
||||||
|
```
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
```bash
|
||||||
|
make install-pyinstaller
|
||||||
|
# или
|
||||||
|
pip install pyinstaller
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Проблема: Импорт модулей не работает
|
||||||
|
|
||||||
|
**Ошибка:**
|
||||||
|
```
|
||||||
|
ModuleNotFoundError: No module named 'requests'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
# или добавьте в PyInstaller команду:
|
||||||
|
--hidden-import requests
|
||||||
|
--hidden-import certbot
|
||||||
|
--hidden-import cryptography
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Проблема: Большой размер файла
|
||||||
|
|
||||||
|
**Размер ~100+ MB вместо 40-60 MB**
|
||||||
|
|
||||||
|
**Причины:**
|
||||||
|
- Включены лишние модули
|
||||||
|
- Не используется `--onefile`
|
||||||
|
- Включены debug символы
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
```bash
|
||||||
|
# Используйте флаги оптимизации:
|
||||||
|
pyinstaller --onefile \
|
||||||
|
--strip \
|
||||||
|
--exclude-module tkinter \
|
||||||
|
--exclude-module matplotlib \
|
||||||
|
letsencrypt_regru_api.py
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Проблема: Certbot не работает в исполняемом файле
|
||||||
|
|
||||||
|
**Ошибка:**
|
||||||
|
```
|
||||||
|
certbot: command not found
|
||||||
|
```
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
|
||||||
|
Certbot вызывается через `subprocess` и должен быть установлен в системе:
|
||||||
|
|
||||||
|
**Linux:**
|
||||||
|
```bash
|
||||||
|
sudo apt-get install certbot
|
||||||
|
```
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
- Не поддерживается напрямую
|
||||||
|
- Используйте WSL или Docker
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Проблема: Права доступа к файлам
|
||||||
|
|
||||||
|
**Ошибка:**
|
||||||
|
```
|
||||||
|
Permission denied: /etc/letsencrypt/
|
||||||
|
```
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
```bash
|
||||||
|
# Linux/macOS
|
||||||
|
sudo ./dist/letsencrypt-regru --check
|
||||||
|
|
||||||
|
# Или установите правильные права:
|
||||||
|
sudo chmod +x ./dist/letsencrypt-regru
|
||||||
|
sudo chown root:root ./dist/letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Проблема: Медленный запуск
|
||||||
|
|
||||||
|
**Первый запуск занимает 5-10 секунд**
|
||||||
|
|
||||||
|
**Причина:**
|
||||||
|
PyInstaller распаковывает файлы во временную директорию при каждом запуске.
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
- Это нормальное поведение для `--onefile`
|
||||||
|
- Используйте `--onedir` для более быстрого запуска (но будет много файлов)
|
||||||
|
- Кэшируйте временную директорию (автоматически)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Проблема: Антивирус блокирует файл
|
||||||
|
|
||||||
|
**Windows Defender помечает .exe как вирус**
|
||||||
|
|
||||||
|
**Причины:**
|
||||||
|
- Самораспаковывающийся архив похож на вредоносное ПО
|
||||||
|
- Отсутствие цифровой подписи
|
||||||
|
- Малоизвестный исполняемый файл
|
||||||
|
|
||||||
|
**Решение:**
|
||||||
|
1. **Добавьте в исключения:**
|
||||||
|
- Windows Defender → Settings → Exclusions
|
||||||
|
|
||||||
|
2. **Подпишите файл цифровой подписью:**
|
||||||
|
```bash
|
||||||
|
# Требуется сертификат Code Signing
|
||||||
|
signtool sign /f cert.pfx /p password dist/letsencrypt-regru.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Проверьте на VirusTotal:**
|
||||||
|
- Загрузите файл на virustotal.com
|
||||||
|
- Добавьте результаты в README
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Сравнение: Python vs Исполняемый файл
|
||||||
|
|
||||||
|
| Характеристика | Python скрипт | Исполняемый файл |
|
||||||
|
|----------------|---------------|------------------|
|
||||||
|
| Размер | ~50 KB | ~40-60 MB |
|
||||||
|
| Зависимости | Требует Python + pip | Автономный |
|
||||||
|
| Скорость запуска | Быстро (~1 сек) | Медленно (~5-10 сек) |
|
||||||
|
| Обновление | Просто заменить .py | Требуется пересборка |
|
||||||
|
| Совместимость | Любая ОС с Python | Только для целевой ОС |
|
||||||
|
| Установка | Требует venv setup | Скачать и запустить |
|
||||||
|
| Certbot | Через subprocess | Через subprocess |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Рекомендации
|
||||||
|
|
||||||
|
### Используйте Python скрипт если:
|
||||||
|
- ✅ Python уже установлен в системе
|
||||||
|
- ✅ Нужны частые обновления кода
|
||||||
|
- ✅ Используете виртуальное окружение
|
||||||
|
- ✅ Работаете на серверах (production)
|
||||||
|
|
||||||
|
### Используйте исполняемый файл если:
|
||||||
|
- ✅ Python не установлен
|
||||||
|
- ✅ Нужна простота развертывания
|
||||||
|
- ✅ Распространяете для конечных пользователей
|
||||||
|
- ✅ Тестирование на чистых системах
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Пример использования собранного файла
|
||||||
|
|
||||||
|
### Linux:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Скачать и распаковать
|
||||||
|
wget https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
tar -xzf letsencrypt-regru-linux-x86_64.tar.gz
|
||||||
|
|
||||||
|
# Установить
|
||||||
|
sudo mv letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
|
||||||
|
# Использовать
|
||||||
|
sudo letsencrypt-regru --help
|
||||||
|
sudo letsencrypt-regru --check -c /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
### Windows:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# Скачать и распаковать
|
||||||
|
Invoke-WebRequest -Uri "https://github.com/user/repo/releases/download/v1.0/letsencrypt-regru-windows-x86_64.zip" -OutFile "letsencrypt-regru.zip"
|
||||||
|
Expand-Archive -Path letsencrypt-regru.zip -DestinationPath "C:\Program Files\LetsEncrypt-RegRu"
|
||||||
|
|
||||||
|
# Использовать
|
||||||
|
cd "C:\Program Files\LetsEncrypt-RegRu"
|
||||||
|
.\letsencrypt-regru.exe --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Дополнительные ресурсы
|
||||||
|
|
||||||
|
- [PyInstaller Documentation](https://pyinstaller.org/en/stable/)
|
||||||
|
- [PyInstaller FAQ](https://pyinstaller.org/en/stable/FAQ.html)
|
||||||
|
- [Building Cross-Platform Applications](https://pyinstaller.org/en/stable/operating-mode.html)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 Лицензия
|
||||||
|
|
||||||
|
Этот проект использует лицензию согласно основному README.md.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Автор:** Фофанов Дмитрий
|
||||||
|
**Дата обновления:** 28.10.2025
|
||||||
154
docs/ru/MAKEFILE_COMMANDS.md
Normal file
154
docs/ru/MAKEFILE_COMMANDS.md
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
# Makefile Commands - Quick Reference
|
||||||
|
|
||||||
|
## 📋 Категории команд
|
||||||
|
|
||||||
|
### 🛠️ Установка и развертывание
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make install # Полная установка приложения
|
||||||
|
make uninstall # Удаление приложения
|
||||||
|
make status # Проверка статуса установки
|
||||||
|
make check-config # Проверка конфигурации
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔨 Сборка исполняемых файлов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make build # Собрать для текущей ОС
|
||||||
|
make build-linux # Собрать для Linux
|
||||||
|
make build-windows # Собрать для Windows
|
||||||
|
make build-all # Собрать для всех платформ
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📦 Создание пакетов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make package-linux # Создать tar.gz для Linux
|
||||||
|
make package-windows # Создать zip для Windows
|
||||||
|
make release # Полный цикл релиза
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🧪 Тестирование
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make test-run # Тестовый запуск скрипта
|
||||||
|
make test-cert # Создать тестовый сертификат
|
||||||
|
make test-build # Протестировать собранный файл
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🚀 Запуск операций
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make run # Автоматическая проверка и обновление
|
||||||
|
make obtain # Получить новый сертификат
|
||||||
|
make renew # Обновить существующий сертификат
|
||||||
|
```
|
||||||
|
|
||||||
|
### 📊 Мониторинг
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make logs # Показать логи
|
||||||
|
make status # Статус служб
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🧹 Очистка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make clean # Очистить временные файлы Python
|
||||||
|
make clean-build # Очистить артефакты сборки
|
||||||
|
```
|
||||||
|
|
||||||
|
### ℹ️ Информация
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make help # Показать справку
|
||||||
|
make build-info # Информация о среде сборки
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Типовые сценарии
|
||||||
|
|
||||||
|
### Первоначальная установка
|
||||||
|
```bash
|
||||||
|
sudo make install
|
||||||
|
sudo make check-config
|
||||||
|
sudo make test-run
|
||||||
|
```
|
||||||
|
|
||||||
|
### Сборка релиза для GitHub
|
||||||
|
```bash
|
||||||
|
make clean-build
|
||||||
|
make release
|
||||||
|
# Файлы будут в dist/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создание тестового окружения
|
||||||
|
```bash
|
||||||
|
sudo make install
|
||||||
|
sudo make test-cert
|
||||||
|
sudo make status
|
||||||
|
```
|
||||||
|
|
||||||
|
### Обновление сертификата вручную
|
||||||
|
```bash
|
||||||
|
sudo make run
|
||||||
|
sudo make logs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Удаление приложения
|
||||||
|
```bash
|
||||||
|
sudo make uninstall
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Переменные окружения
|
||||||
|
|
||||||
|
Основные переменные определены в Makefile:
|
||||||
|
|
||||||
|
```makefile
|
||||||
|
INSTALL_DIR = /opt/letsencrypt-regru
|
||||||
|
CONFIG_FILE = /etc/letsencrypt/regru_config.json
|
||||||
|
LOG_FILE = /var/log/letsencrypt_regru.log
|
||||||
|
SERVICE_NAME = letsencrypt-regru
|
||||||
|
PYTHON = python3
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔐 Требуемые права
|
||||||
|
|
||||||
|
**Требуют sudo:**
|
||||||
|
- `make install`
|
||||||
|
- `make uninstall`
|
||||||
|
- `make run`
|
||||||
|
- `make obtain`
|
||||||
|
- `make renew`
|
||||||
|
- `make test-run`
|
||||||
|
- `make test-cert`
|
||||||
|
|
||||||
|
**Не требуют sudo:**
|
||||||
|
- `make build*`
|
||||||
|
- `make package*`
|
||||||
|
- `make clean*`
|
||||||
|
- `make help`
|
||||||
|
- `make build-info`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Полезные комбинации
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Полная переустановка
|
||||||
|
sudo make uninstall && sudo make install
|
||||||
|
|
||||||
|
# Сборка и тестирование
|
||||||
|
make build && make test-build
|
||||||
|
|
||||||
|
# Очистка и релиз
|
||||||
|
make clean-build && make release
|
||||||
|
|
||||||
|
# Проверка после установки
|
||||||
|
sudo make status && sudo make test-run && sudo make logs
|
||||||
|
```
|
||||||
111
docs/ru/QUICKSTART_BUILD.md
Normal file
111
docs/ru/QUICKSTART_BUILD.md
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
# 🎯 Быстрый старт - Сборка исполняемых файлов
|
||||||
|
|
||||||
|
Это краткое руководство для тех, кто хочет быстро собрать исполняемый файл.
|
||||||
|
|
||||||
|
## Для Linux
|
||||||
|
|
||||||
|
### 1. Установите зависимости
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y python3 python3-pip git make
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Клонируйте репозиторий
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/DFofanov/configure_nginx_manager.git
|
||||||
|
cd configure_nginx_manager
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Соберите
|
||||||
|
```bash
|
||||||
|
make build-linux
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Результат
|
||||||
|
```bash
|
||||||
|
ls -lh dist/letsencrypt-regru
|
||||||
|
# Исполняемый файл готов!
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Установите (опционально)
|
||||||
|
```bash
|
||||||
|
sudo cp dist/letsencrypt-regru /usr/local/bin/
|
||||||
|
sudo chmod +x /usr/local/bin/letsencrypt-regru
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Используйте
|
||||||
|
```bash
|
||||||
|
letsencrypt-regru --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Для Windows
|
||||||
|
|
||||||
|
### 1. Установите Python
|
||||||
|
Скачайте с [python.org](https://www.python.org/downloads/) и установите
|
||||||
|
|
||||||
|
### 2. Клонируйте репозиторий
|
||||||
|
```powershell
|
||||||
|
git clone https://github.com/DFofanov/configure_nginx_manager.git
|
||||||
|
cd configure_nginx_manager
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Соберите
|
||||||
|
```powershell
|
||||||
|
make build-windows
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Результат
|
||||||
|
```powershell
|
||||||
|
dir dist\letsencrypt-regru.exe
|
||||||
|
# Исполняемый файл готов!
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Используйте
|
||||||
|
```powershell
|
||||||
|
.\dist\letsencrypt-regru.exe --help
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Создание релиза для обеих платформ
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Это создаст пакеты для Linux и Windows
|
||||||
|
make release
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат в `dist/`:**
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz`
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Полезные команды
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Показать справку по всем командам
|
||||||
|
make help
|
||||||
|
|
||||||
|
# Информация о среде сборки
|
||||||
|
make build-info
|
||||||
|
|
||||||
|
# Протестировать собранный файл
|
||||||
|
make test-build
|
||||||
|
|
||||||
|
# Очистить артефакты
|
||||||
|
make clean-build
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ❓ Проблемы?
|
||||||
|
|
||||||
|
См. [BUILD_GUIDE.md](BUILD_GUIDE.md) для подробных инструкций и решения проблем.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Размер файла:** ~40-60 MB (включая Python runtime)
|
||||||
|
**Время сборки:** ~2-5 минут
|
||||||
|
**Требования:** Python 3.8+, PyInstaller
|
||||||
173
docs/ru/RELEASE_GUIDE.md
Normal file
173
docs/ru/RELEASE_GUIDE.md
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
# 🎯 Краткое руководство: Автоматические релизы
|
||||||
|
|
||||||
|
## Для GitHub
|
||||||
|
|
||||||
|
### 1. Создание релиза
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создать тег
|
||||||
|
git tag -a v1.0.0 -m "Release version 1.0.0"
|
||||||
|
|
||||||
|
# Отправить тег
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Что произойдет автоматически
|
||||||
|
|
||||||
|
GitHub Actions запустит `.github/workflows/build-release.yml`:
|
||||||
|
|
||||||
|
1. ✅ Сборка Linux версии (Ubuntu runner)
|
||||||
|
2. ✅ Сборка Windows версии (Windows runner)
|
||||||
|
3. ✅ Создание пакетов
|
||||||
|
4. ✅ Генерация SHA256 checksums
|
||||||
|
5. ✅ Создание GitHub Release
|
||||||
|
6. ✅ Загрузка артефактов
|
||||||
|
|
||||||
|
### 3. Результат
|
||||||
|
|
||||||
|
Релиз появится на: `https://github.com/USER/REPO/releases/tag/v1.0.0`
|
||||||
|
|
||||||
|
**Файлы:**
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz`
|
||||||
|
- `letsencrypt-regru-linux-x86_64.tar.gz.sha256`
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip`
|
||||||
|
- `letsencrypt-regru-windows-x86_64.zip.sha256`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Для Gitea
|
||||||
|
|
||||||
|
### 1. Настройка (один раз)
|
||||||
|
|
||||||
|
#### Включить Actions в Gitea:
|
||||||
|
|
||||||
|
Отредактируйте `app.ini`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[actions]
|
||||||
|
ENABLED = true
|
||||||
|
DEFAULT_ACTIONS_URL = https://gitea.com
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Установить Gitea Runner:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Скачать
|
||||||
|
wget https://dl.gitea.com/act_runner/latest/act_runner-linux-amd64 -O act_runner
|
||||||
|
chmod +x act_runner
|
||||||
|
|
||||||
|
# Зарегистрировать
|
||||||
|
./act_runner register --no-interactive \
|
||||||
|
--instance https://your-gitea.com \
|
||||||
|
--token YOUR_RUNNER_TOKEN
|
||||||
|
|
||||||
|
# Запустить
|
||||||
|
./act_runner daemon
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Создание релиза
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Создать тег
|
||||||
|
git tag -a v1.0.0 -m "Release version 1.0.0"
|
||||||
|
|
||||||
|
# Отправить тег
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Что произойдет
|
||||||
|
|
||||||
|
Gitea Actions запустит `.gitea/workflows/release.yml`:
|
||||||
|
|
||||||
|
1. ✅ Сборка Linux версии
|
||||||
|
2. ✅ Сборка Windows версии
|
||||||
|
3. ✅ Создание пакетов
|
||||||
|
4. ✅ Генерация SHA256 + MD5 checksums
|
||||||
|
5. ✅ Создание Gitea Release
|
||||||
|
6. ✅ Детальные release notes
|
||||||
|
|
||||||
|
### 4. Результат
|
||||||
|
|
||||||
|
Релиз появится на: `https://your-gitea.com/USER/REPO/releases/tag/v1.0.0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Проверка перед релизом
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Локальная сборка
|
||||||
|
make clean-build
|
||||||
|
make release
|
||||||
|
|
||||||
|
# 2. Тестирование
|
||||||
|
make test-build
|
||||||
|
|
||||||
|
# 3. Проверка файлов
|
||||||
|
ls -lh dist/
|
||||||
|
|
||||||
|
# 4. Если все OK - создать тег
|
||||||
|
git tag -a v1.0.0 -m "Release 1.0.0"
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 Мониторинг
|
||||||
|
|
||||||
|
### GitHub:
|
||||||
|
`https://github.com/USER/REPO/actions`
|
||||||
|
|
||||||
|
### Gitea:
|
||||||
|
`https://your-gitea.com/USER/REPO/actions`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 Если что-то пошло не так
|
||||||
|
|
||||||
|
### Удалить тег и релиз:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Удалить локальный тег
|
||||||
|
git tag -d v1.0.0
|
||||||
|
|
||||||
|
# Удалить удаленный тег
|
||||||
|
git push --delete origin v1.0.0
|
||||||
|
|
||||||
|
# Удалить релиз вручную через веб-интерфейс
|
||||||
|
```
|
||||||
|
|
||||||
|
### Пересоздать релиз:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Исправить проблему
|
||||||
|
git commit -am "Fix build"
|
||||||
|
|
||||||
|
# Пересоздать тег
|
||||||
|
git tag -a v1.0.0 -m "Release 1.0.0" --force
|
||||||
|
git push origin v1.0.0 --force
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Semantic Versioning
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Major (несовместимые изменения)
|
||||||
|
git tag v2.0.0
|
||||||
|
|
||||||
|
# Minor (новые функции)
|
||||||
|
git tag v1.1.0
|
||||||
|
|
||||||
|
# Patch (исправления)
|
||||||
|
git tag v1.0.1
|
||||||
|
|
||||||
|
# Pre-release
|
||||||
|
git tag v1.0.0-beta.1
|
||||||
|
git tag v1.0.0-rc.1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**См. также:**
|
||||||
|
- [.gitea/README.md](.gitea/README.md) - Полная документация по Gitea Actions
|
||||||
|
- [BUILD_GUIDE.md](BUILD_GUIDE.md) - Руководство по сборке
|
||||||
13
requirements.txt
Normal file
13
requirements.txt
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Зависимости для Let's Encrypt RegRu Manager
|
||||||
|
|
||||||
|
# HTTP запросы к API
|
||||||
|
requests>=2.25.0
|
||||||
|
|
||||||
|
# Работа с SSL сертификатами
|
||||||
|
cryptography>=3.4.0
|
||||||
|
|
||||||
|
# Let's Encrypt клиент
|
||||||
|
certbot>=1.12.0
|
||||||
|
|
||||||
|
# Опционально: для сборки исполняемых файлов
|
||||||
|
pyinstaller>=4.10
|
||||||
Reference in New Issue
Block a user