Обновлено руководство по использованию 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. [Введение](#введение)
|
1. [Введение](#введение)
|
||||||
2. [Быстрый старт](#-быстрый-старт)
|
2. [⚡ Быстрая установка (letsencrypt_regru.sh)](#-быстрая-установка-letsencrypt_regrush)
|
||||||
3. [Установка через Makefile](#-установка-через-makefile)
|
3. [Быстрый старт](#-быстрый-старт)
|
||||||
4. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
|
4. [Установка через Makefile](#-установка-через-makefile)
|
||||||
5. [Требования](#требования)
|
5. [Создание тестовых сертификатов](#-создание-тестового-самоподписанного-сертификата)
|
||||||
6. [Установка зависимостей](#установка-зависимостей)
|
6. [Требования](#требования)
|
||||||
7. [Настройка](#настройка)
|
7. [Установка зависимостей](#установка-зависимостей)
|
||||||
8. [Использование Bash скрипта](#использование-bash-скрипта)
|
8. [Настройка](#настройка)
|
||||||
9. [Использование Python скрипта](#использование-python-скрипта)
|
9. [Использование Bash скрипта](#использование-bash-скрипта)
|
||||||
10. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
|
10. [Использование Python скрипта](#использование-python-скрипта)
|
||||||
11. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
|
11. [Интеграция с Nginx Proxy Manager](#интеграция-с-nginx-proxy-manager)
|
||||||
12. [Автоматизация обновления](#автоматизация-обновления)
|
12. [Автоматическая проверка и обновление сертификатов](#автоматическая-проверка-и-обновление-сертификатов)
|
||||||
13. [Устранение неполадок](#устранение-неполадок)
|
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
|
## 🚀 Установка через Makefile
|
||||||
|
|
||||||
**Самый быстрый способ установки на Linux!**
|
**Самый быстрый способ установки на 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