Обновлено руководство по использованию letsencrypt_regru.sh: добавлены шаги для автоматической установки и настройки приложения, а также улучшена структура документации.
Добавлен новый файл INSTALL_GUIDE.md с подробным описанием установки и использования. Обновлен скрипт letsencrypt_regru.sh: добавлены функции для установки зависимостей, создания конфигурации и настройки systemd сервиса. Созданы файлы systemd для автоматического обновления сертификатов: letsencrypt-regru.service и letsencrypt-regru.timer. Обновлен файл README.md с новыми разделами и улучшенной структурой.
This commit is contained in:
124
README.md
124
README.md
@@ -15,18 +15,19 @@ Python скрипт теперь автоматически загружает
|
||||
|
||||
## Содержание
|
||||
1. [Введение](#введение)
|
||||
2. [Быстрый старт](#-быстрый-старт)
|
||||
3. [Установка через Makefile](#-установка-через-makefile)
|
||||
4. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
|
||||
5. [Требования](#требования)
|
||||
6. [Установка зависимостей](#установка-зависимостей)
|
||||
7. [Настройка](#настройка)
|
||||
8. [Использование Bash скрипта](#использование-bash-скрипта)
|
||||
9. [Использование Python скрипта](#использование-python-скрипта)
|
||||
10. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
|
||||
11. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
|
||||
12. [Автоматизация обновления](#автоматизация-обновления)
|
||||
13. [Устранение неполадок](#устранение-неполадок)
|
||||
2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush)
|
||||
3. [Быстрый старт](#-быстрый-старт)
|
||||
4. [Установка через Makefile](#-установка-через-makefile)
|
||||
5. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
|
||||
6. [Требования](#требования)
|
||||
7. [Установка зависимостей](#установка-зависимостей)
|
||||
8. [Настройка](#настройка)
|
||||
9. [Использование Bash скрипта](#использование-bash-скрипта)
|
||||
10. [Использование Python скрипта](#использование-python-скрипта)
|
||||
11. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
|
||||
12. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
|
||||
13. [Автоматизация обновления](#автоматизация-обновления)
|
||||
14. [Устранение неполадок](#устранение-неполадок)
|
||||
|
||||
---
|
||||
|
||||
@@ -51,6 +52,105 @@ Python скрипт теперь автоматически загружает
|
||||
|
||||
---
|
||||
|
||||
## ⚡ Быстрая установка (letsencrypt_regru.sh)
|
||||
|
||||
**Автоматическая установка всего приложения одной командой!**
|
||||
|
||||
Скрипт `letsencrypt_regru.sh` автоматизирует весь процесс развертывания:
|
||||
- ✅ Установка всех зависимостей (Python, certbot, библиотеки)
|
||||
- ✅ Создание виртуального окружения Python
|
||||
- ✅ Интерактивная настройка конфигурации
|
||||
- ✅ Настройка systemd для автоматического обновления
|
||||
- ✅ Создание удобных команд
|
||||
|
||||
### Установка
|
||||
|
||||
```bash
|
||||
# 1. Клонируйте репозиторий
|
||||
git clone https://github.com/YOUR_USERNAME/configure_nginx_manager.git
|
||||
cd configure_nginx_manager
|
||||
|
||||
# 2. Запустите установку
|
||||
sudo bash letsencrypt_regru.sh
|
||||
|
||||
# Скрипт спросит:
|
||||
# - Домен (например, example.com)
|
||||
# - Email для Let's Encrypt
|
||||
# - Учетные данные reg.ru
|
||||
# - Настройки NPM (опционально)
|
||||
```
|
||||
|
||||
### Использование после установки
|
||||
|
||||
После установки доступна глобальная команда `letsencrypt-regru`:
|
||||
|
||||
```bash
|
||||
# Проверить срок действия сертификата
|
||||
letsencrypt-regru --check
|
||||
|
||||
# Получить новый сертификат Let's Encrypt
|
||||
letsencrypt-regru --obtain
|
||||
|
||||
# Обновить существующий сертификат
|
||||
letsencrypt-regru --renew
|
||||
|
||||
# Создать тестовый самоподписанный сертификат
|
||||
letsencrypt-regru --test-cert
|
||||
|
||||
# Автоматическая проверка и обновление при необходимости
|
||||
letsencrypt-regru --auto
|
||||
```
|
||||
|
||||
### Автоматическое обновление
|
||||
|
||||
Скрипт установки настраивает автоматическую проверку сертификатов каждые 12 часов:
|
||||
|
||||
```bash
|
||||
# Проверить статус автообновления
|
||||
systemctl status letsencrypt-regru.timer
|
||||
|
||||
# Посмотреть логи
|
||||
journalctl -u letsencrypt-regru -f
|
||||
|
||||
# Или в файле
|
||||
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||
```
|
||||
|
||||
### Управление установкой
|
||||
|
||||
```bash
|
||||
# Обновить приложение до последней версии
|
||||
sudo bash letsencrypt_regru.sh update
|
||||
|
||||
# Полностью удалить приложение
|
||||
sudo bash letsencrypt_regru.sh uninstall
|
||||
```
|
||||
|
||||
### Расположение файлов
|
||||
|
||||
После установки файлы находятся:
|
||||
|
||||
| Тип | Путь |
|
||||
|-----|------|
|
||||
| Приложение | `/opt/letsencrypt-regru/` |
|
||||
| Конфигурация | `/etc/letsencrypt-regru/config.json` |
|
||||
| Логи | `/var/log/letsencrypt-regru/` |
|
||||
| Сертификаты | `/etc/letsencrypt/live/` |
|
||||
| Systemd сервис | `/etc/systemd/system/letsencrypt-regru.service` |
|
||||
| Systemd таймер | `/etc/systemd/system/letsencrypt-regru.timer` |
|
||||
|
||||
### Редактирование конфигурации
|
||||
|
||||
```bash
|
||||
# Отредактировать настройки
|
||||
sudo nano /etc/letsencrypt-regru/config.json
|
||||
|
||||
# Перезапустить таймер после изменений
|
||||
sudo systemctl restart letsencrypt-regru.timer
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Установка через Makefile
|
||||
|
||||
**Самый быстрый способ установки на Linux!**
|
||||
|
||||
348
docs/INSTALL_GUIDE.md
Normal file
348
docs/INSTALL_GUIDE.md
Normal file
@@ -0,0 +1,348 @@
|
||||
# Руководство по использованию letsencrypt_regru.sh
|
||||
|
||||
**Автор:** Фофанов Дмитрий
|
||||
**Дата:** 28.10.2025
|
||||
|
||||
## Описание
|
||||
|
||||
`letsencrypt_regru.sh` - это автоматический установщик для Let's Encrypt Manager с интеграцией reg.ru и Nginx Proxy Manager.
|
||||
|
||||
Скрипт автоматизирует:
|
||||
- Установку всех системных зависимостей
|
||||
- Создание виртуального окружения Python
|
||||
- Установку Python библиотек (requests, cryptography, certbot)
|
||||
- Интерактивную настройку конфигурации
|
||||
- Создание и настройку systemd сервисов
|
||||
- Настройку автоматического обновления сертификатов
|
||||
|
||||
## Требования
|
||||
|
||||
- Linux (Debian/Ubuntu, CentOS/RHEL/Fedora)
|
||||
- Root доступ (sudo)
|
||||
- Минимум 512MB RAM
|
||||
- Минимум 1GB свободного места на диске
|
||||
- Интернет соединение
|
||||
|
||||
## Быстрая установка
|
||||
|
||||
```bash
|
||||
# 1. Скачайте репозиторий
|
||||
git clone https://github.com/YOUR_USERNAME/configure_nginx_manager.git
|
||||
cd configure_nginx_manager
|
||||
|
||||
# 2. Дайте права на выполнение
|
||||
chmod +x letsencrypt_regru.sh
|
||||
|
||||
# 3. Запустите установку
|
||||
sudo ./letsencrypt_regru.sh
|
||||
```
|
||||
|
||||
## Интерактивная настройка
|
||||
|
||||
Во время установки скрипт спросит:
|
||||
|
||||
1. **Домен** - ваш основной домен (например, `example.com`)
|
||||
2. **Email** - для уведомлений Let's Encrypt
|
||||
3. **Учетные данные reg.ru:**
|
||||
- Имя пользователя
|
||||
- Пароль
|
||||
4. **Wildcard сертификат** - создавать ли `*.example.com` (рекомендуется: Да)
|
||||
5. **Интеграция с NPM** (опционально):
|
||||
- Адрес NPM (например, `http://192.168.10.14:81`)
|
||||
- Email для входа в NPM
|
||||
- Пароль NPM
|
||||
|
||||
## Структура после установки
|
||||
|
||||
```
|
||||
/opt/letsencrypt-regru/ # Приложение
|
||||
├── letsencrypt_regru_api.py # Основной скрипт
|
||||
├── venv/ # Виртуальное окружение Python
|
||||
└── docs/ # Документация
|
||||
|
||||
/etc/letsencrypt-regru/ # Конфигурация
|
||||
└── config.json # Настройки (credentials, домен, NPM)
|
||||
|
||||
/var/log/letsencrypt-regru/ # Логи
|
||||
└── letsencrypt_regru.log
|
||||
|
||||
/etc/letsencrypt/live/ # Сертификаты Let's Encrypt
|
||||
└── example.com/
|
||||
├── privkey.pem
|
||||
├── cert.pem
|
||||
├── chain.pem
|
||||
└── fullchain.pem
|
||||
|
||||
/etc/systemd/system/ # Systemd сервисы
|
||||
├── letsencrypt-regru.service # Сервис обновления
|
||||
└── letsencrypt-regru.timer # Таймер (каждые 12 часов)
|
||||
|
||||
/usr/local/bin/
|
||||
└── letsencrypt-regru # Глобальная команда
|
||||
```
|
||||
|
||||
## Использование команды letsencrypt-regru
|
||||
|
||||
После установки доступна удобная команда:
|
||||
|
||||
```bash
|
||||
# Проверить срок действия текущего сертификата
|
||||
letsencrypt-regru --check
|
||||
|
||||
# Получить новый сертификат Let's Encrypt
|
||||
letsencrypt-regru --obtain
|
||||
|
||||
# Обновить существующий сертификат
|
||||
letsencrypt-regru --renew
|
||||
|
||||
# Автоматически проверить и обновить при необходимости
|
||||
letsencrypt-regru --auto
|
||||
|
||||
# Создать тестовый самоподписанный сертификат
|
||||
letsencrypt-regru --test-cert
|
||||
|
||||
# Показать справку
|
||||
letsencrypt-regru --help
|
||||
```
|
||||
|
||||
## Автоматическое обновление
|
||||
|
||||
Установщик настраивает systemd timer для автоматической проверки:
|
||||
|
||||
```bash
|
||||
# Проверить статус таймера
|
||||
systemctl status letsencrypt-regru.timer
|
||||
|
||||
# Когда следующий запуск
|
||||
systemctl list-timers letsencrypt-regru.timer
|
||||
|
||||
# Посмотреть историю запусков
|
||||
journalctl -u letsencrypt-regru
|
||||
|
||||
# Следить за логами в реальном времени
|
||||
journalctl -u letsencrypt-regru -f
|
||||
```
|
||||
|
||||
### Настройки таймера
|
||||
|
||||
По умолчанию:
|
||||
- Первый запуск: через 15 минут после загрузки системы
|
||||
- Периодичность: каждые 12 часов
|
||||
- Случайная задержка: до 1 часа (чтобы не создавать нагрузку)
|
||||
|
||||
Изменить можно в `/etc/systemd/system/letsencrypt-regru.timer`.
|
||||
|
||||
## Редактирование конфигурации
|
||||
|
||||
```bash
|
||||
# Открыть конфигурацию в редакторе
|
||||
sudo nano /etc/letsencrypt-regru/config.json
|
||||
|
||||
# После изменений перезапустите таймер
|
||||
sudo systemctl restart letsencrypt-regru.timer
|
||||
```
|
||||
|
||||
### Пример 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://192.168.10.14:81",
|
||||
"npm_email": "admin@npm.local",
|
||||
"npm_password": "secure_password"
|
||||
}
|
||||
```
|
||||
|
||||
## Обновление приложения
|
||||
|
||||
```bash
|
||||
# Скачайте последнюю версию
|
||||
cd configure_nginx_manager
|
||||
git pull
|
||||
|
||||
# Запустите обновление
|
||||
sudo ./letsencrypt_regru.sh update
|
||||
```
|
||||
|
||||
Обновление:
|
||||
- Остановит таймер
|
||||
- Обновит скрипт
|
||||
- Обновит Python зависимости
|
||||
- Перезапустит таймер
|
||||
|
||||
## Удаление
|
||||
|
||||
```bash
|
||||
# Полное удаление приложения
|
||||
sudo ./letsencrypt_regru.sh uninstall
|
||||
```
|
||||
|
||||
Скрипт удалит:
|
||||
- Приложение из `/opt/letsencrypt-regru/`
|
||||
- Systemd сервисы
|
||||
- Глобальную команду
|
||||
|
||||
Сертификаты в `/etc/letsencrypt/live/` сохраняются!
|
||||
|
||||
Опционально можно удалить:
|
||||
- Конфигурацию `/etc/letsencrypt-regru/`
|
||||
- Логи `/var/log/letsencrypt-regru/`
|
||||
|
||||
## Просмотр логов
|
||||
|
||||
```bash
|
||||
# Логи systemd (рекомендуется)
|
||||
journalctl -u letsencrypt-regru -f
|
||||
|
||||
# Файл лога
|
||||
tail -f /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||
|
||||
# Последние 100 строк
|
||||
tail -n 100 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||
```
|
||||
|
||||
## Устранение проблем
|
||||
|
||||
### Проверка установки
|
||||
|
||||
```bash
|
||||
# Проверить наличие команды
|
||||
which letsencrypt-regru
|
||||
|
||||
# Проверить Python окружение
|
||||
ls -la /opt/letsencrypt-regru/venv/
|
||||
|
||||
# Проверить systemd сервисы
|
||||
systemctl list-unit-files | grep letsencrypt-regru
|
||||
```
|
||||
|
||||
### Ошибки при установке
|
||||
|
||||
**Ошибка: "Permission denied"**
|
||||
```bash
|
||||
# Запустите с sudo
|
||||
sudo ./letsencrypt_regru.sh
|
||||
```
|
||||
|
||||
**Ошибка: "Package not found"**
|
||||
```bash
|
||||
# Обновите списки пакетов
|
||||
sudo apt-get update # Debian/Ubuntu
|
||||
sudo yum update # CentOS/RHEL
|
||||
```
|
||||
|
||||
**Ошибка: "Python module not found"**
|
||||
```bash
|
||||
# Переустановите виртуальное окружение
|
||||
sudo rm -rf /opt/letsencrypt-regru/venv
|
||||
sudo ./letsencrypt_regru.sh
|
||||
```
|
||||
|
||||
### Проблемы с сертификатами
|
||||
|
||||
**Сертификат не создается**
|
||||
```bash
|
||||
# Проверьте логи
|
||||
tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||
|
||||
# Проверьте конфигурацию
|
||||
cat /etc/letsencrypt-regru/config.json
|
||||
|
||||
# Попробуйте вручную
|
||||
letsencrypt-regru --obtain -v
|
||||
```
|
||||
|
||||
**DNS не обновляется**
|
||||
```bash
|
||||
# Увеличьте время ожидания в config.json
|
||||
"dns_propagation_wait": 120,
|
||||
"dns_check_attempts": 20
|
||||
```
|
||||
|
||||
### Проблемы с NPM
|
||||
|
||||
**Не загружается в NPM**
|
||||
```bash
|
||||
# Проверьте доступность NPM
|
||||
curl http://192.168.10.14:81
|
||||
|
||||
# Проверьте учетные данные в config.json
|
||||
# Попробуйте вручную
|
||||
letsencrypt-regru --test-cert -v
|
||||
```
|
||||
|
||||
## Поддерживаемые ОС
|
||||
|
||||
✅ Debian 10, 11, 12
|
||||
✅ Ubuntu 20.04, 22.04, 24.04
|
||||
✅ CentOS 7, 8
|
||||
✅ RHEL 7, 8, 9
|
||||
✅ Fedora 35+
|
||||
|
||||
## Дополнительные возможности
|
||||
|
||||
### Тестовый сертификат
|
||||
|
||||
Для тестирования без лимитов Let's Encrypt:
|
||||
|
||||
```bash
|
||||
letsencrypt-regru --test-cert
|
||||
```
|
||||
|
||||
Создаст самоподписанный сертификат на 90 дней.
|
||||
|
||||
### Ручной запуск обновления
|
||||
|
||||
```bash
|
||||
# Запустить сервис вручную
|
||||
sudo systemctl start letsencrypt-regru.service
|
||||
|
||||
# Посмотреть статус
|
||||
systemctl status letsencrypt-regru.service
|
||||
```
|
||||
|
||||
### Изменить периодичность проверки
|
||||
|
||||
Отредактируйте `/etc/systemd/system/letsencrypt-regru.timer`:
|
||||
|
||||
```ini
|
||||
[Timer]
|
||||
# Каждые 6 часов вместо 12
|
||||
OnUnitActiveSec=6h
|
||||
```
|
||||
|
||||
Затем:
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart letsencrypt-regru.timer
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
- Конфигурация с паролями имеет права `600` (только root)
|
||||
- Приватные ключи сертификатов имеют права `600`
|
||||
- Все операции выполняются от root
|
||||
- Логи доступны только root
|
||||
|
||||
## Поддержка
|
||||
|
||||
- GitHub Issues: https://github.com/YOUR_USERNAME/configure_nginx_manager/issues
|
||||
- Документация: `/opt/letsencrypt-regru/docs/`
|
||||
- Email: admin@dfv24.com
|
||||
|
||||
---
|
||||
|
||||
**Разработано:** Фофанов Дмитрий
|
||||
**Дата:** 28.10.2025
|
||||
**Версия:** 2.0
|
||||
518
letsencrypt_regru.sh
Normal file
518
letsencrypt_regru.sh
Normal file
@@ -0,0 +1,518 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# ==============================================================================
|
||||
# Скрипт автоматической установки Let's Encrypt Manager для reg.ru
|
||||
# Автор: Фофанов Дмитрий
|
||||
# Дата: 28.10.2025
|
||||
# ==============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Цвета для вывода
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Конфигурация по умолчанию
|
||||
APP_NAME="Let's Encrypt Manager"
|
||||
APP_DIR="/opt/letsencrypt-regru"
|
||||
CONFIG_DIR="/etc/letsencrypt-regru"
|
||||
LOG_DIR="/var/log/letsencrypt-regru"
|
||||
CERT_DIR="/etc/letsencrypt/live"
|
||||
VENV_DIR="${APP_DIR}/venv"
|
||||
PYTHON_VERSION="3"
|
||||
|
||||
# ==============================================================================
|
||||
# Вспомогательные функции
|
||||
# ==============================================================================
|
||||
|
||||
msg_info() {
|
||||
echo -e "${BLUE}ℹ ${NC}$1"
|
||||
}
|
||||
|
||||
msg_ok() {
|
||||
echo -e "${GREEN}✓${NC} $1"
|
||||
}
|
||||
|
||||
msg_error() {
|
||||
echo -e "${RED}✗${NC} $1"
|
||||
}
|
||||
|
||||
msg_warn() {
|
||||
echo -e "${YELLOW}⚠${NC} $1"
|
||||
}
|
||||
|
||||
header() {
|
||||
echo ""
|
||||
echo -e "${CYAN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${CYAN} $1${NC}"
|
||||
echo -e "${CYAN}════════════════════════════════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Проверка запуска от root
|
||||
check_root() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
msg_error "Этот скрипт должен быть запущен от имени root"
|
||||
msg_info "Используйте: sudo $0"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Определение дистрибутива
|
||||
detect_os() {
|
||||
if [ -f /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
OS=$ID
|
||||
VER=$VERSION_ID
|
||||
else
|
||||
msg_error "Не удалось определить операционную систему"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_info "Обнаружена ОС: $OS $VER"
|
||||
}
|
||||
|
||||
# Проверка доступных ресурсов
|
||||
check_resources() {
|
||||
local total_ram=$(free -m | awk 'NR==2{print $2}')
|
||||
local available_disk=$(df -m / | awk 'NR==2{print $4}')
|
||||
|
||||
msg_info "Доступно RAM: ${total_ram}MB, Свободно на диске: ${available_disk}MB"
|
||||
|
||||
if [ "$total_ram" -lt 512 ]; then
|
||||
msg_warn "Рекомендуется минимум 512MB RAM"
|
||||
fi
|
||||
|
||||
if [ "$available_disk" -lt 1024 ]; then
|
||||
msg_warn "Рекомендуется минимум 1GB свободного места"
|
||||
fi
|
||||
}
|
||||
|
||||
# Установка зависимостей
|
||||
install_dependencies() {
|
||||
header "Установка зависимостей"
|
||||
|
||||
case $OS in
|
||||
ubuntu|debian)
|
||||
msg_info "Обновление списка пакетов..."
|
||||
apt-get update -qq
|
||||
|
||||
msg_info "Установка базовых пакетов..."
|
||||
apt-get install -y -qq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-venv \
|
||||
python3-dev \
|
||||
build-essential \
|
||||
libssl-dev \
|
||||
libffi-dev \
|
||||
curl \
|
||||
git \
|
||||
dnsutils \
|
||||
certbot \
|
||||
openssl
|
||||
;;
|
||||
centos|rhel|fedora)
|
||||
msg_info "Обновление списка пакетов..."
|
||||
yum update -y -q
|
||||
|
||||
msg_info "Установка базовых пакетов..."
|
||||
yum install -y -q \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-devel \
|
||||
gcc \
|
||||
openssl-devel \
|
||||
libffi-devel \
|
||||
curl \
|
||||
git \
|
||||
bind-utils \
|
||||
certbot \
|
||||
openssl
|
||||
;;
|
||||
*)
|
||||
msg_error "Неподдерживаемая ОС: $OS"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
msg_ok "Зависимости установлены"
|
||||
}
|
||||
|
||||
# Создание структуры директорий
|
||||
create_directories() {
|
||||
header "Создание директорий"
|
||||
|
||||
msg_info "Создание структуры директорий..."
|
||||
|
||||
mkdir -p "$APP_DIR"
|
||||
mkdir -p "$CONFIG_DIR"
|
||||
mkdir -p "$LOG_DIR"
|
||||
mkdir -p "$CERT_DIR"
|
||||
|
||||
chmod 755 "$APP_DIR"
|
||||
chmod 750 "$CONFIG_DIR"
|
||||
chmod 755 "$LOG_DIR"
|
||||
chmod 755 "$CERT_DIR"
|
||||
|
||||
msg_ok "Директории созданы"
|
||||
}
|
||||
|
||||
# Создание виртуального окружения Python
|
||||
setup_python_venv() {
|
||||
header "Настройка Python окружения"
|
||||
|
||||
msg_info "Создание виртуального окружения..."
|
||||
python3 -m venv "$VENV_DIR"
|
||||
|
||||
msg_info "Активация виртуального окружения..."
|
||||
source "${VENV_DIR}/bin/activate"
|
||||
|
||||
msg_info "Обновление pip..."
|
||||
pip install --quiet --upgrade pip setuptools wheel
|
||||
|
||||
msg_info "Установка Python зависимостей..."
|
||||
pip install --quiet requests cryptography certbot
|
||||
|
||||
msg_ok "Python окружение настроено"
|
||||
}
|
||||
|
||||
# Копирование файлов приложения
|
||||
install_application() {
|
||||
header "Установка приложения"
|
||||
|
||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
msg_info "Копирование основного скрипта..."
|
||||
cp "${script_dir}/letsencrypt_regru_api.py" "${APP_DIR}/"
|
||||
chmod 755 "${APP_DIR}/letsencrypt_regru_api.py"
|
||||
|
||||
msg_info "Копирование файлов конфигурации..."
|
||||
if [ -f "${script_dir}/config.json.example" ]; then
|
||||
cp "${script_dir}/config.json.example" "${CONFIG_DIR}/"
|
||||
fi
|
||||
|
||||
msg_info "Копирование документации..."
|
||||
if [ -d "${script_dir}/docs" ]; then
|
||||
cp -r "${script_dir}/docs" "${APP_DIR}/"
|
||||
fi
|
||||
|
||||
msg_ok "Приложение установлено"
|
||||
}
|
||||
|
||||
# Создание конфигурационного файла
|
||||
create_config() {
|
||||
header "Создание конфигурации"
|
||||
|
||||
local config_file="${CONFIG_DIR}/config.json"
|
||||
|
||||
if [ -f "$config_file" ]; then
|
||||
msg_warn "Файл конфигурации уже существует: $config_file"
|
||||
read -p "Перезаписать? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
msg_info "Пропуск создания конфигурации"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
|
||||
msg_info "Интерактивная настройка конфигурации..."
|
||||
echo ""
|
||||
|
||||
read -p "Введите ваш домен (например, example.com): " domain
|
||||
read -p "Введите email для уведомлений Let's Encrypt: " email
|
||||
read -p "Введите имя пользователя reg.ru: " regru_user
|
||||
read -s -p "Введите пароль reg.ru: " regru_pass
|
||||
echo ""
|
||||
|
||||
read -p "Создать wildcard сертификат (*.${domain})? (Y/n): " -n 1 -r
|
||||
echo ""
|
||||
wildcard="true"
|
||||
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||
wildcard="false"
|
||||
fi
|
||||
|
||||
read -p "Включить интеграцию с Nginx Proxy Manager? (y/N): " -n 1 -r
|
||||
echo ""
|
||||
npm_enabled="false"
|
||||
npm_host="http://192.168.10.14:81"
|
||||
npm_email="admin@example.com"
|
||||
npm_password="changeme"
|
||||
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
npm_enabled="true"
|
||||
read -p "Введите адрес NPM (например, http://192.168.10.14:81): " npm_host
|
||||
read -p "Введите email для входа в NPM: " npm_email
|
||||
read -s -p "Введите пароль NPM: " npm_password
|
||||
echo ""
|
||||
fi
|
||||
|
||||
cat > "$config_file" <<EOF
|
||||
{
|
||||
"regru_username": "${regru_user}",
|
||||
"regru_password": "${regru_pass}",
|
||||
"domain": "${domain}",
|
||||
"wildcard": ${wildcard},
|
||||
"email": "${email}",
|
||||
"cert_dir": "${CERT_DIR}",
|
||||
"log_file": "${LOG_DIR}/letsencrypt_regru.log",
|
||||
"dns_propagation_wait": 60,
|
||||
"dns_check_attempts": 10,
|
||||
"dns_check_interval": 10,
|
||||
"renewal_days": 30,
|
||||
"npm_enabled": ${npm_enabled},
|
||||
"npm_host": "${npm_host}",
|
||||
"npm_email": "${npm_email}",
|
||||
"npm_password": "${npm_password}"
|
||||
}
|
||||
EOF
|
||||
|
||||
chmod 600 "$config_file"
|
||||
|
||||
msg_ok "Конфигурация создана: $config_file"
|
||||
}
|
||||
|
||||
# Создание systemd сервиса для автоматического обновления
|
||||
create_systemd_service() {
|
||||
header "Настройка systemd сервиса"
|
||||
|
||||
msg_info "Создание systemd service..."
|
||||
|
||||
cat > /etc/systemd/system/letsencrypt-regru.service <<EOF
|
||||
[Unit]
|
||||
Description=Let's Encrypt Certificate Manager for reg.ru
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
User=root
|
||||
WorkingDirectory=${APP_DIR}
|
||||
ExecStart=${VENV_DIR}/bin/python ${APP_DIR}/letsencrypt_regru_api.py --config ${CONFIG_DIR}/config.json --auto
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=letsencrypt-regru
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
msg_info "Создание systemd timer для автоматической проверки..."
|
||||
|
||||
cat > /etc/systemd/system/letsencrypt-regru.timer <<EOF
|
||||
[Unit]
|
||||
Description=Let's Encrypt Certificate Auto-Renewal Timer
|
||||
Requires=letsencrypt-regru.service
|
||||
|
||||
[Timer]
|
||||
OnBootSec=15min
|
||||
OnUnitActiveSec=12h
|
||||
RandomizedDelaySec=1h
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
EOF
|
||||
|
||||
msg_info "Перезагрузка systemd..."
|
||||
systemctl daemon-reload
|
||||
|
||||
msg_info "Включение timer..."
|
||||
systemctl enable letsencrypt-regru.timer
|
||||
systemctl start letsencrypt-regru.timer
|
||||
|
||||
msg_ok "Systemd сервис настроен и запущен"
|
||||
}
|
||||
|
||||
# Создание удобных алиасов
|
||||
create_aliases() {
|
||||
header "Создание алиасов команд"
|
||||
|
||||
msg_info "Создание символической ссылки для команды..."
|
||||
|
||||
cat > /usr/local/bin/letsencrypt-regru <<EOF
|
||||
#!/bin/bash
|
||||
${VENV_DIR}/bin/python ${APP_DIR}/letsencrypt_regru_api.py --config ${CONFIG_DIR}/config.json "\$@"
|
||||
EOF
|
||||
|
||||
chmod +x /usr/local/bin/letsencrypt-regru
|
||||
|
||||
msg_ok "Команда 'letsencrypt-regru' доступна глобально"
|
||||
}
|
||||
|
||||
# Тестовая генерация сертификата
|
||||
test_certificate() {
|
||||
header "Тестирование генерации сертификата"
|
||||
|
||||
read -p "Хотите сгенерировать тестовый самоподписанный сертификат? (Y/n): " -n 1 -r
|
||||
echo ""
|
||||
|
||||
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||||
msg_info "Генерация тестового сертификата..."
|
||||
${VENV_DIR}/bin/python ${APP_DIR}/letsencrypt_regru_api.py \
|
||||
--config ${CONFIG_DIR}/config.json \
|
||||
--test-cert
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
msg_ok "Тестовый сертификат успешно создан"
|
||||
else
|
||||
msg_error "Ошибка при создании тестового сертификата"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Вывод итоговой информации
|
||||
display_summary() {
|
||||
header "Установка завершена!"
|
||||
|
||||
echo -e "${GREEN}✓ ${APP_NAME} успешно установлен!${NC}"
|
||||
echo ""
|
||||
echo "📁 Расположение файлов:"
|
||||
echo " • Приложение: ${APP_DIR}"
|
||||
echo " • Конфигурация: ${CONFIG_DIR}/config.json"
|
||||
echo " • Логи: ${LOG_DIR}"
|
||||
echo " • Сертификаты: ${CERT_DIR}"
|
||||
echo ""
|
||||
echo "🔧 Доступные команды:"
|
||||
echo " • letsencrypt-regru --check # Проверить срок действия"
|
||||
echo " • letsencrypt-regru --obtain # Получить новый сертификат"
|
||||
echo " • letsencrypt-regru --renew # Обновить сертификат"
|
||||
echo " • letsencrypt-regru --test-cert # Создать тестовый сертификат"
|
||||
echo " • letsencrypt-regru --auto # Автоматическая проверка и обновление"
|
||||
echo ""
|
||||
echo "⏰ Автоматическое обновление:"
|
||||
echo " • Сервис запускается каждые 12 часов"
|
||||
echo " • Управление: systemctl status letsencrypt-regru.timer"
|
||||
echo ""
|
||||
echo "📊 Просмотр логов:"
|
||||
echo " • journalctl -u letsencrypt-regru -f"
|
||||
echo " • tail -f ${LOG_DIR}/letsencrypt_regru.log"
|
||||
echo ""
|
||||
echo "📖 Документация:"
|
||||
echo " • README: ${APP_DIR}/README.md"
|
||||
echo " • Docs: ${APP_DIR}/docs/"
|
||||
echo ""
|
||||
|
||||
if grep -q '"npm_enabled": true' "${CONFIG_DIR}/config.json" 2>/dev/null; then
|
||||
echo "🔗 Интеграция с Nginx Proxy Manager: ВКЛЮЧЕНА"
|
||||
echo " Сертификаты будут автоматически синхронизироваться с NPM"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
msg_warn "ВАЖНО: Отредактируйте конфигурацию при необходимости:"
|
||||
echo " nano ${CONFIG_DIR}/config.json"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Функция обновления
|
||||
update_application() {
|
||||
header "Обновление приложения"
|
||||
|
||||
msg_info "Остановка сервиса..."
|
||||
systemctl stop letsencrypt-regru.timer || true
|
||||
|
||||
msg_info "Обновление файлов..."
|
||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cp "${script_dir}/letsencrypt_regru_api.py" "${APP_DIR}/"
|
||||
chmod 755 "${APP_DIR}/letsencrypt_regru_api.py"
|
||||
|
||||
msg_info "Обновление Python зависимостей..."
|
||||
source "${VENV_DIR}/bin/activate"
|
||||
pip install --quiet --upgrade requests cryptography certbot
|
||||
|
||||
msg_info "Перезапуск сервиса..."
|
||||
systemctl daemon-reload
|
||||
systemctl start letsencrypt-regru.timer
|
||||
|
||||
msg_ok "Приложение обновлено"
|
||||
}
|
||||
|
||||
# Функция удаления
|
||||
uninstall_application() {
|
||||
header "Удаление приложения"
|
||||
|
||||
msg_warn "ВНИМАНИЕ: Это удалит все файлы приложения"
|
||||
msg_warn "Сертификаты в ${CERT_DIR} будут сохранены"
|
||||
echo ""
|
||||
read -p "Продолжить удаление? (y/N): " -n 1 -r
|
||||
echo ""
|
||||
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
msg_info "Отмена удаления"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
msg_info "Остановка и отключение сервисов..."
|
||||
systemctl stop letsencrypt-regru.timer || true
|
||||
systemctl disable letsencrypt-regru.timer || true
|
||||
|
||||
msg_info "Удаление systemd файлов..."
|
||||
rm -f /etc/systemd/system/letsencrypt-regru.service
|
||||
rm -f /etc/systemd/system/letsencrypt-regru.timer
|
||||
systemctl daemon-reload
|
||||
|
||||
msg_info "Удаление файлов приложения..."
|
||||
rm -rf "$APP_DIR"
|
||||
rm -f /usr/local/bin/letsencrypt-regru
|
||||
|
||||
msg_info "Удаление конфигурации и логов..."
|
||||
read -p "Удалить конфигурацию и логи? (y/N): " -n 1 -r
|
||||
echo ""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
rm -rf "$CONFIG_DIR"
|
||||
rm -rf "$LOG_DIR"
|
||||
fi
|
||||
|
||||
msg_ok "Приложение удалено"
|
||||
}
|
||||
|
||||
# ==============================================================================
|
||||
# Основная логика
|
||||
# ==============================================================================
|
||||
|
||||
main() {
|
||||
clear
|
||||
header "${APP_NAME} - Установка"
|
||||
|
||||
# Проверка аргументов
|
||||
case "${1:-install}" in
|
||||
install)
|
||||
check_root
|
||||
detect_os
|
||||
check_resources
|
||||
install_dependencies
|
||||
create_directories
|
||||
setup_python_venv
|
||||
install_application
|
||||
create_config
|
||||
create_systemd_service
|
||||
create_aliases
|
||||
test_certificate
|
||||
display_summary
|
||||
;;
|
||||
update)
|
||||
check_root
|
||||
update_application
|
||||
msg_ok "Обновление завершено"
|
||||
;;
|
||||
uninstall)
|
||||
check_root
|
||||
uninstall_application
|
||||
;;
|
||||
*)
|
||||
echo "Использование: $0 {install|update|uninstall}"
|
||||
echo ""
|
||||
echo " install - Установить приложение (по умолчанию)"
|
||||
echo " update - Обновить приложение"
|
||||
echo " uninstall - Удалить приложение"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Запуск
|
||||
main "${@}"
|
||||
179
nginxproxymanager.sh
Normal file
179
nginxproxymanager.sh
Normal file
@@ -0,0 +1,179 @@
|
||||
#!/usr/bin/env bash
|
||||
source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
|
||||
# Copyright (c) 2021-2025 tteck
|
||||
# Author: tteck (tteckster)
|
||||
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
||||
# Source: https://nginxproxymanager.com/
|
||||
|
||||
APP="Nginx Proxy Manager"
|
||||
var_tags="${var_tags:-proxy}"
|
||||
var_cpu="${var_cpu:-2}"
|
||||
var_ram="${var_ram:-1024}"
|
||||
var_disk="${var_disk:-4}"
|
||||
var_os="${var_os:-debian}"
|
||||
var_version="${var_version:-13}"
|
||||
var_unprivileged="${var_unprivileged:-1}"
|
||||
|
||||
header_info "$APP"
|
||||
variables
|
||||
color
|
||||
catch_errors
|
||||
|
||||
function update_script() {
|
||||
header_info
|
||||
check_container_storage
|
||||
check_container_resources
|
||||
if [[ ! -f /lib/systemd/system/npm.service ]]; then
|
||||
msg_error "No ${APP} Installation Found!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if command -v node &> /dev/null; then
|
||||
CURRENT_NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
|
||||
if [[ "$CURRENT_NODE_VERSION" != "22" ]]; then
|
||||
systemctl stop openresty
|
||||
apt-get purge -y nodejs npm
|
||||
apt-get autoremove -y
|
||||
rm -rf /usr/local/bin/node /usr/local/bin/npm
|
||||
rm -rf /usr/local/lib/node_modules
|
||||
rm -rf ~/.npm
|
||||
rm -rf /root/.npm
|
||||
fi
|
||||
fi
|
||||
|
||||
NODE_VERSION="22" NODE_MODULE="yarn" setup_nodejs
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
|
||||
RELEASE=$(curl -fsSL https://api.github.com/repos/NginxProxyManager/nginx-proxy-manager/releases/latest |
|
||||
grep "tag_name" |
|
||||
awk '{print substr($2, 3, length($2)-4) }')
|
||||
|
||||
msg_info "Downloading NPM v${RELEASE}"
|
||||
curl -fsSL "https://codeload.github.com/NginxProxyManager/nginx-proxy-manager/tar.gz/v${RELEASE}" | tar -xz
|
||||
cd nginx-proxy-manager-"${RELEASE}" || exit
|
||||
msg_ok "Downloaded NPM v${RELEASE}"
|
||||
|
||||
msg_info "Building Frontend"
|
||||
(
|
||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" backend/package.json
|
||||
sed -i "s|\"version\": \"0.0.0\"|\"version\": \"$RELEASE\"|" frontend/package.json
|
||||
cd ./frontend || exit
|
||||
# Replace node-sass with sass in package.json before installation
|
||||
sed -i 's/"node-sass".*$/"sass": "^1.92.1",/g' package.json
|
||||
$STD yarn install --network-timeout 600000
|
||||
$STD yarn build
|
||||
)
|
||||
msg_ok "Built Frontend"
|
||||
|
||||
msg_info "Stopping Services"
|
||||
systemctl stop openresty
|
||||
systemctl stop npm
|
||||
msg_ok "Stopped Services"
|
||||
|
||||
msg_info "Cleaning Old Files"
|
||||
rm -rf /app \
|
||||
/var/www/html \
|
||||
/etc/nginx \
|
||||
/var/log/nginx \
|
||||
/var/lib/nginx \
|
||||
"$STD" /var/cache/nginx
|
||||
msg_ok "Cleaned Old Files"
|
||||
|
||||
msg_info "Setting up Environment"
|
||||
ln -sf /usr/bin/python3 /usr/bin/python
|
||||
ln -sf /opt/certbot/bin/certbot /usr/local/bin/certbot
|
||||
ln -sf /usr/local/openresty/nginx/sbin/nginx /usr/sbin/nginx
|
||||
ln -sf /usr/local/openresty/nginx/ /etc/nginx
|
||||
sed -i 's+^daemon+#daemon+g' docker/rootfs/etc/nginx/nginx.conf
|
||||
NGINX_CONFS=$(find "$(pwd)" -type f -name "*.conf")
|
||||
for NGINX_CONF in $NGINX_CONFS; do
|
||||
sed -i 's+include conf.d+include /etc/nginx/conf.d+g' "$NGINX_CONF"
|
||||
done
|
||||
mkdir -p /var/www/html /etc/nginx/logs
|
||||
cp -r docker/rootfs/var/www/html/* /var/www/html/
|
||||
cp -r docker/rootfs/etc/nginx/* /etc/nginx/
|
||||
cp docker/rootfs/etc/letsencrypt.ini /etc/letsencrypt.ini
|
||||
cp docker/rootfs/etc/logrotate.d/nginx-proxy-manager /etc/logrotate.d/nginx-proxy-manager
|
||||
ln -sf /etc/nginx/nginx.conf /etc/nginx/conf/nginx.conf
|
||||
rm -f /etc/nginx/conf.d/dev.conf
|
||||
mkdir -p /tmp/nginx/body \
|
||||
/run/nginx \
|
||||
/data/nginx \
|
||||
/data/custom_ssl \
|
||||
/data/logs \
|
||||
/data/access \
|
||||
/data/nginx/default_host \
|
||||
/data/nginx/default_www \
|
||||
/data/nginx/proxy_host \
|
||||
/data/nginx/redirection_host \
|
||||
/data/nginx/stream \
|
||||
/data/nginx/dead_host \
|
||||
/data/nginx/temp \
|
||||
/var/lib/nginx/cache/public \
|
||||
/var/lib/nginx/cache/private \
|
||||
/var/cache/nginx/proxy_temp
|
||||
chmod -R 777 /var/cache/nginx
|
||||
chown root /tmp/nginx
|
||||
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" >/etc/nginx/conf.d/include/resolvers.conf
|
||||
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]; then
|
||||
$STD openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj "/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost" -keyout /data/nginx/dummykey.pem -out /data/nginx/dummycert.pem
|
||||
fi
|
||||
mkdir -p /app/global /app/frontend/images
|
||||
cp -r frontend/dist/* /app/frontend
|
||||
cp -r frontend/app-images/* /app/frontend/images
|
||||
cp -r backend/* /app
|
||||
cp -r global/* /app/global
|
||||
|
||||
# Update Certbot and plugins in virtual environment
|
||||
if [ -d /opt/certbot ]; then
|
||||
$STD /opt/certbot/bin/pip install --upgrade pip setuptools wheel
|
||||
$STD /opt/certbot/bin/pip install --upgrade certbot certbot-dns-cloudflare
|
||||
fi
|
||||
msg_ok "Setup Environment"
|
||||
|
||||
msg_info "Initializing Backend"
|
||||
$STD rm -rf /app/config/default.json
|
||||
if [ ! -f /app/config/production.json ]; then
|
||||
cat <<'EOF' >/app/config/production.json
|
||||
{
|
||||
"database": {
|
||||
"engine": "knex-native",
|
||||
"knex": {
|
||||
"client": "sqlite3",
|
||||
"connection": {
|
||||
"filename": "/data/database.sqlite"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
cd /app || exit
|
||||
export NODE_OPTIONS="--openssl-legacy-provider"
|
||||
$STD yarn install --network-timeout 600000
|
||||
msg_ok "Initialized Backend"
|
||||
|
||||
msg_info "Starting Services"
|
||||
sed -i 's/user npm/user root/g; s/^pid/#pid/g' /usr/local/openresty/nginx/conf/nginx.conf
|
||||
sed -i 's/su npm npm/su root root/g' /etc/logrotate.d/nginx-proxy-manager
|
||||
sed -i 's/include-system-site-packages = false/include-system-site-packages = true/g' /opt/certbot/pyvenv.cfg
|
||||
systemctl enable -q --now openresty
|
||||
systemctl enable -q --now npm
|
||||
msg_ok "Started Services"
|
||||
|
||||
msg_info "Cleaning up"
|
||||
rm -rf ~/nginx-proxy-manager-*
|
||||
msg_ok "Cleaned"
|
||||
|
||||
msg_ok "Updated Successfully"
|
||||
exit
|
||||
}
|
||||
|
||||
start
|
||||
build_container
|
||||
description
|
||||
|
||||
msg_ok "Completed Successfully!\n"
|
||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
|
||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
|
||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:81${CL}"
|
||||
16
systemd/letsencrypt-regru.service
Normal file
16
systemd/letsencrypt-regru.service
Normal file
@@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Let's Encrypt Certificate Manager for reg.ru
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
User=root
|
||||
WorkingDirectory=/opt/letsencrypt-regru
|
||||
ExecStart=/opt/letsencrypt-regru/venv/bin/python /opt/letsencrypt-regru/letsencrypt_regru_api.py --config /etc/letsencrypt-regru/config.json --auto
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=letsencrypt-regru
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
19
systemd/letsencrypt-regru.timer
Normal file
19
systemd/letsencrypt-regru.timer
Normal file
@@ -0,0 +1,19 @@
|
||||
[Unit]
|
||||
Description=Let's Encrypt Certificate Auto-Renewal Timer
|
||||
Requires=letsencrypt-regru.service
|
||||
|
||||
[Timer]
|
||||
# Запустить через 15 минут после загрузки системы
|
||||
OnBootSec=15min
|
||||
|
||||
# Запускать каждые 12 часов
|
||||
OnUnitActiveSec=12h
|
||||
|
||||
# Добавить случайную задержку до 1 часа
|
||||
RandomizedDelaySec=1h
|
||||
|
||||
# Сохранять информацию о последнем запуске
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
Reference in New Issue
Block a user