416 lines
9.2 KiB
Markdown
416 lines
9.2 KiB
Markdown
# 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 global command with multiple functions is available:
|
|
|
|
### 🔧 Main Commands
|
|
|
|
```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
|
|
```
|
|
|
|
### 🧪 Diagnostic and Testing Commands
|
|
|
|
```bash
|
|
# Check API access to reg.ru
|
|
# - Shows current IP address
|
|
# - Tests API connection
|
|
# - Displays account balance
|
|
letsencrypt-regru --test-api
|
|
|
|
# Test DNS TXT record creation
|
|
# - Full SSL certification process simulation
|
|
# - Creates temporary _acme-challenge TXT record
|
|
# - Waits for DNS propagation (60 seconds)
|
|
# - Verifies via public DNS servers
|
|
# - Automatically removes test record
|
|
letsencrypt-regru --test-dns
|
|
|
|
# Show help for all commands
|
|
letsencrypt-regru --help
|
|
|
|
# Enable verbose output
|
|
letsencrypt-regru --obtain -v
|
|
letsencrypt-regru --check -v
|
|
```
|
|
|
|
### ⚙️ Service Commands (internal use)
|
|
|
|
```bash
|
|
# Certbot authentication hook (used by certbot automatically)
|
|
letsencrypt-regru --auth-hook
|
|
|
|
# Certbot cleanup hook (used by certbot automatically)
|
|
letsencrypt-regru --cleanup-hook
|
|
```
|
|
|
|
### 📋 Command Reference
|
|
|
|
| Command | Description | Use Case |
|
|
|---------|-------------|----------|
|
|
| `--check` | Check certificate expiration | Regular monitoring |
|
|
| `--obtain` | Obtain new certificate from Let's Encrypt | Initial creation |
|
|
| `--renew` | Renew existing certificate | Renewal |
|
|
| `--auto` | Automatic check and renewal | For cron/systemd |
|
|
| `--test-cert` | Create test self-signed certificate | Development/testing |
|
|
| `--test-api` | Check API access to reg.ru | Connection diagnostics |
|
|
| `--test-dns` | Test DNS record creation | Pre-SSL verification |
|
|
| `--auth-hook` | Certbot hook (DNS creation) | Internal |
|
|
| `--cleanup-hook` | Certbot hook (DNS deletion) | Internal |
|
|
| `--help` | Show help | Help |
|
|
| `-v` | Verbose output | Debugging |
|
|
|
|
## 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
|