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