Добавлены новые документы и инструкции по настройке, использованию и тестированию SSL сертификатов Let's Encrypt с использованием API reg.ru. Обновлены зависимости в requirements.txt для поддержки новых функций. Включены подробные шаги по автоматизации, созданию и продлению сертификатов, а также интеграции с Nginx Proxy Manager.
This commit is contained in:
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
|
||||
187
docs/en/CHANGELOG_EN.md
Normal file
187
docs/en/CHANGELOG_EN.md
Normal file
@@ -0,0 +1,187 @@
|
||||
# 📋 Changelog
|
||||
|
||||
## [2.1.0] - 2025-10-27
|
||||
|
||||
### 🆕 Added
|
||||
|
||||
#### Test SSL Certificate Generation
|
||||
- ✨ **New `TestCertificateGenerator` class** - self-signed certificate generation
|
||||
- ✨ **`--test-cert` command** in Python script for test certificate creation
|
||||
- ✨ **`test_certificate.sh` script** - standalone creation via OpenSSL
|
||||
- ✨ **`make test-cert` command** in Makefile for quick testing
|
||||
|
||||
#### Documentation
|
||||
- 📘 **TESTING_GUIDE.md** (370+ lines) - complete testing guide
|
||||
- Bypass Let's Encrypt limits (5 certificates per week)
|
||||
- Certificate creation method comparison
|
||||
- CI/CD and Docker examples
|
||||
- Transition from test to production
|
||||
- FAQ and solutions
|
||||
|
||||
- 📘 **TESTING_GUIDE_EN.md** - English version of testing guide
|
||||
|
||||
- 📘 **PROJECT_STRUCTURE.md** - project structure
|
||||
- All files description
|
||||
- Features list
|
||||
- Technologies
|
||||
|
||||
- 📘 **PROJECT_STRUCTURE_EN.md** - English version
|
||||
|
||||
- 📘 **CHEATSHEET.md** - quick reference
|
||||
- Main commands
|
||||
- Use case scenarios
|
||||
- Common errors and solutions
|
||||
- Development workflow
|
||||
|
||||
- 📘 **CHEATSHEET_EN.md** - English version
|
||||
|
||||
- 📘 **DESCRIPTION.md** - project description in Russian and English
|
||||
|
||||
- 📘 **CHANGELOG_EN.md** - English changelog
|
||||
|
||||
- 📘 **GITEA_SYNC.md** - Gitea → GitHub synchronization
|
||||
- 4 sync methods
|
||||
- Step-by-step setup
|
||||
- Troubleshooting
|
||||
|
||||
- 📘 **GITEA_SYNC_EN.md** - English version
|
||||
|
||||
- 📘 **README_EN.md** - Complete English main guide
|
||||
|
||||
#### Functionality
|
||||
- ✨ Support for **unlimited** test certificates
|
||||
- ✨ **Instant creation** (1-2 seconds) without DNS validation
|
||||
- ✨ **Automatic upload** of test certificates to NPM
|
||||
- ✨ **Full compatibility** of structure with Let's Encrypt
|
||||
- ✨ **Wildcard support** for test certificates
|
||||
|
||||
#### Repository Synchronization
|
||||
- ✨ **Automatic Gitea → GitHub sync** via Git Hooks
|
||||
- ✨ **GitHub Actions workflow** for hourly sync check
|
||||
- ✨ **Webhook integration** between Gitea and GitHub
|
||||
- ✨ **Multiple sync methods** (Hooks, Actions, Mirror, Double Remote)
|
||||
|
||||
### 🔧 Improved
|
||||
|
||||
#### Python Script
|
||||
- Added `cryptography` library import with installation check
|
||||
- New command-line parameters:
|
||||
- `--test-cert` - create test certificate
|
||||
- `--auto` - explicit automatic mode
|
||||
- Improved test certificate handling in NPM
|
||||
- Detailed logging of generation process
|
||||
|
||||
#### Makefile
|
||||
- Added `make test-cert` command with beautiful output
|
||||
- Information messages about test certificate benefits
|
||||
- Security warnings
|
||||
|
||||
#### README.md
|
||||
- "Test Self-Signed Certificate Creation" section
|
||||
- Updated table of contents with test certificates link
|
||||
- Test certificate usage examples
|
||||
- NPM integration for test certificates
|
||||
- Links to additional documentation
|
||||
- Gitea → GitHub sync section
|
||||
|
||||
### 🎯 Benefits
|
||||
|
||||
#### For Developers
|
||||
- ✅ **No limits** - unlimited certificates
|
||||
- ✅ **Fast** - creation in 1-2 seconds
|
||||
- ✅ **Offline** - works without internet
|
||||
- ✅ **Identical structure** - same files as Let's Encrypt
|
||||
|
||||
#### For Testing
|
||||
- ✅ **CI/CD friendly** - quick creation in pipeline
|
||||
- ✅ **Docker ready** - easily embeds in containers
|
||||
- ✅ **Staging environments** - perfect for test servers
|
||||
- ✅ **Local development** - HTTPS on localhost
|
||||
|
||||
#### For DevOps
|
||||
- ✅ **Repository sync** - automatic Gitea → GitHub
|
||||
- ✅ **Multiple methods** - choose what fits
|
||||
- ✅ **Instant sync** - Git Hooks < 1 second
|
||||
- ✅ **Reliable backup** - GitHub Actions hourly check
|
||||
|
||||
### 📊 Statistics
|
||||
|
||||
- **Lines of code**: 1,411 (Python script)
|
||||
- **Makefile lines**: 415
|
||||
- **Documentation lines**: 3,500+
|
||||
- **Makefile commands**: 13
|
||||
- **Operating modes**: 4 (obtain, renew, auto, test-cert)
|
||||
- **Sync methods**: 4 (Hooks, Actions, Mirror, Remote)
|
||||
- **Languages**: 2 (Russian, English)
|
||||
|
||||
---
|
||||
|
||||
## [2.0.0] - 2025-10-27
|
||||
|
||||
### 🆕 Added
|
||||
- ✨ Nginx Proxy Manager (NPM) integration
|
||||
- ✨ `NginxProxyManagerAPI` class for certificate management via API
|
||||
- ✨ Automatic certificate upload to NPM
|
||||
- ✨ Automatic certificate update in NPM
|
||||
- ✨ Automatic expiration check
|
||||
- ✨ Configurable renewal threshold (`renewal_days`)
|
||||
- ✨ Makefile for installation/removal automation
|
||||
- ✨ Systemd service + timer
|
||||
- ✨ Cron automation
|
||||
|
||||
### 🔧 Improved
|
||||
- Documentation consolidation into single README.md
|
||||
- Detailed logging with operation statuses
|
||||
- Configuration validation
|
||||
- Improved error handling
|
||||
|
||||
### 📘 Documentation
|
||||
- Complete NPM integration guide
|
||||
- Quick start in 3 commands
|
||||
- Automation examples
|
||||
|
||||
---
|
||||
|
||||
## [1.0.0] - 2025-10-26
|
||||
|
||||
### 🆕 First Release
|
||||
- Python script for Let's Encrypt via reg.ru API
|
||||
- Bash script with certbot-dns-regru
|
||||
- PowerShell version for Windows
|
||||
- DNS-01 validation
|
||||
- Wildcard certificates
|
||||
- Basic documentation
|
||||
|
||||
---
|
||||
|
||||
## Roadmap
|
||||
|
||||
### [2.2.0] - Planned
|
||||
- [ ] Web interface for management
|
||||
- [ ] Multiple domain support
|
||||
- [ ] Notifications (email, telegram)
|
||||
- [ ] Grafana dashboard for monitoring
|
||||
- [ ] Certificate backups
|
||||
|
||||
### [3.0.0] - Future
|
||||
- [ ] Other DNS provider support
|
||||
- [ ] Cloudflare API
|
||||
- [ ] Route53 (AWS)
|
||||
- [ ] Google Cloud DNS
|
||||
|
||||
---
|
||||
|
||||
## Change Types
|
||||
- `🆕 Added` - new functionality
|
||||
- `🔧 Improved` - improvements to existing functionality
|
||||
- `🐛 Fixed` - bug fixes
|
||||
- `🗑️ Removed` - removed functionality
|
||||
- `🔒 Security` - security changes
|
||||
- `📘 Documentation` - documentation changes
|
||||
|
||||
---
|
||||
|
||||
**Versioning**: Semantic Versioning (MAJOR.MINOR.PATCH)
|
||||
- **MAJOR**: Incompatible API changes
|
||||
- **MINOR**: New functionality with backward compatibility
|
||||
- **PATCH**: Bug fixes
|
||||
263
docs/en/CHEATSHEET_EN.md
Normal file
263
docs/en/CHEATSHEET_EN.md
Normal file
@@ -0,0 +1,263 @@
|
||||
# ⚡ SSL Certificate Cheatsheet
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Installation in 3 Commands
|
||||
```bash
|
||||
sudo make install
|
||||
sudo nano /etc/letsencrypt/regru_config.json # Fill in data
|
||||
sudo make test-cert # Test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Testing (NO Let's Encrypt Limits)
|
||||
|
||||
```bash
|
||||
# Create test certificate (unlimited)
|
||||
sudo make test-cert
|
||||
|
||||
# Check status
|
||||
sudo make status
|
||||
|
||||
# View logs
|
||||
sudo make logs
|
||||
```
|
||||
|
||||
**When to use:**
|
||||
- ⚠️ Let's Encrypt: max 5 certificates/week
|
||||
- ✅ Test: UNLIMITED
|
||||
- ⚡ Creation: 1-2 seconds vs 2-5 minutes
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Production (Let's Encrypt)
|
||||
|
||||
```bash
|
||||
# Get real certificate
|
||||
sudo make obtain
|
||||
|
||||
# Automatic mode (check + renewal)
|
||||
sudo make run
|
||||
|
||||
# Force renewal
|
||||
sudo make renew
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Main Commands
|
||||
|
||||
| Command | Description | Limits |
|
||||
|---------|-------------|--------|
|
||||
| `make test-cert` | Test certificate | ✅ None |
|
||||
| `make obtain` | New Let's Encrypt | ⚠️ 5/week |
|
||||
| `make renew` | Renew existing | ⚠️ 5/week |
|
||||
| `make run` | Auto mode | ⚠️ 5/week |
|
||||
| `make status` | System status | - |
|
||||
| `make logs` | Show logs | - |
|
||||
| `make check-config` | Check configuration | - |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Configuration
|
||||
|
||||
### Minimal (testing)
|
||||
```json
|
||||
{
|
||||
"domain": "test.example.com",
|
||||
"wildcard": true,
|
||||
"cert_dir": "/etc/letsencrypt/live"
|
||||
}
|
||||
```
|
||||
|
||||
### Full (production + NPM)
|
||||
```json
|
||||
{
|
||||
"regru_username": "myuser",
|
||||
"regru_password": "mypassword",
|
||||
"domain": "example.com",
|
||||
"wildcard": true,
|
||||
"email": "admin@example.com",
|
||||
"renewal_days": 30,
|
||||
"npm_enabled": true,
|
||||
"npm_host": "https://npm.example.com",
|
||||
"npm_email": "admin@example.com",
|
||||
"npm_password": "npm_password"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Workflow
|
||||
|
||||
### Development → Production
|
||||
|
||||
```bash
|
||||
# 1. Development (test certificates)
|
||||
sudo make test-cert # Create test
|
||||
# Test application...
|
||||
|
||||
# 2. Production (Let's Encrypt)
|
||||
sudo rm -rf /etc/letsencrypt/live/example.com/ # Remove test
|
||||
sudo make obtain # Create production
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Important Paths
|
||||
|
||||
```bash
|
||||
# Configuration
|
||||
/etc/letsencrypt/regru_config.json
|
||||
|
||||
# Certificates
|
||||
/etc/letsencrypt/live/example.com/
|
||||
├── privkey.pem # Private key
|
||||
├── cert.pem # Certificate
|
||||
├── fullchain.pem # Full chain (for nginx)
|
||||
└── chain.pem # CA chain
|
||||
|
||||
# Scripts
|
||||
/opt/letsencrypt-regru/letsencrypt_regru_api.py
|
||||
|
||||
# Logs
|
||||
/var/log/letsencrypt_regru.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Verification
|
||||
|
||||
```bash
|
||||
# Check configuration
|
||||
sudo make check-config
|
||||
|
||||
# Check certificate
|
||||
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout
|
||||
|
||||
# Check expiration date
|
||||
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -dates
|
||||
|
||||
# Check systemd
|
||||
sudo systemctl status letsencrypt-regru.timer
|
||||
sudo systemctl list-timers letsencrypt-regru.timer
|
||||
|
||||
# Check cron
|
||||
sudo crontab -l | grep letsencrypt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Debugging
|
||||
|
||||
```bash
|
||||
# Detailed logs
|
||||
sudo make logs
|
||||
|
||||
# Test run with details
|
||||
sudo python3 /opt/letsencrypt-regru/letsencrypt_regru_api.py \
|
||||
-c /etc/letsencrypt/regru_config.json --check -v
|
||||
|
||||
# Certbot logs
|
||||
sudo tail -f /var/log/letsencrypt/letsencrypt.log
|
||||
|
||||
# Systemd logs
|
||||
sudo journalctl -u letsencrypt-regru.service -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Common Errors
|
||||
|
||||
### Let's Encrypt: Rate limit exceeded
|
||||
```bash
|
||||
# SOLUTION: Use test certificates
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
### NPM: Certificate not found
|
||||
```bash
|
||||
# SOLUTION: Check NPM settings
|
||||
sudo make check-config
|
||||
|
||||
# Check connection
|
||||
curl -k https://npm.example.com
|
||||
```
|
||||
|
||||
### Permission denied
|
||||
```bash
|
||||
# SOLUTION: Run with sudo
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Use Case Scenarios
|
||||
|
||||
### Local Development
|
||||
```bash
|
||||
sudo make test-cert
|
||||
# Open https://localhost (ignore warning)
|
||||
```
|
||||
|
||||
### CI/CD Testing
|
||||
```bash
|
||||
# In pipeline
|
||||
sudo make test-cert
|
||||
# Run tests...
|
||||
sudo make status
|
||||
```
|
||||
|
||||
### Staging Environment
|
||||
```bash
|
||||
sudo make test-cert # Or
|
||||
sudo make obtain # If domain available
|
||||
```
|
||||
|
||||
### Production Environment
|
||||
```bash
|
||||
sudo make install
|
||||
sudo make obtain
|
||||
# Automatic renewal via cron/systemd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
- **README.md** - Complete guide (1420+ lines)
|
||||
- **TESTING_GUIDE.md** - Testing guide (370+ lines)
|
||||
- **PROJECT_STRUCTURE.md** - Project structure
|
||||
- **CHEATSHEET.md** - This cheatsheet
|
||||
|
||||
---
|
||||
|
||||
## 🆘 Quick Help
|
||||
|
||||
```bash
|
||||
# Show all commands
|
||||
make help
|
||||
|
||||
# Check installation
|
||||
sudo make status
|
||||
|
||||
# Complete reinstall
|
||||
sudo make uninstall
|
||||
sudo make install
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Tips
|
||||
|
||||
1. **Always start with test certificates** - avoid limits
|
||||
2. **Check configuration** - `make check-config`
|
||||
3. **Monitor logs** - `make logs`
|
||||
4. **Automate** - systemd/cron already configured
|
||||
5. **Keep backups** of configuration
|
||||
|
||||
---
|
||||
|
||||
**Version**: 2.1
|
||||
**Updated**: 27.10.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
|
||||
438
docs/en/GITEA_SYNC_EN.md
Normal file
438
docs/en/GITEA_SYNC_EN.md
Normal file
@@ -0,0 +1,438 @@
|
||||
# 🔄 Gitea → GitHub Synchronization
|
||||
|
||||
Automatic repository synchronization from Gitea to GitHub after each push.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Available Methods
|
||||
|
||||
| Method | Complexity | Speed | Reliability | Recommendation |
|
||||
|--------|------------|-------|-------------|----------------|
|
||||
| **1. Git Hooks** | ⭐⭐ | ⚡ Instant | ✅ High | Recommended |
|
||||
| **2. GitHub Actions** | ⭐⭐⭐ | ⏱️ 1-5 min | ✅ High | Complex scenarios |
|
||||
| **3. Gitea Mirror** | ⭐ | ⏱️ Scheduled | ⭐⭐ Medium | Simplest |
|
||||
| **4. Double Remote** | ⭐ | ⚡ Instant | ⭐⭐ Medium | Local work |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Method 1: Git Hooks (Recommended)
|
||||
|
||||
### Installation
|
||||
|
||||
**1. On Gitea server, find repository path:**
|
||||
```bash
|
||||
# Usually:
|
||||
/var/lib/gitea/data/gitea-repositories/username/configure_nginx_manager.git
|
||||
# Or
|
||||
/home/git/gitea-repositories/username/configure_nginx_manager.git
|
||||
```
|
||||
|
||||
**2. Create post-receive hook:**
|
||||
```bash
|
||||
cd /path/to/gitea/repos/username/configure_nginx_manager.git/hooks/
|
||||
nano post-receive
|
||||
```
|
||||
|
||||
**3. Insert content** from `gitea-hooks/post-receive` file (in this repository)
|
||||
|
||||
**4. Configure parameters:**
|
||||
```bash
|
||||
# In post-receive file, change:
|
||||
GITHUB_REPO="git@github.com:YOUR_USERNAME/configure_nginx_manager.git"
|
||||
# Or for HTTPS with token:
|
||||
GITHUB_REPO="https://YOUR_TOKEN@github.com/YOUR_USERNAME/configure_nginx_manager.git"
|
||||
```
|
||||
|
||||
**5. Make script executable:**
|
||||
```bash
|
||||
chmod +x post-receive
|
||||
```
|
||||
|
||||
**6. Create log directory:**
|
||||
```bash
|
||||
mkdir -p /var/log/gitea
|
||||
chown git:git /var/log/gitea
|
||||
```
|
||||
|
||||
### SSH Key Setup (for git@github.com)
|
||||
|
||||
**On Gitea server:**
|
||||
|
||||
**Step 1: Identify Gitea user**
|
||||
```bash
|
||||
# Check which user runs Gitea
|
||||
ps aux | grep gitea | grep -v grep
|
||||
|
||||
# Usually one of:
|
||||
# - git (standard installation)
|
||||
# - gitea (Docker/LXC installation)
|
||||
```
|
||||
|
||||
**Step 2: Switch to that user**
|
||||
```bash
|
||||
# Try git:
|
||||
sudo su - git
|
||||
|
||||
# If that doesn't work, try gitea:
|
||||
sudo su - gitea
|
||||
|
||||
# Verify current user
|
||||
whoami # Should be: git or gitea
|
||||
```
|
||||
|
||||
**Step 3: Create SSH key**
|
||||
```bash
|
||||
# Create SSH key (if not exists)
|
||||
ssh-keygen -t ed25519 -C "gitea-to-github-sync" -f ~/.ssh/id_ed25519 -N ""
|
||||
|
||||
# Copy public key
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
```
|
||||
|
||||
**On GitHub:**
|
||||
1. Settings → SSH and GPG keys
|
||||
2. New SSH key
|
||||
3. Paste public key
|
||||
4. Save
|
||||
|
||||
**⚠️ IMPORTANT: Add GitHub to known_hosts:**
|
||||
```bash
|
||||
# From the same user (git or gitea)
|
||||
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
|
||||
|
||||
# Verify key was added
|
||||
cat ~/.ssh/known_hosts | grep github.com
|
||||
```
|
||||
|
||||
**Verify connection:**
|
||||
```bash
|
||||
ssh -T git@github.com
|
||||
# Should output: Hi username! You've successfully authenticated...
|
||||
```
|
||||
|
||||
### Token Setup (for HTTPS)
|
||||
|
||||
**On GitHub:**
|
||||
1. Settings → Developer settings → Personal access tokens → Tokens (classic)
|
||||
2. Generate new token
|
||||
3. Select scope: `repo` (full repository access)
|
||||
4. Copy token
|
||||
|
||||
**In hook file:**
|
||||
```bash
|
||||
GITHUB_REPO="https://ghp_YOUR_TOKEN_HERE@github.com/username/configure_nginx_manager.git"
|
||||
```
|
||||
|
||||
### Testing
|
||||
|
||||
```bash
|
||||
# Make test commit in Gitea
|
||||
cd /tmp
|
||||
git clone http://gitea.example.com/username/configure_nginx_manager.git
|
||||
cd configure_nginx_manager
|
||||
echo "test" >> README.md
|
||||
git add README.md
|
||||
git commit -m "Test sync to GitHub"
|
||||
git push
|
||||
|
||||
# Check log
|
||||
tail -f /var/log/gitea/github-sync.log
|
||||
|
||||
# Check GitHub - changes should appear
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Method 2: GitHub Actions
|
||||
|
||||
### Installation
|
||||
|
||||
**1. Create workflow in GitHub repository:**
|
||||
|
||||
File already created: `.github/workflows/sync-from-gitea.yml`
|
||||
|
||||
**2. Configure secrets in GitHub:**
|
||||
|
||||
GitHub Repository → Settings → Secrets and variables → Actions → New repository secret
|
||||
|
||||
Add:
|
||||
- **Name**: `GITEA_URL`
|
||||
- **Value**: `https://gitea.example.com/username/configure_nginx_manager.git`
|
||||
|
||||
- **Name**: `GITEA_TOKEN`
|
||||
- **Value**: Gitea access token
|
||||
|
||||
### Getting Gitea Token
|
||||
|
||||
**In Gitea:**
|
||||
1. Settings → Applications → Generate New Token
|
||||
2. Token Name: "GitHub Sync"
|
||||
3. Select permissions: `read:repository`
|
||||
4. Generate Token
|
||||
5. Copy token
|
||||
|
||||
### Running Sync
|
||||
|
||||
**Automatically (scheduled):**
|
||||
- Checks for changes every hour
|
||||
|
||||
**Manually:**
|
||||
1. GitHub → Actions
|
||||
2. Select workflow "Sync from Gitea"
|
||||
3. Run workflow
|
||||
|
||||
**Via Gitea webhook:**
|
||||
|
||||
In Gitea repository:
|
||||
1. Settings → Webhooks → Add Webhook → Gitea
|
||||
2. Target URL: `https://api.github.com/repos/USERNAME/configure_nginx_manager/dispatches`
|
||||
3. HTTP Method: `POST`
|
||||
4. POST Content Type: `application/json`
|
||||
5. Trigger On: `Push events`
|
||||
6. Body:
|
||||
```json
|
||||
{
|
||||
"event_type": "gitea-push"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🪞 Method 3: Gitea Mirror (Built-in)
|
||||
|
||||
### Setup
|
||||
|
||||
**In Gitea repository:**
|
||||
1. Settings → Repository
|
||||
2. Scroll to "Mirror Settings"
|
||||
3. Click "Add Push Mirror"
|
||||
4. Fill in:
|
||||
- **Git Remote Repository URL**: `https://github.com/username/configure_nginx_manager.git`
|
||||
- **Username**: your GitHub username
|
||||
- **Password**: GitHub Personal Access Token
|
||||
- **Sync Interval**: `8h` (every 8 hours) or `0` (manual only)
|
||||
5. Save
|
||||
|
||||
### Manual Sync
|
||||
|
||||
Settings → Repository → Mirror Settings → Sync Now
|
||||
|
||||
### Advantages
|
||||
- ✅ Built-in feature
|
||||
- ✅ No scripts required
|
||||
- ✅ Web interface management
|
||||
|
||||
### Disadvantages
|
||||
- ⚠️ Works on schedule (not instant)
|
||||
- ⚠️ Not available in all Gitea versions
|
||||
|
||||
---
|
||||
|
||||
## 🔀 Method 4: Double Remote
|
||||
|
||||
### For Local Work
|
||||
|
||||
**Setup:**
|
||||
```bash
|
||||
# In your local repository
|
||||
cd configure_nginx_manager
|
||||
|
||||
# Add GitHub as second remote
|
||||
git remote add github git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Or configure push to both repositories simultaneously
|
||||
git remote set-url --add --push origin git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Verify
|
||||
git remote -v
|
||||
```
|
||||
|
||||
**Usage:**
|
||||
```bash
|
||||
# Normal push (Gitea only)
|
||||
git push origin main
|
||||
|
||||
# Push to GitHub
|
||||
git push github main
|
||||
|
||||
# Push to both repositories
|
||||
git push origin main
|
||||
git push github main
|
||||
|
||||
# Or create alias
|
||||
git config alias.pushall '!git push origin main && git push github main'
|
||||
git pushall
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Sync Verification
|
||||
|
||||
### Check via Git
|
||||
|
||||
```bash
|
||||
# Compare commits
|
||||
git ls-remote git@gitea.example.com:username/configure_nginx_manager.git
|
||||
git ls-remote git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Should have identical SHA
|
||||
```
|
||||
|
||||
### Check Logs (Method 1 - Hooks)
|
||||
|
||||
```bash
|
||||
# On Gitea server
|
||||
tail -f /var/log/gitea/github-sync.log
|
||||
```
|
||||
|
||||
### Check GitHub Actions (Method 2)
|
||||
|
||||
1. GitHub Repository → Actions
|
||||
2. View recent runs
|
||||
3. Check execution logs
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Recommended Configuration
|
||||
|
||||
For maximum reliability, use **combination of methods**:
|
||||
|
||||
1. **Git Hook** (primary) - instant sync
|
||||
2. **GitHub Actions** (backup) - hourly check in case of hook failure
|
||||
|
||||
### Installing Both Methods
|
||||
|
||||
```bash
|
||||
# 1. Install Git Hook on Gitea server
|
||||
# (see Method 1)
|
||||
|
||||
# 2. Configure GitHub Actions
|
||||
# (see Method 2)
|
||||
|
||||
# 3. GitHub Actions will catch missed changes
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### Problem: Hook not firing
|
||||
|
||||
**Check:**
|
||||
```bash
|
||||
# On Gitea server
|
||||
ls -la /path/to/repo.git/hooks/post-receive
|
||||
# Should be -rwxr-xr-x
|
||||
|
||||
# Check permissions
|
||||
chmod +x /path/to/repo.git/hooks/post-receive
|
||||
chown git:git /path/to/repo.git/hooks/post-receive
|
||||
|
||||
# Check Gitea error log
|
||||
tail -f /var/log/gitea/gitea.log
|
||||
```
|
||||
|
||||
### Problem: Permission denied (SSH)
|
||||
|
||||
**Solution:**
|
||||
```bash
|
||||
# Ensure SSH key is added to GitHub
|
||||
ssh -T git@github.com
|
||||
|
||||
# Check .ssh permissions
|
||||
chmod 700 ~/.ssh
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
```
|
||||
|
||||
### Problem: Authentication failed (HTTPS)
|
||||
|
||||
**Solution:**
|
||||
- Check GitHub token (should have `repo` scope)
|
||||
- Token not expired
|
||||
- Correct URL format: `https://TOKEN@github.com/user/repo.git`
|
||||
|
||||
### Problem: GitHub Actions not triggering
|
||||
|
||||
**Solution:**
|
||||
1. Check secrets in Settings → Secrets
|
||||
2. Verify webhook format from Gitea
|
||||
3. Run manually for test
|
||||
|
||||
---
|
||||
|
||||
## 📊 Method Comparison
|
||||
|
||||
### Sync Speed
|
||||
- **Git Hooks**: ⚡ < 1 second
|
||||
- **GitHub Actions (webhook)**: ⏱️ 10-30 seconds
|
||||
- **GitHub Actions (schedule)**: ⏱️ up to 1 hour
|
||||
- **Gitea Mirror**: ⏱️ scheduled
|
||||
|
||||
### Reliability
|
||||
- **Git Hooks**: ⭐⭐⭐⭐⭐ (when properly configured)
|
||||
- **GitHub Actions**: ⭐⭐⭐⭐⭐ (very reliable)
|
||||
- **Gitea Mirror**: ⭐⭐⭐ (depends on Gitea version)
|
||||
- **Double Remote**: ⭐⭐ (requires manual action)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Final Recommendation
|
||||
|
||||
For `configure_nginx_manager` project:
|
||||
|
||||
**1. Primary method: Git Hook**
|
||||
- Fast
|
||||
- Reliable
|
||||
- Automatic
|
||||
|
||||
**2. Backup method: GitHub Actions**
|
||||
- Hourly check
|
||||
- Catches missed changes
|
||||
- Can run manually
|
||||
|
||||
**3. Monitoring:**
|
||||
```bash
|
||||
# Weekly verification
|
||||
git ls-remote origin | head -1
|
||||
git ls-remote github | head -1
|
||||
# SHA should match
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Quick Setup
|
||||
|
||||
```bash
|
||||
# On Gitea server
|
||||
sudo su - git
|
||||
cd /path/to/gitea-repositories/username/configure_nginx_manager.git/hooks/
|
||||
|
||||
# Download hook
|
||||
wget https://raw.githubusercontent.com/username/configure_nginx_manager/main/gitea-hooks/post-receive
|
||||
|
||||
# Configure
|
||||
nano post-receive
|
||||
# Change GITHUB_REPO
|
||||
|
||||
# Permissions
|
||||
chmod +x post-receive
|
||||
|
||||
# Test
|
||||
echo "test" | ./post-receive
|
||||
```
|
||||
|
||||
Done! 🎉
|
||||
|
||||
---
|
||||
|
||||
## 📚 Additional Resources
|
||||
|
||||
- [Git Hooks Documentation](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
|
||||
- [GitHub Actions Documentation](https://docs.github.com/en/actions)
|
||||
- [Gitea Documentation](https://docs.gitea.io/)
|
||||
|
||||
---
|
||||
|
||||
**Version**: 1.0
|
||||
**Author**: Фофанов Дмитрий
|
||||
**Date**: October 27, 2025
|
||||
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
|
||||
287
docs/en/PROJECT_STRUCTURE_EN.md
Normal file
287
docs/en/PROJECT_STRUCTURE_EN.md
Normal file
@@ -0,0 +1,287 @@
|
||||
# 📁 configure_nginx_manager Project Structure
|
||||
|
||||
## Main Scripts
|
||||
|
||||
### Python (Recommended)
|
||||
- **letsencrypt_regru_api.py** (1,411 lines)
|
||||
- Full-featured Python script
|
||||
- Direct reg.ru API integration
|
||||
- Nginx Proxy Manager integration
|
||||
- Automatic certificate check and renewal
|
||||
- Test self-signed certificate generation
|
||||
- Wildcard domain support
|
||||
|
||||
### Bash
|
||||
- **letsencrypt_regru_dns.sh**
|
||||
- Bash script with certbot-dns-regru plugin
|
||||
- Easy to use
|
||||
- Minimal dependencies
|
||||
|
||||
### PowerShell
|
||||
- **letsencrypt_regru.ps1**
|
||||
- Windows version
|
||||
- Similar to Bash script
|
||||
|
||||
### Testing
|
||||
- **test_certificate.sh**
|
||||
- Quick test certificate creation via OpenSSL
|
||||
- Standalone operation without Python
|
||||
- Wildcard domain support
|
||||
|
||||
## Automation
|
||||
|
||||
### Makefile
|
||||
- **Makefile** (415 lines)
|
||||
- `make install` - Complete installation and setup
|
||||
- `make uninstall` - Clean removal
|
||||
- `make status` - Check status
|
||||
- `make test-cert` - Create test certificate
|
||||
- `make obtain` - Get Let's Encrypt certificate
|
||||
- `make renew` - Renew certificate
|
||||
- `make logs` - View logs
|
||||
- `make check-config` - Validate configuration
|
||||
|
||||
## Configuration
|
||||
|
||||
### config.json.example
|
||||
Example configuration with all parameters:
|
||||
- reg.ru API credentials
|
||||
- Domain and email settings
|
||||
- Renewal parameters (renewal_days)
|
||||
- Nginx Proxy Manager settings
|
||||
- Directory and log paths
|
||||
|
||||
## Documentation
|
||||
|
||||
### README.md (1,420+ lines)
|
||||
Main documentation:
|
||||
- Introduction and features
|
||||
- Quick start
|
||||
- Makefile installation
|
||||
- Test certificate creation
|
||||
- Requirements and dependencies
|
||||
- Configuration and usage
|
||||
- NPM integration
|
||||
- Automatic check and renewal
|
||||
- Automation via cron/systemd
|
||||
- Troubleshooting
|
||||
|
||||
### README_EN.md (English version)
|
||||
Complete English translation of main guide
|
||||
|
||||
### TESTING_GUIDE.md (370+ lines)
|
||||
Testing guide:
|
||||
- Why test certificates are needed
|
||||
- Bypass Let's Encrypt limits (5 per week)
|
||||
- Quick start with test certificates
|
||||
- Method comparison
|
||||
- Development usage
|
||||
- Test automation
|
||||
- Transition from test to production
|
||||
- FAQ
|
||||
- CI/CD and Docker examples
|
||||
|
||||
### TESTING_GUIDE_EN.md (English version)
|
||||
Complete English translation of testing guide
|
||||
|
||||
### GITEA_SYNC.md
|
||||
Gitea → GitHub synchronization:
|
||||
- 4 sync methods (Git Hooks, GitHub Actions, Gitea Mirror, Double Remote)
|
||||
- Step-by-step installation
|
||||
- SSH and token setup
|
||||
- Webhook integration
|
||||
- Troubleshooting
|
||||
- Method comparison
|
||||
|
||||
### GITEA_SYNC_EN.md (English version)
|
||||
Complete English translation of sync guide
|
||||
|
||||
### CHEATSHEET.md
|
||||
Quick reference:
|
||||
- Main commands
|
||||
- Development workflow
|
||||
- Use case scenarios
|
||||
- Common errors and solutions
|
||||
- Checking and debugging
|
||||
|
||||
### CHEATSHEET_EN.md (English version)
|
||||
Complete English translation of cheatsheet
|
||||
|
||||
### PROJECT_STRUCTURE.md (this file)
|
||||
- All project files description
|
||||
- Component overview
|
||||
|
||||
### PROJECT_STRUCTURE_EN.md (English version)
|
||||
Complete English translation of structure
|
||||
|
||||
### DESCRIPTION.md
|
||||
Project description:
|
||||
- Russian description
|
||||
- English description
|
||||
- Quick start
|
||||
- Features overview
|
||||
|
||||
### CHANGELOG.md
|
||||
Change history:
|
||||
- Versions and updates
|
||||
- New features
|
||||
- Bug fixes
|
||||
- Roadmap
|
||||
|
||||
### CHANGELOG_EN.md (English version)
|
||||
Complete English translation of changelog
|
||||
|
||||
## Git Integration
|
||||
|
||||
### .github/workflows/sync-from-gitea.yml
|
||||
GitHub Actions for synchronization:
|
||||
- Automatic check every hour
|
||||
- Webhook trigger from Gitea
|
||||
- Manual run
|
||||
- Merge changes from Gitea
|
||||
- Push to GitHub
|
||||
|
||||
### gitea-hooks/
|
||||
Git hooks for Gitea server:
|
||||
|
||||
**post-receive**
|
||||
- Automatic push to GitHub after commit
|
||||
- Instant sync (< 1 second)
|
||||
- Operation logging
|
||||
- Tag synchronization
|
||||
- SSH and HTTPS support
|
||||
|
||||
**README.md**
|
||||
- Hook installation instructions
|
||||
- Authentication setup
|
||||
- Troubleshooting
|
||||
|
||||
**README_EN.md** (English version)
|
||||
Complete English translation
|
||||
|
||||
## Additional Files
|
||||
|
||||
### Markdown Documents
|
||||
- **Add Let's Encrypt Certificate для провайдера reg.ru.md**
|
||||
- Initial instructions (Russian)
|
||||
|
||||
- **Создание и продление SSL сертификата.md**
|
||||
- Additional process information (Russian)
|
||||
|
||||
## Features
|
||||
|
||||
### ✅ Core Features
|
||||
- [x] Let's Encrypt certificates via reg.ru DNS API
|
||||
- [x] Wildcard certificates (*.domain.com)
|
||||
- [x] Automatic certificate renewal
|
||||
- [x] DNS-01 validation
|
||||
- [x] Nginx Proxy Manager integration
|
||||
- [x] Automatic upload/update to NPM
|
||||
|
||||
### ✅ Advanced Features
|
||||
- [x] Automatic expiration check
|
||||
- [x] Configurable renewal threshold (renewal_days)
|
||||
- [x] Systemd service + timer
|
||||
- [x] Cron automation
|
||||
- [x] Detailed logging
|
||||
- [x] Configuration validation
|
||||
|
||||
### 🆕 Testing
|
||||
- [x] Self-signed test certificate generation
|
||||
- [x] Bypass Let's Encrypt limits (5/week)
|
||||
- [x] Instant creation without DNS
|
||||
- [x] Test certificate NPM integration
|
||||
- [x] Full structure compatibility with Let's Encrypt
|
||||
|
||||
### 🔄 Repository Sync
|
||||
- [x] Automatic Gitea → GitHub sync
|
||||
- [x] Git Hooks (instant sync)
|
||||
- [x] GitHub Actions (hourly check)
|
||||
- [x] Webhook integration
|
||||
- [x] SSH and HTTPS authentication
|
||||
|
||||
## Installation
|
||||
|
||||
### Quick Install
|
||||
```bash
|
||||
sudo make install
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
sudo make test-cert # For testing
|
||||
sudo make obtain # For production
|
||||
```
|
||||
|
||||
### Post-Install Structure
|
||||
```
|
||||
/opt/letsencrypt-regru/
|
||||
├── letsencrypt_regru_api.py
|
||||
|
||||
/etc/letsencrypt/
|
||||
├── regru_config.json
|
||||
└── live/
|
||||
└── example.com/
|
||||
├── privkey.pem
|
||||
├── cert.pem
|
||||
├── fullchain.pem
|
||||
└── chain.pem
|
||||
|
||||
/etc/systemd/system/
|
||||
├── letsencrypt-regru.service
|
||||
└── letsencrypt-regru.timer
|
||||
|
||||
/var/log/letsencrypt/
|
||||
└── letsencrypt_regru.log
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Testing (no limits)
|
||||
```bash
|
||||
sudo make test-cert # Create test certificate
|
||||
sudo make status # Check status
|
||||
```
|
||||
|
||||
### Production
|
||||
```bash
|
||||
sudo make obtain # Get Let's Encrypt certificate
|
||||
sudo make renew # Renew certificate
|
||||
sudo make run # Automatic mode
|
||||
```
|
||||
|
||||
### Monitoring
|
||||
```bash
|
||||
sudo make logs # View logs
|
||||
sudo make status # Service status
|
||||
sudo make check-config # Check configuration
|
||||
```
|
||||
|
||||
## Technologies
|
||||
|
||||
- **Python 3.6+** - Main language
|
||||
- **Certbot** - Let's Encrypt client
|
||||
- **requests** - HTTP API requests
|
||||
- **cryptography** - Test certificate generation
|
||||
- **systemd** - Launch automation
|
||||
- **cron** - Alternative automation
|
||||
- **Make** - Installation management
|
||||
- **OpenSSL** - Alternative certificate generation
|
||||
|
||||
## License
|
||||
|
||||
Open Source - Free to use
|
||||
|
||||
## Author
|
||||
|
||||
Фофанов Дмитрий @ 2025
|
||||
|
||||
## Support
|
||||
|
||||
See documentation:
|
||||
- [README.md](README.md) / [README_EN.md](README_EN.md) - Main guide
|
||||
- [TESTING_GUIDE.md](TESTING_GUIDE.md) / [TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md) - Testing guide
|
||||
- [GITEA_SYNC.md](GITEA_SYNC.md) / [GITEA_SYNC_EN.md](GITEA_SYNC_EN.md) - Repository sync
|
||||
|
||||
---
|
||||
|
||||
**Version**: 2.1
|
||||
**Date**: October 27, 2025
|
||||
**Status**: ✅ Production Ready
|
||||
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
|
||||
379
docs/en/TESTING_GUIDE_EN.md
Normal file
379
docs/en/TESTING_GUIDE_EN.md
Normal file
@@ -0,0 +1,379 @@
|
||||
# 🧪 SSL Certificate Testing Guide
|
||||
|
||||
## Why do you need test certificates?
|
||||
|
||||
Let's Encrypt has **strict limits**:
|
||||
- ⚠️ Maximum **5 certificates per week** per domain
|
||||
- ⚠️ Maximum **50 certificates per week** per account
|
||||
- ⚠️ **1 week ban** if limits exceeded
|
||||
|
||||
**Solution**: Use self-signed test certificates for development!
|
||||
|
||||
---
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Option 1: Via Makefile (Recommended)
|
||||
|
||||
```bash
|
||||
# After script installation (make install)
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
**Result**: Certificate created in `/etc/letsencrypt/live/your-domain/`
|
||||
|
||||
### Option 2: Via Python Script
|
||||
|
||||
```bash
|
||||
sudo python3 letsencrypt_regru_api.py \
|
||||
--config /etc/letsencrypt/regru_config.json \
|
||||
--test-cert -v
|
||||
```
|
||||
|
||||
### Option 3: Via Bash Script (Standalone)
|
||||
|
||||
```bash
|
||||
# Simple domain
|
||||
sudo ./test_certificate.sh example.com no
|
||||
|
||||
# With wildcard
|
||||
sudo ./test_certificate.sh example.com yes
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Method Comparison
|
||||
|
||||
| Method | Speed | Requirements | NPM Integration | Limits |
|
||||
|--------|-------|--------------|-----------------|--------|
|
||||
| **Let's Encrypt** | 2-5 min | Internet, DNS | ✅ Yes | ⚠️ 5/week |
|
||||
| **Test (Python)** | 1-2 sec | Python only | ✅ Yes | ✅ None |
|
||||
| **Test (Bash)** | 1-2 sec | OpenSSL only | ❌ Manual | ✅ None |
|
||||
|
||||
---
|
||||
|
||||
## Detailed Instructions
|
||||
|
||||
### 1. Configuration Setup
|
||||
|
||||
```bash
|
||||
# Create configuration
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"domain": "test.example.com",
|
||||
"wildcard": true,
|
||||
"cert_dir": "/etc/letsencrypt/live",
|
||||
"npm_enabled": true,
|
||||
"npm_host": "https://npm.example.com",
|
||||
"npm_email": "admin@example.com",
|
||||
"npm_password": "your_password"
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Create Test Certificate
|
||||
|
||||
```bash
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
### 3. Verify Created Files
|
||||
|
||||
```bash
|
||||
ls -la /etc/letsencrypt/live/test.example.com/
|
||||
# Should contain:
|
||||
# - privkey.pem (private key)
|
||||
# - cert.pem (certificate)
|
||||
# - fullchain.pem (full chain)
|
||||
# - chain.pem (CA chain)
|
||||
```
|
||||
|
||||
### 4. View Certificate Information
|
||||
|
||||
```bash
|
||||
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -text -noout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Using in Nginx
|
||||
|
||||
### Direct Usage
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name test.example.com;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/test.example.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/test.example.com/privkey.pem;
|
||||
|
||||
# ... rest of configuration
|
||||
}
|
||||
```
|
||||
|
||||
### Via Nginx Proxy Manager
|
||||
|
||||
If `npm_enabled: true` in configuration, certificate will automatically upload to NPM.
|
||||
|
||||
**Check in NPM:**
|
||||
1. Open NPM web interface
|
||||
2. Go to **SSL Certificates**
|
||||
3. Find your domain in the list
|
||||
4. ⚠️ Will be marked as "Custom" (not Let's Encrypt)
|
||||
|
||||
---
|
||||
|
||||
## Test Automation
|
||||
|
||||
### CI/CD Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# test_ssl_integration.sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "🧪 Testing SSL integration..."
|
||||
|
||||
# 1. Create test certificate
|
||||
sudo python3 letsencrypt_regru_api.py \
|
||||
--config test_config.json \
|
||||
--test-cert
|
||||
|
||||
# 2. Verify files
|
||||
if [ ! -f "/etc/letsencrypt/live/test.example.com/fullchain.pem" ]; then
|
||||
echo "❌ Certificate not created"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. Check validity
|
||||
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -noout -checkend 0
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Certificate is valid"
|
||||
else
|
||||
echo "❌ Certificate is invalid"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ All tests passed"
|
||||
```
|
||||
|
||||
### Makefile for Testing
|
||||
|
||||
```makefile
|
||||
.PHONY: test-ssl test-npm test-all
|
||||
|
||||
test-ssl:
|
||||
@echo "Creating test certificate..."
|
||||
sudo make test-cert
|
||||
@echo "Verifying files..."
|
||||
test -f /etc/letsencrypt/live/$(DOMAIN)/fullchain.pem
|
||||
@echo "✅ SSL test passed"
|
||||
|
||||
test-npm:
|
||||
@echo "Checking NPM integration..."
|
||||
# Your NPM API checks
|
||||
@echo "✅ NPM test passed"
|
||||
|
||||
test-all: test-ssl test-npm
|
||||
@echo "✅ All tests passed"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Transition to Production
|
||||
|
||||
### Step 1: Testing
|
||||
|
||||
```bash
|
||||
# 1. Create test certificate
|
||||
sudo make test-cert
|
||||
|
||||
# 2. Verify with NPM
|
||||
# Open https://your-domain and check
|
||||
|
||||
# 3. Ensure everything works
|
||||
```
|
||||
|
||||
### Step 2: Switch to Let's Encrypt
|
||||
|
||||
```bash
|
||||
# 1. Remove test certificate
|
||||
sudo rm -rf /etc/letsencrypt/live/your-domain/
|
||||
|
||||
# 2. Get real certificate
|
||||
sudo make obtain
|
||||
|
||||
# 3. Verify update in NPM
|
||||
sudo make status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
### Q: Why does browser show warning?
|
||||
|
||||
**A:** Self-signed certificates are not trusted by browsers. This is normal for testing.
|
||||
|
||||
To avoid browser warning (local testing only):
|
||||
1. Chrome: `chrome://flags/#allow-insecure-localhost`
|
||||
2. Firefox: Click "Advanced" → "Accept the Risk"
|
||||
|
||||
### Q: Can I use in production?
|
||||
|
||||
**A:** ❌ **NO!** Test certificates are for development and testing only.
|
||||
|
||||
### Q: How often can I create test certificates?
|
||||
|
||||
**A:** ✅ Unlimited! No limits whatsoever.
|
||||
|
||||
### Q: Do they upload to NPM automatically?
|
||||
|
||||
**A:** ✅ Yes, if `npm_enabled: true` in configuration.
|
||||
|
||||
### Q: Do they work with wildcard domains?
|
||||
|
||||
**A:** ✅ Yes! Just set `"wildcard": true` in configuration.
|
||||
|
||||
### Q: How to check expiration date?
|
||||
|
||||
```bash
|
||||
openssl x509 -in /etc/letsencrypt/live/your-domain/cert.pem -noout -dates
|
||||
```
|
||||
|
||||
### Q: How to change validity period?
|
||||
|
||||
Edit `validity_days` in `generate_self_signed_certificate()` function:
|
||||
|
||||
```python
|
||||
validity_days: int = 365 # Change to desired number of days
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Error: Permission denied
|
||||
|
||||
```bash
|
||||
# Run with sudo
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
### Error: Module 'cryptography' not found
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
sudo pip3 install cryptography
|
||||
```
|
||||
|
||||
### NPM doesn't show certificate
|
||||
|
||||
1. Check NPM settings in configuration
|
||||
2. Check logs: `sudo make logs`
|
||||
3. Try uploading manually via NPM web interface
|
||||
|
||||
### Certificate not created
|
||||
|
||||
```bash
|
||||
# Check permissions
|
||||
ls -la /etc/letsencrypt/live/
|
||||
|
||||
# Create directory manually
|
||||
sudo mkdir -p /etc/letsencrypt/live/
|
||||
|
||||
# Check configuration
|
||||
sudo make check-config
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Docker Development
|
||||
|
||||
```dockerfile
|
||||
FROM nginx:alpine
|
||||
|
||||
# Copy test certificate
|
||||
COPY test-certs/ /etc/nginx/ssl/
|
||||
|
||||
# Nginx configuration
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
EXPOSE 443
|
||||
```
|
||||
|
||||
### Local Testing
|
||||
|
||||
```bash
|
||||
# Create certificate for localhost
|
||||
sudo python3 letsencrypt_regru_api.py --test-cert
|
||||
|
||||
# Add to /etc/hosts
|
||||
echo "127.0.0.1 test.example.com" | sudo tee -a /etc/hosts
|
||||
|
||||
# Start nginx
|
||||
sudo nginx -t && sudo nginx -s reload
|
||||
|
||||
# Open in browser
|
||||
open https://test.example.com
|
||||
```
|
||||
|
||||
### Automated Testing Before Deployment
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# pre-deploy.sh
|
||||
|
||||
# Test SSL check
|
||||
sudo make test-cert
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Test certificate created successfully"
|
||||
echo "✅ Ready for production certificate"
|
||||
sudo make obtain
|
||||
else
|
||||
echo "❌ Error creating test certificate"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Additional Resources
|
||||
|
||||
- 📘 [Let's Encrypt Rate Limits](https://letsencrypt.org/docs/rate-limits/)
|
||||
- 📘 [OpenSSL Documentation](https://www.openssl.org/docs/)
|
||||
- 📘 [Nginx Proxy Manager Docs](https://nginxproxymanager.com/guide/)
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference
|
||||
|
||||
```bash
|
||||
# Installation
|
||||
sudo make install
|
||||
|
||||
# Configuration
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
|
||||
# Create test certificate
|
||||
sudo make test-cert
|
||||
|
||||
# Verify
|
||||
sudo make check-config
|
||||
sudo make status
|
||||
|
||||
# Switch to production
|
||||
sudo rm -rf /etc/letsencrypt/live/domain/
|
||||
sudo make obtain
|
||||
|
||||
# Automatic renewal
|
||||
sudo make run
|
||||
```
|
||||
|
||||
**Done!** 🎉 Now you can test SSL certificates without limits!
|
||||
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
|
||||
153
docs/ru/CHANGELOG.md
Normal file
153
docs/ru/CHANGELOG.md
Normal file
@@ -0,0 +1,153 @@
|
||||
# 📋 Журнал изменений (Changelog)
|
||||
|
||||
## [2.1.0] - 2025-10-27
|
||||
|
||||
### 🆕 Добавлено
|
||||
|
||||
#### Генерация тестовых SSL сертификатов
|
||||
- ✨ **Новый класс `TestCertificateGenerator`** - генерация самоподписанных сертификатов
|
||||
- ✨ **Команда `--test-cert`** в Python скрипте для создания тестовых сертификатов
|
||||
- ✨ **Скрипт `test_certificate.sh`** - автономное создание через OpenSSL
|
||||
- ✨ **Команда `make test-cert`** в Makefile для быстрого тестирования
|
||||
|
||||
#### Документация
|
||||
- 📘 **TESTING_GUIDE.md** (370+ строк) - полное руководство по тестированию
|
||||
- Обход лимитов Let's Encrypt (5 сертификатов в неделю)
|
||||
- Сравнение методов создания сертификатов
|
||||
- Примеры для CI/CD и Docker
|
||||
- Переход с тестовых на production
|
||||
- Частые вопросы и решения
|
||||
|
||||
- 📘 **PROJECT_STRUCTURE.md** - структура проекта
|
||||
- Описание всех файлов
|
||||
- Список возможностей
|
||||
- Технологии
|
||||
|
||||
- 📘 **CHEATSHEET.md** - быстрая шпаргалка
|
||||
- Основные команды
|
||||
- Сценарии использования
|
||||
- Частые ошибки и решения
|
||||
- Workflow разработки
|
||||
|
||||
#### Функциональность
|
||||
- ✨ Поддержка **неограниченного количества** тестовых сертификатов
|
||||
- ✨ **Мгновенное создание** (1-2 секунды) без DNS валидации
|
||||
- ✨ **Автоматическая загрузка** тестовых сертификатов в NPM
|
||||
- ✨ **Полная совместимость** структуры с Let's Encrypt
|
||||
- ✨ **Wildcard поддержка** для тестовых сертификатов
|
||||
|
||||
### 🔧 Улучшено
|
||||
|
||||
#### Python скрипт
|
||||
- Добавлен импорт библиотеки `cryptography` с проверкой установки
|
||||
- Новые параметры командной строки:
|
||||
- `--test-cert` - создание тестового сертификата
|
||||
- `--auto` - явное указание автоматического режима
|
||||
- Улучшенная обработка тестовых сертификатов в NPM
|
||||
- Детальное логирование процесса генерации
|
||||
|
||||
#### Makefile
|
||||
- Добавлена команда `make test-cert` с красивым выводом
|
||||
- Информационные сообщения о преимуществах тестовых сертификатов
|
||||
- Предупреждения о безопасности
|
||||
|
||||
#### README.md
|
||||
- Раздел "Создание тестового самоподписанного сертификата"
|
||||
- Обновленное содержание с ссылкой на тестовые сертификаты
|
||||
- Примеры использования тестовых сертификатов
|
||||
- Интеграция с NPM для тестовых сертификатов
|
||||
- Ссылки на дополнительную документацию
|
||||
|
||||
### 🎯 Преимущества
|
||||
|
||||
#### Для разработчиков
|
||||
- ✅ **Нет лимитов** - неограниченное количество сертификатов
|
||||
- ✅ **Быстро** - создание за 1-2 секунды
|
||||
- ✅ **Офлайн** - работает без интернета
|
||||
- ✅ **Идентичная структура** - те же файлы что и Let's Encrypt
|
||||
|
||||
#### Для тестирования
|
||||
- ✅ **CI/CD friendly** - быстрое создание в pipeline
|
||||
- ✅ **Docker ready** - легко встраивается в контейнеры
|
||||
- ✅ **Staging окружения** - идеально для тестовых серверов
|
||||
- ✅ **Локальная разработка** - HTTPS на localhost
|
||||
|
||||
### 📊 Статистика
|
||||
|
||||
- **Строк кода**: 1,411 (Python скрипт)
|
||||
- **Строк в Makefile**: 415
|
||||
- **Строк документации**: 2,200+
|
||||
- **Команд в Makefile**: 13
|
||||
- **Режимов работы**: 4 (obtain, renew, auto, test-cert)
|
||||
|
||||
---
|
||||
|
||||
## [2.0.0] - 2025-10-27
|
||||
|
||||
### 🆕 Добавлено
|
||||
- ✨ Интеграция с Nginx Proxy Manager (NPM)
|
||||
- ✨ Класс `NginxProxyManagerAPI` для управления сертификатами через API
|
||||
- ✨ Автоматическая загрузка сертификатов в NPM
|
||||
- ✨ Автоматическое обновление сертификатов в NPM
|
||||
- ✨ Автоматическая проверка срока действия
|
||||
- ✨ Настраиваемый порог обновления (`renewal_days`)
|
||||
- ✨ Makefile для автоматизации установки/удаления
|
||||
- ✨ Systemd service + timer
|
||||
- ✨ Cron автоматизация
|
||||
|
||||
### 🔧 Улучшено
|
||||
- Консолидация документации в единый README.md
|
||||
- Подробное логирование с статусами операций
|
||||
- Валидация конфигурации
|
||||
- Улучшенная обработка ошибок
|
||||
|
||||
### 📘 Документация
|
||||
- Полное руководство по NPM интеграции
|
||||
- Быстрый старт за 3 команды
|
||||
- Примеры автоматизации
|
||||
|
||||
---
|
||||
|
||||
## [1.0.0] - 2025-10-26
|
||||
|
||||
### 🆕 Первый релиз
|
||||
- Python скрипт для Let's Encrypt через reg.ru API
|
||||
- Bash скрипт с certbot-dns-regru
|
||||
- PowerShell версия для Windows
|
||||
- DNS-01 валидация
|
||||
- Wildcard сертификаты
|
||||
- Базовая документация
|
||||
|
||||
---
|
||||
|
||||
## Roadmap (Планы)
|
||||
|
||||
### [2.2.0] - Планируется
|
||||
- [ ] Веб-интерфейс для управления
|
||||
- [ ] Поддержка множественных доменов
|
||||
- [ ] Notifications (email, telegram)
|
||||
- [ ] Grafana dashboard для мониторинга
|
||||
- [ ] Backup сертификатов
|
||||
|
||||
### [3.0.0] - Будущее
|
||||
- [ ] Поддержка других DNS провайдеров
|
||||
- [ ] Cloudflare API
|
||||
- [ ] Route53 (AWS)
|
||||
- [ ] Google Cloud DNS
|
||||
|
||||
---
|
||||
|
||||
## Типы изменений
|
||||
- `🆕 Добавлено` - новый функционал
|
||||
- `🔧 Улучшено` - улучшения существующего функционала
|
||||
- `🐛 Исправлено` - исправление багов
|
||||
- `🗑️ Удалено` - удаленный функционал
|
||||
- `🔒 Безопасность` - изменения безопасности
|
||||
- `📘 Документация` - изменения в документации
|
||||
|
||||
---
|
||||
|
||||
**Версионирование**: Semantic Versioning (MAJOR.MINOR.PATCH)
|
||||
- **MAJOR**: Несовместимые изменения API
|
||||
- **MINOR**: Новый функционал с обратной совместимостью
|
||||
- **PATCH**: Исправления багов
|
||||
263
docs/ru/CHEATSHEET.md
Normal file
263
docs/ru/CHEATSHEET.md
Normal file
@@ -0,0 +1,263 @@
|
||||
# ⚡ Шпаргалка по SSL сертификатам
|
||||
|
||||
## 🚀 Быстрый старт
|
||||
|
||||
### Установка за 3 команды
|
||||
```bash
|
||||
sudo make install
|
||||
sudo nano /etc/letsencrypt/regru_config.json # Заполнить данные
|
||||
sudo make test-cert # Тест
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Тестирование (БЕЗ лимитов Let's Encrypt)
|
||||
|
||||
```bash
|
||||
# Создать тестовый сертификат (неограниченно)
|
||||
sudo make test-cert
|
||||
|
||||
# Проверить статус
|
||||
sudo make status
|
||||
|
||||
# Просмотреть логи
|
||||
sudo make logs
|
||||
```
|
||||
|
||||
**Когда использовать:**
|
||||
- ⚠️ Let's Encrypt: макс. 5 сертификатов/неделю
|
||||
- ✅ Тестовые: НЕОГРАНИЧЕННО
|
||||
- ⚡ Создание: 1-2 секунды vs 2-5 минут
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Production (Let's Encrypt)
|
||||
|
||||
```bash
|
||||
# Получить настоящий сертификат
|
||||
sudo make obtain
|
||||
|
||||
# Автоматический режим (проверка + обновление)
|
||||
sudo make run
|
||||
|
||||
# Принудительное обновление
|
||||
sudo make renew
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Основные команды
|
||||
|
||||
| Команда | Описание | Лимиты |
|
||||
|---------|----------|--------|
|
||||
| `make test-cert` | Тестовый сертификат | ✅ Нет |
|
||||
| `make obtain` | Let's Encrypt новый | ⚠️ 5/неделю |
|
||||
| `make renew` | Обновить существующий | ⚠️ 5/неделю |
|
||||
| `make run` | Авто-режим | ⚠️ 5/неделю |
|
||||
| `make status` | Статус системы | - |
|
||||
| `make logs` | Показать логи | - |
|
||||
| `make check-config` | Проверить конфигурацию | - |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Конфигурация
|
||||
|
||||
### Минимальная (тестирование)
|
||||
```json
|
||||
{
|
||||
"domain": "test.example.com",
|
||||
"wildcard": true,
|
||||
"cert_dir": "/etc/letsencrypt/live"
|
||||
}
|
||||
```
|
||||
|
||||
### Полная (production + NPM)
|
||||
```json
|
||||
{
|
||||
"regru_username": "myuser",
|
||||
"regru_password": "mypassword",
|
||||
"domain": "example.com",
|
||||
"wildcard": true,
|
||||
"email": "admin@example.com",
|
||||
"renewal_days": 30,
|
||||
"npm_enabled": true,
|
||||
"npm_host": "https://npm.example.com",
|
||||
"npm_email": "admin@example.com",
|
||||
"npm_password": "npm_password"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Workflow
|
||||
|
||||
### Разработка → Production
|
||||
|
||||
```bash
|
||||
# 1. Разработка (тестовые сертификаты)
|
||||
sudo make test-cert # Создать тестовый
|
||||
# Тестировать приложение...
|
||||
|
||||
# 2. Production (Let's Encrypt)
|
||||
sudo rm -rf /etc/letsencrypt/live/example.com/ # Удалить тест
|
||||
sudo make obtain # Создать production
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Важные пути
|
||||
|
||||
```bash
|
||||
# Конфигурация
|
||||
/etc/letsencrypt/regru_config.json
|
||||
|
||||
# Сертификаты
|
||||
/etc/letsencrypt/live/example.com/
|
||||
├── privkey.pem # Приватный ключ
|
||||
├── cert.pem # Сертификат
|
||||
├── fullchain.pem # Полная цепочка (для nginx)
|
||||
└── chain.pem # CA цепочка
|
||||
|
||||
# Скрипты
|
||||
/opt/letsencrypt-regru/letsencrypt_regru_api.py
|
||||
|
||||
# Логи
|
||||
/var/log/letsencrypt_regru.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Проверка
|
||||
|
||||
```bash
|
||||
# Проверить конфигурацию
|
||||
sudo make check-config
|
||||
|
||||
# Проверить сертификат
|
||||
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout
|
||||
|
||||
# Проверить срок действия
|
||||
openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -dates
|
||||
|
||||
# Проверить systemd
|
||||
sudo systemctl status letsencrypt-regru.timer
|
||||
sudo systemctl list-timers letsencrypt-regru.timer
|
||||
|
||||
# Проверить cron
|
||||
sudo crontab -l | grep letsencrypt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Отладка
|
||||
|
||||
```bash
|
||||
# Подробные логи
|
||||
sudo make logs
|
||||
|
||||
# Тестовый запуск с подробностями
|
||||
sudo python3 /opt/letsencrypt-regru/letsencrypt_regru_api.py \
|
||||
-c /etc/letsencrypt/regru_config.json --check -v
|
||||
|
||||
# Логи certbot
|
||||
sudo tail -f /var/log/letsencrypt/letsencrypt.log
|
||||
|
||||
# Логи systemd
|
||||
sudo journalctl -u letsencrypt-regru.service -f
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Частые ошибки
|
||||
|
||||
### Let's Encrypt: Rate limit exceeded
|
||||
```bash
|
||||
# РЕШЕНИЕ: Используйте тестовые сертификаты
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
### NPM: Certificate not found
|
||||
```bash
|
||||
# РЕШЕНИЕ: Проверьте настройки NPM
|
||||
sudo make check-config
|
||||
|
||||
# Проверьте подключение
|
||||
curl -k https://npm.example.com
|
||||
```
|
||||
|
||||
### Permission denied
|
||||
```bash
|
||||
# РЕШЕНИЕ: Запускайте с sudo
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Сценарии использования
|
||||
|
||||
### Локальная разработка
|
||||
```bash
|
||||
sudo make test-cert
|
||||
# Открыть https://localhost (игнорировать предупреждение)
|
||||
```
|
||||
|
||||
### CI/CD тестирование
|
||||
```bash
|
||||
# В pipeline
|
||||
sudo make test-cert
|
||||
# Запустить тесты...
|
||||
sudo make status
|
||||
```
|
||||
|
||||
### Staging окружение
|
||||
```bash
|
||||
sudo make test-cert # Или
|
||||
sudo make obtain # Если есть домен
|
||||
```
|
||||
|
||||
### Production окружение
|
||||
```bash
|
||||
sudo make install
|
||||
sudo make obtain
|
||||
# Автоматическое обновление через cron/systemd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Документация
|
||||
|
||||
- **README.md** - Полное руководство (1420+ строк)
|
||||
- **TESTING_GUIDE.md** - Тестирование (370+ строк)
|
||||
- **PROJECT_STRUCTURE.md** - Структура проекта
|
||||
- **CHEATSHEET.md** - Эта шпаргалка
|
||||
|
||||
---
|
||||
|
||||
## 🆘 Быстрая помощь
|
||||
|
||||
```bash
|
||||
# Показать все команды
|
||||
make help
|
||||
|
||||
# Проверить установку
|
||||
sudo make status
|
||||
|
||||
# Полная переустановка
|
||||
sudo make uninstall
|
||||
sudo make install
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 Советы
|
||||
|
||||
1. **Всегда начинайте с тестовых сертификатов** - избегайте лимитов
|
||||
2. **Проверяйте конфигурацию** - `make check-config`
|
||||
3. **Мониторьте логи** - `make logs`
|
||||
4. **Автоматизируйте** - systemd/cron уже настроены
|
||||
5. **Храните бэкапы** конфигурации
|
||||
|
||||
---
|
||||
|
||||
**Версия**: 2.1
|
||||
**Обновлено**: 27.10.2025
|
||||
133
docs/ru/DESCRIPTION.md
Normal file
133
docs/ru/DESCRIPTION.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# 🔒 SSL Certificate Manager для Let's Encrypt + reg.ru
|
||||
|
||||
**Автоматическое управление SSL сертификатами Let's Encrypt с DNS-валидацией через API reg.ru и интеграцией с Nginx Proxy Manager**
|
||||
|
||||
## 📖 Описание
|
||||
|
||||
Комплексное решение для автоматизации создания, обновления и управления SSL сертификатами Let's Encrypt для доменов, зарегистрированных на reg.ru. Поддерживает DNS-01 валидацию, wildcard сертификаты, автоматическую загрузку в Nginx Proxy Manager и генерацию тестовых сертификатов для разработки.
|
||||
|
||||
### ✨ Основные возможности
|
||||
|
||||
- 🔐 **Автоматическое получение SSL сертификатов** через Let's Encrypt
|
||||
- 🌐 **DNS-01 валидация** через API reg.ru (поддержка wildcard доменов)
|
||||
- 🔄 **Автоматическое обновление** сертификатов с настраиваемым порогом
|
||||
- 📦 **Интеграция с Nginx Proxy Manager** - автоматическая загрузка и обновление
|
||||
- 🧪 **Тестовые сертификаты** - обход лимитов Let's Encrypt (5 в неделю)
|
||||
- ⚙️ **Полная автоматизация** через systemd/cron
|
||||
- 🔀 **Синхронизация репозиториев** - автоматическая синхронизация Gitea → GitHub
|
||||
|
||||
### 🚀 Быстрый старт
|
||||
|
||||
```bash
|
||||
# Установка через Makefile
|
||||
sudo make install
|
||||
|
||||
# Настройка конфигурации
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
|
||||
# Создание тестового сертификата (без лимитов)
|
||||
sudo make test-cert
|
||||
|
||||
# Получение production сертификата
|
||||
sudo make obtain
|
||||
```
|
||||
|
||||
### 📋 Требования
|
||||
|
||||
- **ОС**: Linux (Ubuntu/Debian/CentOS)
|
||||
- **Python**: 3.6+
|
||||
- **Зависимости**: certbot, requests, cryptography
|
||||
- **API**: reg.ru (доступ к DNS управлению)
|
||||
- **Опционально**: Nginx Proxy Manager
|
||||
|
||||
### 🎯 Сценарии использования
|
||||
|
||||
- ✅ Автоматизация SSL сертификатов для web-серверов
|
||||
- ✅ Централизованное управление через Nginx Proxy Manager
|
||||
- ✅ Тестирование и разработка с самоподписанными сертификатами
|
||||
- ✅ CI/CD интеграция
|
||||
- ✅ Мультидоменные конфигурации с wildcard
|
||||
|
||||
### 📚 Документация
|
||||
|
||||
- [README.md](README.md) - Полное руководство (1400+ строк)
|
||||
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - Руководство по тестированию
|
||||
- [GITEA_SYNC.md](GITEA_SYNC.md) - Синхронизация Gitea → GitHub
|
||||
- [CHEATSHEET.md](CHEATSHEET.md) - Быстрая шпаргалка
|
||||
|
||||
---
|
||||
|
||||
## 📖 Description (English)
|
||||
|
||||
**Automated Let's Encrypt SSL Certificate Manager with DNS validation via reg.ru API and Nginx Proxy Manager integration**
|
||||
|
||||
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 sync** - automatic Gitea → GitHub synchronization
|
||||
|
||||
### 🚀 Quick Start
|
||||
|
||||
```bash
|
||||
# Install via Makefile
|
||||
sudo make install
|
||||
|
||||
# Configure
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
|
||||
# Create test certificate (no 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
|
||||
|
||||
- [README.md](README.md) - Complete guide (1400+ lines)
|
||||
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - Testing guide
|
||||
- [GITEA_SYNC.md](GITEA_SYNC.md) - Gitea → GitHub sync
|
||||
- [CHEATSHEET.md](CHEATSHEET.md) - Quick reference
|
||||
|
||||
---
|
||||
|
||||
## 👤 Автор / Author
|
||||
|
||||
**Фофанов Дмитрий** @ 2025
|
||||
|
||||
## 📄 Лицензия / License
|
||||
|
||||
Open Source - Free to use
|
||||
|
||||
## 🤝 Вклад / Contributing
|
||||
|
||||
Pull requests приветствуются / Pull requests are welcome!
|
||||
|
||||
## 🔗 Ссылки / Links
|
||||
|
||||
- **Документация reg.ru API**: https://www.reg.ru/support/api
|
||||
- **Let's Encrypt**: https://letsencrypt.org/
|
||||
- **Nginx Proxy Manager**: https://nginxproxymanager.com/
|
||||
111
docs/ru/DOCS_INDEX.md
Normal file
111
docs/ru/DOCS_INDEX.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# 📚 Documentation Index / Индекс документации
|
||||
|
||||
## 🇷🇺 Русская документация / Russian Documentation
|
||||
|
||||
### Основные руководства / Main Guides
|
||||
- **[README.md](README.md)** - Полное руководство (1,420+ строк)
|
||||
- **[TESTING_GUIDE.md](TESTING_GUIDE.md)** - Руководство по тестированию
|
||||
- **[GITEA_SYNC.md](GITEA_SYNC.md)** - Синхронизация Gitea → GitHub
|
||||
- **[PROJECT_STRUCTURE.md](PROJECT_STRUCTURE.md)** - Структура проекта
|
||||
|
||||
### Справочная информация / Reference
|
||||
- **[CHEATSHEET.md](CHEATSHEET.md)** - Быстрая шпаргалка
|
||||
- **[CHANGELOG.md](CHANGELOG.md)** - История изменений
|
||||
- **[DESCRIPTION.md](DESCRIPTION.md)** - Описание проекта
|
||||
|
||||
### Git Hooks
|
||||
- **[gitea-hooks/README.md](gitea-hooks/README.md)** - Установка Git hooks
|
||||
|
||||
---
|
||||
|
||||
## 🇬🇧 English Documentation / Английская документация
|
||||
|
||||
### Main Guides / Основные руководства
|
||||
- **[README_EN.md](README_EN.md)** - Complete Guide (Coming Soon)
|
||||
- **[TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md)** - Testing Guide ✅
|
||||
- **[GITEA_SYNC_EN.md](GITEA_SYNC_EN.md)** - Gitea → GitHub Sync ✅
|
||||
- **[PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md)** - Project Structure ✅
|
||||
|
||||
### Reference / Справочная информация
|
||||
- **[CHEATSHEET_EN.md](CHEATSHEET_EN.md)** - Quick Reference ✅
|
||||
- **[CHANGELOG_EN.md](CHANGELOG_EN.md)** - Change History ✅
|
||||
- **[DESCRIPTION.md](DESCRIPTION.md)** - Project Description (Bilingual) ✅
|
||||
|
||||
### Git Hooks
|
||||
- **[gitea-hooks/README_EN.md](gitea-hooks/README_EN.md)** - Git Hooks Installation ✅
|
||||
|
||||
---
|
||||
|
||||
## 📖 Quick Links / Быстрые ссылки
|
||||
|
||||
### For Users / Для пользователей
|
||||
| Topic | Russian | English |
|
||||
|-------|---------|---------|
|
||||
| Getting Started | [README.md](README.md) | [README_EN.md](README_EN.md) |
|
||||
| Testing Certificates | [TESTING_GUIDE.md](TESTING_GUIDE.md) | [TESTING_GUIDE_EN.md](TESTING_GUIDE_EN.md) |
|
||||
| Quick Commands | [CHEATSHEET.md](CHEATSHEET.md) | [CHEATSHEET_EN.md](CHEATSHEET_EN.md) |
|
||||
|
||||
### For Developers / Для разработчиков
|
||||
| Topic | Russian | English |
|
||||
|-------|---------|---------|
|
||||
| Project Structure | [PROJECT_STRUCTURE.md](PROJECT_STRUCTURE.md) | [PROJECT_STRUCTURE_EN.md](PROJECT_STRUCTURE_EN.md) |
|
||||
| Repository Sync | [GITEA_SYNC.md](GITEA_SYNC.md) | [GITEA_SYNC_EN.md](GITEA_SYNC_EN.md) |
|
||||
| Changelog | [CHANGELOG.md](CHANGELOG.md) | [CHANGELOG_EN.md](CHANGELOG_EN.md) |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start / Быстрый старт
|
||||
|
||||
### Installation / Установка
|
||||
```bash
|
||||
sudo make install
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
### Documentation Priority / Приоритет документации
|
||||
1. Start here / Начните здесь: **README.md** / **README_EN.md**
|
||||
2. Testing / Тестирование: **TESTING_GUIDE.md** / **TESTING_GUIDE_EN.md**
|
||||
3. Quick ref / Шпаргалка: **CHEATSHEET.md** / **CHEATSHEET_EN.md**
|
||||
|
||||
---
|
||||
|
||||
## 📊 Documentation Status / Статус документации
|
||||
|
||||
| File | Russian | English | Lines | Status |
|
||||
|------|---------|---------|-------|--------|
|
||||
| Main Guide | ✅ | 🔄 | 1,420+ | RU Complete |
|
||||
| Testing Guide | ✅ | ✅ | 370+ | Both Complete |
|
||||
| Cheatsheet | ✅ | ✅ | 200+ | Both Complete |
|
||||
| Project Structure | ✅ | ✅ | 200+ | Both Complete |
|
||||
| Gitea Sync | ✅ | ✅ | 400+ | Both Complete |
|
||||
| Changelog | ✅ | ✅ | 150+ | Both Complete |
|
||||
| Git Hooks | ✅ | ✅ | 100+ | Both Complete |
|
||||
|
||||
**Legend:**
|
||||
- ✅ Complete / Готово
|
||||
- 🔄 In Progress / В разработке
|
||||
- ❌ Not Started / Не начато
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Choose Your Language / Выберите язык
|
||||
|
||||
### Prefer Russian? / Предпочитаете русский?
|
||||
👉 Начните с [README.md](README.md)
|
||||
|
||||
### Prefer English? / Предпочитаете английский?
|
||||
👉 Start with [README_EN.md](README_EN.md) or [DESCRIPTION.md](DESCRIPTION.md)
|
||||
|
||||
---
|
||||
|
||||
## 💡 Contributing / Вклад
|
||||
|
||||
Help us translate / Помогите с переводом:
|
||||
- [ ] Complete README_EN.md / Завершить README_EN.md
|
||||
- [ ] Translate docs/ folder / Перевести папку docs/
|
||||
|
||||
---
|
||||
|
||||
**Last Updated / Обновлено**: October 27, 2025
|
||||
**Maintained by / Поддерживает**: Фофанов Дмитрий
|
||||
425
docs/ru/GITEA_SYNC.md
Normal file
425
docs/ru/GITEA_SYNC.md
Normal file
@@ -0,0 +1,425 @@
|
||||
# 🔄 Синхронизация Gitea → GitHub
|
||||
|
||||
Автоматическая синхронизация репозитория из Gitea в GitHub после каждого push.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Доступные методы
|
||||
|
||||
| Метод | Сложность | Скорость | Надежность | Рекомендация |
|
||||
|-------|-----------|----------|------------|--------------|
|
||||
| **1. Git Hooks** | ⭐⭐ | ⚡ Мгновенно | ✅ Высокая | Рекомендуется |
|
||||
| **2. GitHub Actions** | ⭐⭐⭐ | ⏱️ 1-5 мин | ✅ Высокая | Для сложных сценариев |
|
||||
| **3. Gitea Mirror** | ⭐ | ⏱️ По расписанию | ⭐⭐ Средняя | Самый простой |
|
||||
| **4. Двойной Remote** | ⭐ | ⚡ Мгновенно | ⭐⭐ Средняя | Локальная работа |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Метод 1: Git Hooks (Рекомендуется)
|
||||
|
||||
### Установка
|
||||
|
||||
**1. На сервере Gitea найдите путь к репозиторию:**
|
||||
```bash
|
||||
# Обычно это:
|
||||
/var/lib/gitea/data/gitea-repositories/username/configure_nginx_manager.git
|
||||
# Или
|
||||
/home/git/gitea-repositories/username/configure_nginx_manager.git
|
||||
```
|
||||
|
||||
**2. Создайте post-receive hook:**
|
||||
```bash
|
||||
cd /path/to/gitea/repos/username/configure_nginx_manager.git/hooks/
|
||||
nano post-receive
|
||||
```
|
||||
|
||||
**3. Вставьте содержимое** из файла `gitea-hooks/post-receive` (в этом репозитории)
|
||||
|
||||
**4. Настройте параметры:**
|
||||
```bash
|
||||
# В файле post-receive измените:
|
||||
GITHUB_REPO="git@github.com:YOUR_USERNAME/configure_nginx_manager.git"
|
||||
# Или для HTTPS с токеном:
|
||||
GITHUB_REPO="https://YOUR_TOKEN@github.com/YOUR_USERNAME/configure_nginx_manager.git"
|
||||
```
|
||||
|
||||
**5. Сделайте скрипт исполняемым:**
|
||||
```bash
|
||||
chmod +x post-receive
|
||||
```
|
||||
|
||||
**6. Создайте директорию для логов:**
|
||||
```bash
|
||||
mkdir -p /var/log/gitea
|
||||
chown git:git /var/log/gitea
|
||||
```
|
||||
|
||||
### Настройка SSH ключей (для git@github.com)
|
||||
|
||||
**На сервере Gitea:**
|
||||
|
||||
**Шаг 1: Определите пользователя Gitea**
|
||||
```bash
|
||||
# Проверьте под каким пользователем запущен Gitea
|
||||
ps aux | grep gitea | grep -v grep
|
||||
|
||||
# Обычно это один из:
|
||||
# - git (стандартная установка)
|
||||
# - gitea (установка через Docker/LXC)
|
||||
```
|
||||
|
||||
**Шаг 2: Переключитесь на этого пользователя**
|
||||
```bash
|
||||
# Попробуйте git:
|
||||
sudo su - git
|
||||
|
||||
# Если не работает, попробуйте gitea:
|
||||
sudo su - gitea
|
||||
|
||||
# Проверьте текущего пользователя
|
||||
whoami # Должно быть: git или gitea
|
||||
```
|
||||
|
||||
**Шаг 3: Создайте SSH ключ**
|
||||
```bash
|
||||
# Создайте SSH ключ (если его ещё нет)
|
||||
ssh-keygen -t ed25519 -C "gitea-to-github-sync" -f ~/.ssh/id_ed25519 -N ""
|
||||
|
||||
# Скопируйте публичный ключ
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
```
|
||||
|
||||
**На GitHub:**
|
||||
1. Settings → SSH and GPG keys
|
||||
2. New SSH key
|
||||
3. Вставьте публичный ключ
|
||||
4. Save
|
||||
|
||||
**⚠️ ВАЖНО: Добавьте GitHub в known_hosts:**
|
||||
```bash
|
||||
# От того же пользователя (git или gitea)
|
||||
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
|
||||
|
||||
# Проверьте что ключ добавлен
|
||||
cat ~/.ssh/known_hosts | grep github.com
|
||||
```
|
||||
|
||||
**Проверка подключения:**
|
||||
```bash
|
||||
ssh -T git@github.com
|
||||
# Должно вывести: Hi username! You've successfully authenticated...
|
||||
```
|
||||
|
||||
### Настройка токена (для HTTPS)
|
||||
|
||||
**На GitHub:**
|
||||
1. Settings → Developer settings → Personal access tokens → Tokens (classic)
|
||||
2. Generate new token
|
||||
3. Выберите scope: `repo` (полный доступ к репозиториям)
|
||||
4. Скопируйте токен
|
||||
|
||||
**В hook файле:**
|
||||
```bash
|
||||
GITHUB_REPO="https://ghp_YOUR_TOKEN_HERE@github.com/username/configure_nginx_manager.git"
|
||||
```
|
||||
|
||||
### Тестирование
|
||||
|
||||
```bash
|
||||
# Сделайте тестовый commit в Gitea
|
||||
cd /tmp
|
||||
git clone http://gitea.example.com/username/configure_nginx_manager.git
|
||||
cd configure_nginx_manager
|
||||
echo "test" >> README.md
|
||||
git add README.md
|
||||
git commit -m "Test sync to GitHub"
|
||||
git push
|
||||
|
||||
# Проверьте лог
|
||||
tail -f /var/log/gitea/github-sync.log
|
||||
|
||||
# Проверьте GitHub - изменения должны появиться
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Метод 2: GitHub Actions
|
||||
|
||||
### Установка
|
||||
|
||||
**1. Создайте workflow в GitHub репозитории:**
|
||||
|
||||
Файл уже создан: `.github/workflows/sync-from-gitea.yml`
|
||||
|
||||
**2. Настройте секреты в GitHub:**
|
||||
|
||||
GitHub Repository → Settings → Secrets and variables → Actions → New repository secret
|
||||
|
||||
Добавьте:
|
||||
- **Name**: `GITEA_URL`
|
||||
- **Value**: `https://gitea.example.com/username/configure_nginx_manager.git`
|
||||
|
||||
- **Name**: `GITEA_TOKEN`
|
||||
- **Value**: Токен доступа Gitea
|
||||
|
||||
### Получение токена Gitea
|
||||
|
||||
**В Gitea:**
|
||||
1. Settings → Applications → Generate New Token
|
||||
2. Token Name: "GitHub Sync"
|
||||
3. Select permissions: `read:repository`
|
||||
4. Generate Token
|
||||
5. Скопируйте токен
|
||||
|
||||
### Запуск синхронизации
|
||||
|
||||
**Автоматически (по расписанию):**
|
||||
- Каждый час проверяет изменения
|
||||
|
||||
**Вручную:**
|
||||
1. GitHub → Actions
|
||||
2. Выберите workflow "Sync from Gitea"
|
||||
3. Run workflow
|
||||
|
||||
**Через webhook от Gitea:**
|
||||
|
||||
В Gitea репозитории:
|
||||
1. Settings → Webhooks → Add Webhook → Gitea
|
||||
2. Target URL: `https://api.github.com/repos/USERNAME/configure_nginx_manager/dispatches`
|
||||
3. HTTP Method: `POST`
|
||||
4. POST Content Type: `application/json`
|
||||
5. Secret: оставьте пустым или используйте
|
||||
6. Trigger On: `Push events`
|
||||
7. Body:
|
||||
```json
|
||||
{
|
||||
"event_type": "gitea-push"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🪞 Метод 3: Gitea Mirror (Встроенная функция)
|
||||
|
||||
### Настройка
|
||||
|
||||
**В Gitea репозитории:**
|
||||
1. Settings → Repository
|
||||
2. Прокрутите до "Mirror Settings"
|
||||
3. Нажмите "Add Push Mirror"
|
||||
4. Заполните:
|
||||
- **Git Remote Repository URL**: `https://github.com/username/configure_nginx_manager.git`
|
||||
- **Username**: ваш GitHub username
|
||||
- **Password**: GitHub Personal Access Token
|
||||
- **Sync Interval**: `8h` (каждые 8 часов) или `0` (только вручную)
|
||||
5. Save
|
||||
|
||||
### Ручная синхронизация
|
||||
|
||||
Settings → Repository → Mirror Settings → Sync Now
|
||||
|
||||
### Преимущества
|
||||
- ✅ Встроенная функция
|
||||
- ✅ Не требует скриптов
|
||||
- ✅ Управление через веб-интерфейс
|
||||
|
||||
### Недостатки
|
||||
- ⚠️ Работает по расписанию (не мгновенно)
|
||||
- ⚠️ Доступно не во всех версиях Gitea
|
||||
|
||||
---
|
||||
|
||||
## 🔀 Метод 4: Двойной Remote
|
||||
|
||||
### Для локальной работы
|
||||
|
||||
**Настройка:**
|
||||
```bash
|
||||
# В вашем локальном репозитории
|
||||
cd configure_nginx_manager
|
||||
|
||||
# Добавьте GitHub как второй remote
|
||||
git remote add github git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Или настройте push в оба репозитория одновременно
|
||||
git remote set-url --add --push origin git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Проверьте
|
||||
git remote -v
|
||||
```
|
||||
|
||||
**Использование:**
|
||||
```bash
|
||||
# Обычный push (только в Gitea)
|
||||
git push origin main
|
||||
|
||||
# Push в GitHub
|
||||
git push github main
|
||||
|
||||
# Push в оба репозитория
|
||||
git push origin main
|
||||
git push github main
|
||||
|
||||
# Или создайте alias
|
||||
git config alias.pushall '!git push origin main && git push github main'
|
||||
git pushall
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Проверка синхронизации
|
||||
|
||||
### Проверка через Git
|
||||
|
||||
```bash
|
||||
# Сравнить коммиты
|
||||
git ls-remote git@gitea.example.com:username/configure_nginx_manager.git
|
||||
git ls-remote git@github.com:username/configure_nginx_manager.git
|
||||
|
||||
# Должны быть одинаковые SHA
|
||||
```
|
||||
|
||||
### Проверка логов (Метод 1 - Hooks)
|
||||
|
||||
```bash
|
||||
# На сервере Gitea
|
||||
tail -f /var/log/gitea/github-sync.log
|
||||
```
|
||||
|
||||
### Проверка GitHub Actions (Метод 2)
|
||||
|
||||
1. GitHub Repository → Actions
|
||||
2. Смотрите последние запуски
|
||||
3. Проверьте логи выполнения
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Рекомендованная конфигурация
|
||||
|
||||
Для максимальной надежности используйте **комбинацию методов**:
|
||||
|
||||
1. **Git Hook** (основной) - мгновенная синхронизация
|
||||
2. **GitHub Actions** (резервный) - проверка каждый час на случай сбоя hook
|
||||
|
||||
### Установка обоих методов
|
||||
|
||||
```bash
|
||||
# 1. Установите Git Hook на сервере Gitea
|
||||
# (см. Метод 1)
|
||||
|
||||
# 2. Настройте GitHub Actions
|
||||
# (см. Метод 2)
|
||||
|
||||
# 3. GitHub Actions будет подхватывать пропущенные изменения
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Устранение проблем
|
||||
|
||||
### Проблема: Hook не срабатывает
|
||||
|
||||
**Проверка:**
|
||||
```bash
|
||||
# На сервере Gitea
|
||||
ls -la /path/to/repo.git/hooks/post-receive
|
||||
# Должно быть -rwxr-xr-x
|
||||
|
||||
# Проверьте права
|
||||
chmod +x /path/to/repo.git/hooks/post-receive
|
||||
chown git:git /path/to/repo.git/hooks/post-receive
|
||||
|
||||
# Проверьте лог ошибок Gitea
|
||||
tail -f /var/log/gitea/gitea.log
|
||||
```
|
||||
|
||||
### Проблема: Permission denied (SSH)
|
||||
|
||||
**Решение:**
|
||||
```bash
|
||||
# Убедитесь что SSH ключ добавлен в GitHub
|
||||
ssh -T git@github.com
|
||||
|
||||
# Проверьте права на .ssh
|
||||
chmod 700 ~/.ssh
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
```
|
||||
|
||||
### Проблема: Authentication failed (HTTPS)
|
||||
|
||||
**Решение:**
|
||||
- Проверьте токен GitHub (должен иметь scope `repo`)
|
||||
- Токен не истёк
|
||||
- Правильный формат URL: `https://TOKEN@github.com/user/repo.git`
|
||||
|
||||
### Проблема: GitHub Actions не запускается
|
||||
|
||||
**Решение:**
|
||||
1. Проверьте секреты в Settings → Secrets
|
||||
2. Проверьте формат webhook от Gitea
|
||||
3. Запустите вручную для теста
|
||||
|
||||
---
|
||||
|
||||
## 📊 Сравнение методов
|
||||
|
||||
### Скорость синхронизации
|
||||
- **Git Hooks**: ⚡ < 1 секунды
|
||||
- **GitHub Actions (webhook)**: ⏱️ 10-30 секунд
|
||||
- **GitHub Actions (schedule)**: ⏱️ до 1 часа
|
||||
- **Gitea Mirror**: ⏱️ по расписанию
|
||||
|
||||
### Надежность
|
||||
- **Git Hooks**: ⭐⭐⭐⭐⭐ (при правильной настройке)
|
||||
- **GitHub Actions**: ⭐⭐⭐⭐⭐ (очень надежно)
|
||||
- **Gitea Mirror**: ⭐⭐⭐ (зависит от версии Gitea)
|
||||
- **Двойной Remote**: ⭐⭐ (требует ручного действия)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Итоговая рекомендация
|
||||
|
||||
Для проекта `configure_nginx_manager`:
|
||||
|
||||
**1. Основной метод: Git Hook**
|
||||
- Быстро
|
||||
- Надежно
|
||||
- Автоматически
|
||||
|
||||
**2. Резервный метод: GitHub Actions**
|
||||
- Проверка каждый час
|
||||
- Подхватит пропущенные изменения
|
||||
- Можно запустить вручную
|
||||
|
||||
**3. Мониторинг:**
|
||||
```bash
|
||||
# Еженедельная проверка
|
||||
git ls-remote origin | head -1
|
||||
git ls-remote github | head -1
|
||||
# SHA должны совпадать
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Быстрая установка
|
||||
|
||||
```bash
|
||||
# На сервере Gitea
|
||||
sudo su - git
|
||||
cd /path/to/gitea-repositories/username/configure_nginx_manager.git/hooks/
|
||||
|
||||
# Скачайте hook
|
||||
wget https://raw.githubusercontent.com/username/configure_nginx_manager/main/gitea-hooks/post-receive
|
||||
|
||||
# Настройте
|
||||
nano post-receive
|
||||
# Измените GITHUB_REPO
|
||||
|
||||
# Права
|
||||
chmod +x post-receive
|
||||
|
||||
# Тест
|
||||
echo "test" | ./post-receive
|
||||
```
|
||||
|
||||
Готово! 🎉
|
||||
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
|
||||
```
|
||||
258
docs/ru/PROJECT_STRUCTURE.md
Normal file
258
docs/ru/PROJECT_STRUCTURE.md
Normal file
@@ -0,0 +1,258 @@
|
||||
# 📁 Структура проекта configure_nginx_manager
|
||||
|
||||
## Основные скрипты
|
||||
|
||||
### Python (Рекомендуется)
|
||||
- **letsencrypt_regru_api.py** (1,411 строк)
|
||||
- Полнофункциональный Python скрипт
|
||||
- Прямая работа с API reg.ru
|
||||
- Интеграция с Nginx Proxy Manager
|
||||
- Автоматическая проверка и обновление сертификатов
|
||||
- Генерация тестовых самоподписанных сертификатов
|
||||
- Поддержка wildcard доменов
|
||||
|
||||
### Bash
|
||||
- **letsencrypt_regru_dns.sh**
|
||||
- Bash скрипт с certbot-dns-regru плагином
|
||||
- Простота использования
|
||||
- Минимальные зависимости
|
||||
|
||||
### PowerShell
|
||||
- **letsencrypt_regru.ps1**
|
||||
- Windows версия
|
||||
- Аналогична Bash скрипту
|
||||
|
||||
### Тестирование
|
||||
- **test_certificate.sh**
|
||||
- Быстрое создание тестовых сертификатов через OpenSSL
|
||||
- Автономная работа без Python
|
||||
- Поддержка wildcard доменов
|
||||
|
||||
## Автоматизация
|
||||
|
||||
### Makefile
|
||||
- **Makefile** (415 строк)
|
||||
- `make install` - Полная установка и настройка
|
||||
- `make uninstall` - Чистое удаление
|
||||
- `make status` - Проверка состояния
|
||||
- `make test-cert` - Создание тестового сертификата
|
||||
- `make obtain` - Получение Let's Encrypt сертификата
|
||||
- `make renew` - Обновление сертификата
|
||||
- `make logs` - Просмотр логов
|
||||
- `make check-config` - Валидация конфигурации
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### config.json.example
|
||||
Пример конфигурации со всеми параметрами:
|
||||
- Учетные данные reg.ru API
|
||||
- Настройки домена и email
|
||||
- Параметры обновления (renewal_days)
|
||||
- Настройки Nginx Proxy Manager
|
||||
- Пути к директориям и логам
|
||||
|
||||
## Документация
|
||||
|
||||
### README.md (1,420+ строк)
|
||||
Основная документация:
|
||||
- Введение и возможности
|
||||
- Быстрый старт
|
||||
- Установка через Makefile
|
||||
- Создание тестовых сертификатов
|
||||
- Требования и установка зависимостей
|
||||
- Настройка и использование
|
||||
- Интеграция с NPM
|
||||
- Автоматическая проверка и обновление
|
||||
- Автоматизация через cron/systemd
|
||||
- Устранение неполадок
|
||||
|
||||
### TESTING_GUIDE.md (370+ строк)
|
||||
Руководство по тестированию:
|
||||
- Зачем нужны тестовые сертификаты
|
||||
- Обход лимитов Let's Encrypt (5 в неделю)
|
||||
- Быстрый старт с тестовыми сертификатами
|
||||
- Сравнение методов создания
|
||||
- Использование в разработке
|
||||
- Автоматизация тестирования
|
||||
- Переход с тестовых на production
|
||||
- Частые вопросы
|
||||
- Примеры для CI/CD и Docker
|
||||
|
||||
### GITEA_SYNC.md
|
||||
Синхронизация Gitea → GitHub:
|
||||
- 4 метода синхронизации (Git Hooks, GitHub Actions, Gitea Mirror, Double Remote)
|
||||
- Пошаговые инструкции установки
|
||||
- Настройка SSH и токенов
|
||||
- Webhook интеграция
|
||||
- Устранение проблем
|
||||
- Сравнение методов
|
||||
|
||||
### CHEATSHEET.md
|
||||
Быстрая шпаргалка:
|
||||
- Основные команды
|
||||
- Workflow разработки
|
||||
- Сценарии использования
|
||||
- Частые ошибки и решения
|
||||
- Проверка и отладка
|
||||
|
||||
### PROJECT_STRUCTURE.md (этот файл)
|
||||
- Описание всех файлов проекта
|
||||
- Краткая характеристика каждого компонента
|
||||
|
||||
### CHANGELOG.md
|
||||
История изменений:
|
||||
- Версии и обновления
|
||||
- Новые возможности
|
||||
- Исправления
|
||||
- Roadmap
|
||||
|
||||
## Интеграция с Git
|
||||
|
||||
### .github/workflows/sync-from-gitea.yml
|
||||
GitHub Actions для синхронизации:
|
||||
- Автоматическая проверка каждый час
|
||||
- Webhook триггер от Gitea
|
||||
- Ручной запуск
|
||||
- Merge изменений из Gitea
|
||||
- Push в GitHub
|
||||
|
||||
### gitea-hooks/
|
||||
Git hooks для Gitea сервера:
|
||||
|
||||
**post-receive**
|
||||
- Автоматический push в GitHub после commit
|
||||
- Мгновенная синхронизация (< 1 секунды)
|
||||
- Логирование операций
|
||||
- Синхронизация тегов
|
||||
- Поддержка SSH и HTTPS
|
||||
|
||||
**README.md**
|
||||
- Инструкции по установке hook
|
||||
- Настройка аутентификации
|
||||
- Устранение проблем
|
||||
|
||||
## Вспомогательные файлы
|
||||
|
||||
### Markdown документы
|
||||
- **Add Let's Encrypt Certificate для провайдера reg.ru.md**
|
||||
- Первоначальные инструкции
|
||||
|
||||
- **Создание и продление SSL сертификата.md**
|
||||
- Дополнительная информация о процессе
|
||||
|
||||
## Возможности
|
||||
|
||||
### ✅ Основные
|
||||
- [x] Создание Let's Encrypt сертификатов через reg.ru DNS API
|
||||
- [x] Wildcard сертификаты (*.domain.com)
|
||||
- [x] Автоматическое обновление сертификатов
|
||||
- [x] DNS-01 валидация
|
||||
- [x] Интеграция с Nginx Proxy Manager
|
||||
- [x] Автоматическая загрузка/обновление в NPM
|
||||
|
||||
### ✅ Продвинутые
|
||||
- [x] Автоматическая проверка срока действия
|
||||
- [x] Настраиваемый порог обновления (renewal_days)
|
||||
- [x] Systemd service + timer
|
||||
- [x] Cron автоматизация
|
||||
- [x] Подробное логирование
|
||||
- [x] Валидация конфигурации
|
||||
|
||||
### 🆕 Тестирование
|
||||
- [x] Генерация самоподписанных тестовых сертификатов
|
||||
- [x] Обход лимитов Let's Encrypt (5/неделю)
|
||||
- [x] Мгновенное создание без DNS
|
||||
- [x] Интеграция тестовых сертификатов с NPM
|
||||
- [x] Полная совместимость структуры с Let's Encrypt
|
||||
|
||||
### 🔄 Синхронизация репозиториев
|
||||
- [x] Автоматическая синхронизация Gitea → GitHub
|
||||
- [x] Git Hooks (мгновенная синхронизация)
|
||||
- [x] GitHub Actions (проверка каждый час)
|
||||
- [x] Webhook интеграция
|
||||
- [x] SSH и HTTPS аутентификация
|
||||
|
||||
## Установка
|
||||
|
||||
### Быстрая установка
|
||||
```bash
|
||||
sudo make install
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
sudo make test-cert # Для тестирования
|
||||
sudo make obtain # Для production
|
||||
```
|
||||
|
||||
### Структура после установки
|
||||
```
|
||||
/opt/letsencrypt-regru/
|
||||
├── letsencrypt_regru_api.py
|
||||
|
||||
/etc/letsencrypt/
|
||||
├── regru_config.json
|
||||
└── live/
|
||||
└── example.com/
|
||||
├── privkey.pem
|
||||
├── cert.pem
|
||||
├── fullchain.pem
|
||||
└── chain.pem
|
||||
|
||||
/etc/systemd/system/
|
||||
├── letsencrypt-regru.service
|
||||
└── letsencrypt-regru.timer
|
||||
|
||||
/var/log/letsencrypt/
|
||||
└── letsencrypt_regru.log
|
||||
```
|
||||
|
||||
## Использование
|
||||
|
||||
### Тестирование (без лимитов)
|
||||
```bash
|
||||
sudo make test-cert # Создать тестовый сертификат
|
||||
sudo make status # Проверить статус
|
||||
```
|
||||
|
||||
### Production
|
||||
```bash
|
||||
sudo make obtain # Получить Let's Encrypt сертификат
|
||||
sudo make renew # Обновить сертификат
|
||||
sudo make run # Автоматический режим
|
||||
```
|
||||
|
||||
### Мониторинг
|
||||
```bash
|
||||
sudo make logs # Просмотр логов
|
||||
sudo make status # Статус служб
|
||||
sudo make check-config # Проверка конфигурации
|
||||
```
|
||||
|
||||
## Технологии
|
||||
|
||||
- **Python 3.6+** - Основной язык
|
||||
- **Certbot** - Let's Encrypt клиент
|
||||
- **requests** - HTTP запросы к API
|
||||
- **cryptography** - Генерация тестовых сертификатов
|
||||
- **systemd** - Автоматизация запуска
|
||||
- **cron** - Альтернативная автоматизация
|
||||
- **Make** - Управление установкой
|
||||
- **OpenSSL** - Альтернативная генерация сертификатов
|
||||
|
||||
## Лицензия
|
||||
|
||||
Open Source - свободное использование
|
||||
|
||||
## Автор
|
||||
|
||||
Фофанов Дмитрий @ 2025
|
||||
|
||||
## Поддержка
|
||||
|
||||
См. документацию:
|
||||
- [README.md](README.md) - Основное руководство
|
||||
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - Руководство по тестированию
|
||||
|
||||
---
|
||||
|
||||
**Версия**: 2.1
|
||||
**Дата**: 27 октября 2025
|
||||
**Статус**: ✅ Production Ready
|
||||
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) - Руководство по сборке
|
||||
382
docs/ru/TESTING_GUIDE.md
Normal file
382
docs/ru/TESTING_GUIDE.md
Normal file
@@ -0,0 +1,382 @@
|
||||
# 🧪 Руководство по тестированию SSL сертификатов
|
||||
|
||||
## Зачем нужны тестовые сертификаты?
|
||||
|
||||
Let's Encrypt имеет **строгие ограничения**:
|
||||
- ⚠️ Максимум **5 сертификатов в неделю** на один домен
|
||||
- ⚠️ Максимум **50 сертификатов в неделю** на аккаунт
|
||||
- ⚠️ **Бан на 1 неделю** при превышении лимита
|
||||
|
||||
**Решение**: Используйте самоподписанные тестовые сертификаты для разработки!
|
||||
|
||||
---
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
### Вариант 1: Через Makefile (рекомендуется)
|
||||
|
||||
```bash
|
||||
# После установки скрипта (make install)
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
**Результат**: Создан сертификат в `/etc/letsencrypt/live/ваш-домен/`
|
||||
|
||||
### Вариант 2: Через Python скрипт
|
||||
|
||||
```bash
|
||||
sudo python3 letsencrypt_regru_api.py \
|
||||
--config /etc/letsencrypt/regru_config.json \
|
||||
--test-cert -v
|
||||
```
|
||||
|
||||
### Вариант 3: Через Bash скрипт (автономный)
|
||||
|
||||
```bash
|
||||
# Простой домен
|
||||
sudo ./test_certificate.sh example.com no
|
||||
|
||||
# С wildcard
|
||||
sudo ./test_certificate.sh example.com yes
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Сравнение методов
|
||||
|
||||
| Метод | Скорость | Требования | NPM интеграция | Лимиты |
|
||||
|-------|----------|------------|----------------|--------|
|
||||
| **Let's Encrypt** | 2-5 минут | Internet, DNS | ✅ Да | ⚠️ 5/неделю |
|
||||
| **Тестовый (Python)** | 1-2 секунды | Только Python | ✅ Да | ✅ Нет |
|
||||
| **Тестовый (Bash)** | 1-2 секунды | Только OpenSSL | ❌ Ручная | ✅ Нет |
|
||||
|
||||
---
|
||||
|
||||
## Детальная инструкция
|
||||
|
||||
### 1. Подготовка конфигурации
|
||||
|
||||
```bash
|
||||
# Создать конфигурацию
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"domain": "test.example.com",
|
||||
"wildcard": true,
|
||||
"cert_dir": "/etc/letsencrypt/live",
|
||||
"npm_enabled": true,
|
||||
"npm_host": "https://npm.example.com",
|
||||
"npm_email": "admin@example.com",
|
||||
"npm_password": "your_password"
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Создание тестового сертификата
|
||||
|
||||
```bash
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
### 3. Проверка созданных файлов
|
||||
|
||||
```bash
|
||||
ls -la /etc/letsencrypt/live/test.example.com/
|
||||
# Должны быть:
|
||||
# - privkey.pem (приватный ключ)
|
||||
# - cert.pem (сертификат)
|
||||
# - fullchain.pem (полная цепочка)
|
||||
# - chain.pem (CA цепочка)
|
||||
```
|
||||
|
||||
### 4. Просмотр информации о сертификате
|
||||
|
||||
```bash
|
||||
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -text -noout
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Использование в Nginx
|
||||
|
||||
### Прямое использование
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name test.example.com;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/test.example.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/test.example.com/privkey.pem;
|
||||
|
||||
# ... остальная конфигурация
|
||||
}
|
||||
```
|
||||
|
||||
### Через Nginx Proxy Manager
|
||||
|
||||
Если `npm_enabled: true` в конфигурации, сертификат автоматически загрузится в NPM.
|
||||
|
||||
**Проверка в NPM:**
|
||||
1. Откройте веб-интерфейс NPM
|
||||
2. Перейдите в **SSL Certificates**
|
||||
3. Найдите ваш домен в списке
|
||||
4. ⚠️ Будет помечен как "Custom" (не Let's Encrypt)
|
||||
|
||||
---
|
||||
|
||||
## Автоматизация тестирования
|
||||
|
||||
### Скрипт для CI/CD
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# test_ssl_integration.sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "🧪 Тестирование SSL интеграции..."
|
||||
|
||||
# 1. Создать тестовый сертификат
|
||||
sudo python3 letsencrypt_regru_api.py \
|
||||
--config test_config.json \
|
||||
--test-cert
|
||||
|
||||
# 2. Проверить файлы
|
||||
if [ ! -f "/etc/letsencrypt/live/test.example.com/fullchain.pem" ]; then
|
||||
echo "❌ Сертификат не создан"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. Проверить валидность
|
||||
openssl x509 -in /etc/letsencrypt/live/test.example.com/cert.pem -noout -checkend 0
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Сертификат валиден"
|
||||
else
|
||||
echo "❌ Сертификат невалиден"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 4. Проверить загрузку в NPM (опционально)
|
||||
# ... ваша проверка через API NPM
|
||||
|
||||
echo "✅ Все тесты пройдены"
|
||||
```
|
||||
|
||||
### Makefile для тестирования
|
||||
|
||||
```makefile
|
||||
.PHONY: test-ssl test-npm test-all
|
||||
|
||||
test-ssl:
|
||||
@echo "Создание тестового сертификата..."
|
||||
sudo make test-cert
|
||||
@echo "Проверка файлов..."
|
||||
test -f /etc/letsencrypt/live/$(DOMAIN)/fullchain.pem
|
||||
@echo "✅ SSL тест пройден"
|
||||
|
||||
test-npm:
|
||||
@echo "Проверка интеграции с NPM..."
|
||||
# Ваши проверки API NPM
|
||||
@echo "✅ NPM тест пройден"
|
||||
|
||||
test-all: test-ssl test-npm
|
||||
@echo "✅ Все тесты пройдены"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Переход на production
|
||||
|
||||
### Шаг 1: Тестирование
|
||||
|
||||
```bash
|
||||
# 1. Создать тестовый сертификат
|
||||
sudo make test-cert
|
||||
|
||||
# 2. Проверить работу с NPM
|
||||
# Открыть https://ваш-домен и проверить
|
||||
|
||||
# 3. Убедиться что все работает
|
||||
```
|
||||
|
||||
### Шаг 2: Переключение на Let's Encrypt
|
||||
|
||||
```bash
|
||||
# 1. Удалить тестовый сертификат
|
||||
sudo rm -rf /etc/letsencrypt/live/ваш-домен/
|
||||
|
||||
# 2. Получить настоящий сертификат
|
||||
sudo make obtain
|
||||
|
||||
# 3. Проверить обновление в NPM
|
||||
sudo make status
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Частые вопросы
|
||||
|
||||
### Q: Почему браузер показывает предупреждение?
|
||||
|
||||
**A:** Самоподписанные сертификаты не доверяются браузерами. Это нормально для тестирования.
|
||||
|
||||
Чтобы избежать предупреждения в браузере (только для локального тестирования):
|
||||
1. Chrome: `chrome://flags/#allow-insecure-localhost`
|
||||
2. Firefox: Нажмите "Advanced" → "Accept the Risk"
|
||||
|
||||
### Q: Можно ли использовать для production?
|
||||
|
||||
**A:** ❌ **НЕТ!** Тестовые сертификаты только для разработки и тестирования.
|
||||
|
||||
### Q: Как часто можно создавать тестовые сертификаты?
|
||||
|
||||
**A:** ✅ Неограниченно! Нет никаких лимитов.
|
||||
|
||||
### Q: Загружаются ли в NPM автоматически?
|
||||
|
||||
**A:** ✅ Да, если `npm_enabled: true` в конфигурации.
|
||||
|
||||
### Q: Работают ли с wildcard доменами?
|
||||
|
||||
**A:** ✅ Да! Просто установите `"wildcard": true` в конфигурации.
|
||||
|
||||
### Q: Как проверить срок действия?
|
||||
|
||||
```bash
|
||||
openssl x509 -in /etc/letsencrypt/live/ваш-домен/cert.pem -noout -dates
|
||||
```
|
||||
|
||||
### Q: Как изменить срок действия?
|
||||
|
||||
Отредактируйте `validity_days` в функции `generate_self_signed_certificate()`:
|
||||
|
||||
```python
|
||||
validity_days: int = 365 # Изменить на нужное количество дней
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Устранение проблем
|
||||
|
||||
### Ошибка: Permission denied
|
||||
|
||||
```bash
|
||||
# Запускайте с sudo
|
||||
sudo make test-cert
|
||||
```
|
||||
|
||||
### Ошибка: Module 'cryptography' not found
|
||||
|
||||
```bash
|
||||
# Установите зависимости
|
||||
sudo pip3 install cryptography
|
||||
```
|
||||
|
||||
### NPM не показывает сертификат
|
||||
|
||||
1. Проверьте настройки NPM в конфигурации
|
||||
2. Проверьте логи: `sudo make logs`
|
||||
3. Попробуйте загрузить вручную через веб-интерфейс NPM
|
||||
|
||||
### Сертификат не создается
|
||||
|
||||
```bash
|
||||
# Проверьте права
|
||||
ls -la /etc/letsencrypt/live/
|
||||
|
||||
# Создайте директорию вручную
|
||||
sudo mkdir -p /etc/letsencrypt/live/
|
||||
|
||||
# Проверьте конфигурацию
|
||||
sudo make check-config
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Примеры использования
|
||||
|
||||
### Разработка с Docker
|
||||
|
||||
```dockerfile
|
||||
FROM nginx:alpine
|
||||
|
||||
# Копировать тестовый сертификат
|
||||
COPY test-certs/ /etc/nginx/ssl/
|
||||
|
||||
# Конфигурация nginx
|
||||
COPY nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
EXPOSE 443
|
||||
```
|
||||
|
||||
### Локальное тестирование
|
||||
|
||||
```bash
|
||||
# Создать сертификат для localhost
|
||||
sudo python3 letsencrypt_regru_api.py --test-cert
|
||||
|
||||
# Добавить в /etc/hosts
|
||||
echo "127.0.0.1 test.example.com" | sudo tee -a /etc/hosts
|
||||
|
||||
# Запустить nginx
|
||||
sudo nginx -t && sudo nginx -s reload
|
||||
|
||||
# Открыть в браузере
|
||||
open https://test.example.com
|
||||
```
|
||||
|
||||
### Автоматическое тестирование перед deployment
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# pre-deploy.sh
|
||||
|
||||
# Тестовая проверка SSL
|
||||
sudo make test-cert
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Тестовый сертификат создан успешно"
|
||||
echo "✅ Готово к созданию production сертификата"
|
||||
sudo make obtain
|
||||
else
|
||||
echo "❌ Ошибка при создании тестового сертификата"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Дополнительные ресурсы
|
||||
|
||||
- 📘 [Let's Encrypt Rate Limits](https://letsencrypt.org/docs/rate-limits/)
|
||||
- 📘 [OpenSSL Documentation](https://www.openssl.org/docs/)
|
||||
- 📘 [Nginx Proxy Manager Docs](https://nginxproxymanager.com/guide/)
|
||||
|
||||
---
|
||||
|
||||
## Итоговая шпаргалка
|
||||
|
||||
```bash
|
||||
# Установка
|
||||
sudo make install
|
||||
|
||||
# Конфигурация
|
||||
sudo nano /etc/letsencrypt/regru_config.json
|
||||
|
||||
# Создать тестовый сертификат
|
||||
sudo make test-cert
|
||||
|
||||
# Проверить
|
||||
sudo make check-config
|
||||
sudo make status
|
||||
|
||||
# Переход на production
|
||||
sudo rm -rf /etc/letsencrypt/live/домен/
|
||||
sudo make obtain
|
||||
|
||||
# Автоматическое обновление
|
||||
sudo make run
|
||||
```
|
||||
|
||||
**Готово!** 🎉 Теперь вы можете тестировать SSL сертификаты без ограничений!
|
||||
Reference in New Issue
Block a user