services-create-curl/
├── service.sh # Основной скрипт менеджера сервисов
├── webhook.sh # Скрипт автоматизации CI/CD с webhook
├── setup_mail.sh # Скрипт установки и управления почтовым сервером
├── README.md # Документация пользователя
├── README_cert_https.md # Документация по HTTPS сертификатам
├── example.png # Скриншот примера использования
└── architecture.md # Архитектурная документация
Bash-скрипт для создания и управления systemd-сервисами с графическим интерфейсом в терминале.
Bash-скрипт для установки и управления почтовым сервером на базе Postfix, Dovecot, MariaDB и OpenDKIM с интерактивным интерфейсом.
Основные функции:
Инициализация и конфигурация:
init_mail_config()- создание директорий и файлов для хранения конфигурации почтового сервераcheck_packages_installed()- проверка установленных пакетов почтового сервера
Установка почтового сервера:
input_mail_server_config()- интерактивный ввод данных для настройки почтового сервера (домен, hostname, пользователь, пароль)install_mail_server()- установка и настройка почтового сервера (Postfix, Dovecot, MariaDB, OpenDKIM, firewall)show_dns_records()- вывод DNS записей для настройки в панели управления DNS (A, MX, SPF, DMARC, DKIM)
Управление доменами и почтовыми ящиками:
add_domain_mailbox()- меню добавления нового домена или почтового ящикаadd_mailbox_to_existing_domain()- добавление почтового ящика к существующему доменуview_domains_mailboxes()- просмотр списка зарегистрированных доменов и почтовых ящиков с возможностью выбора домена для детальной информацииshow_domain_details()- отображение детальной информации о домене: DNS настройки (A, MX, SPF, DMARC, DKIM) и параметры подключения для каждого почтового ящика (SMTP/IMAP: сервер, порт, шифрование, логин, пароль) с адаптивной таблицей, автоматически подстраивающейся под длину значений, с возможностью отправки тестового письмаsend_test_email()- отправка тестового письма с выбранного почтового ящика домена на указанный адрес получателя для проверки работы почтового сервера с меню просмотра логов после отправкиview_email_logs()- просмотр логов отправленного сообщения из Postfix через journalctl и файловых логов с фильтрацией по отправителю и получателю с автоматическим определением проблем (например, SMTPUTF8) и предложением решенийfix_smtputf8_issue()- исправление проблемы SMTPUTF8 путем отключения требования SMTPUTF8 в Postfix для совместимости с серверами, не поддерживающими эту функцию (например, Yandex)
Endpoint для отправки писем:
create_python_mail_endpoint_server()- создание Python HTTP сервера скрипта для обработки POST запросов на отправку писем с поддержкой автоматического определения HTML контентаcreate_mail_endpoint()- создание HTTP endpoint для отправки писем: запрос порта, генерация/ввод API ключа, создание Python скрипта сервера, создание systemd сервиса, сохранение конфигурацииmanage_mail_endpoints()- управление созданными endpoint'ами: просмотр списка, запуск/остановка/перезапуск, просмотр логов, удаление, показ примеров использованияis_html_content()(в Python сервере) - функция определения типа контента сообщения (HTML или plain text) по наличию HTML тегов для автоматической установки правильного Content-Type заголовка
Пользовательский интерфейс:
show_main_menu()- главное меню управления почтовым серверомclear_screen()- очистка экранаstrip_ansi()- удаление ANSI-кодов для корректного расчета длины строкvislen()- вычисление видимой длины строки без учета ANSI-кодовprint_hr()- печать горизонтальной линии таблицы с адаптивными ширинами столбцовprint_row()- печать строки таблицы с учетом ANSI-цветов и корректным выравниванием
Bash-скрипт для автоматического выполнения действий при получении уведомлений от GitHub webhook'ов.
Инициализация и конфигурация:
init_services_list()- создает директории и файлы для хранения списка сервисовcheck_sudo()- проверяет наличие прав суперпользователяcheck_command()- проверяет наличие команд в системе
Управление уведомлениями:
send_notification()- отправка уведомлений через Telegram APImanage_notifications()- интерфейс настройки уведомлений
Создание сервисов:
select_runtime()- выбор режима запуска (Python, UV, Poetry, PHP, Shell)select_file()- выбор файла для создания сервисаcreate_service()- создание systemd-сервиса и скриптов уведомлений
Управление сервисами:
manage_services()- просмотр списка созданных сервисовservice_control()- управление конкретным сервисомview_service_logs()- просмотр журналов сервисаedit_service_file()- редактирование конфигурации сервиса
Управление Nginx:
list_nginx_configs()- получение списка всех конфигураций nginx из /etc/nginx/sites-available/show_nginx_config_info()- отображение детальной информации о конфигурации nginx с указанием wildcard доменов и типа проксированияmanage_nginx_configs()- главное меню управления конфигурациями nginx с выбором конфигурацииcheck_nginx_ports()- проверка портов в конфигурациях nginx (вызывает manage_nginx_configs)create_nginx_config()- создание конфигурации nginx с поддержкой обычных и wildcard доменов, выбор типа проксирования (локальный/внешний), опциональная поддержка WebSocket проксирования, активация через симлинк, опциональный выпуск SSL сертификатаedit_nginx_config()- редактирование конфигурации nginx через текстовый редактор с валидациейdelete_nginx_config()- удаление конфигурации nginx с подтверждением и автоматическим отключениемtoggle_nginx_config()- включение/отключение конфигурации nginx через управление симлинкамиissue_ssl_certificate()- выпуск SSL сертификата для конфигурации с автоматическим определением типа (обычный/wildcard) и вызовом соответствующей функцииissue_wildcard_certificate()- выпуск wildcard SSL сертификата через DNS challenge с интерактивным процессом добавления DNS TXT записи и автоматической настройкой nginx с сохранением поддержки WebSocket
Пользовательский интерфейс:
show_main_menu()- главное меню приложенияclear_screen()- очистка экрана
Инициализация webhook системы:
init_webhook_system()- создание директорий и файлов конфигурацииfix_automations_format()- миграция старых форматов данных автоматизаций
Обработка webhook событий:
handle_ping_event()- обработка ping событий от GitHub для проверки подключенияhandle_push_event()- обработка push событий и запуск автоматизацийlog_event()- централизованное логирование всех событий
Управление автоматизациями:
create_automation()- создание новой автоматизации с настройкой командmanage_automations()- интерфейс управления существующими автоматизациямиtest_automation_manual()- принудительное тестирование автоматизацииsimulate_push_event()- эмуляция push события для отладки
Webhook сервер:
start_webhook_server()- запуск HTTP сервера для приема webhook'ов- Поддержка Python, socat и netcat в качестве сервера
Система уведомлений:
send_notification()- отправка уведомлений через Telegram- Интеграция с системой логирования
Управление данными:
cleanup_corrupted_data()- очистка поврежденных данных автоматизацийview_logs()- просмотр журналов событийsystem_settings()- настройки порта и уведомлений
Инициализация и конфигурация:
init_webhook_system()- создание директорий и файлов конфигурацииsave_config()- сохранение настроек системы
Управление автоматизациями:
create_automation()- создание новой автоматизации CI/CDmanage_automations()- управление существующими автоматизациямиview_automation_details()- просмотр деталей автоматизацииdelete_automation()- удаление автоматизацииtest_automation()- тестирование автоматизации
Webhook сервер:
start_webhook_server()- запуск/остановка/перезапуск webhook сервераwebhook_server()- основная функция HTTP сервераhandle_webhook_request()- обработка входящих webhook запросов
Система мониторинга:
log_event()- логирование событий с временными меткамиview_logs()- просмотр журнала событийsend_notification()- отправка уведомлений через Telegram
Интеграция с service.sh:
get_services_list()- получение списка созданных сервисов из service.sh
- Python (python3) - запуск Python-скриптов через системный интерпретатор
- UV Manager (uv run) - запуск через UV менеджер пакетов
- Poetry (poetry run python) - запуск через Poetry менеджер зависимостей
- PHP Server (php -S) - запуск PHP-файлов как веб-сервер
- Shell Script (bash) - запуск shell-скриптов через bash интерпретатор
/var/lib/service-creator/created_services.list- список созданных сервисов/var/lib/service-creator/notifications/config- настройки уведомлений/var/lib/service-creator/notifications/{service_name}_notify.sh- скрипты уведомлений для каждого сервиса
/var/lib/webhook-automation/config- основная конфигурация webhook системы/var/lib/webhook-automation/automations.list- список созданных автоматизаций (ID|название|репозиторий|путь|ветка|команды|дата_создания|приватный|учетные_данные_зашифрованы)/var/lib/webhook-automation/logs/webhook.log- журнал событий автоматизации
/var/lib/mail-server/domains.list- список зарегистрированных доменов (домен:hostname:дата_создания)/var/lib/mail-server/mailboxes.list- список почтовых ящиков (email:домен:пароль:дата_создания)/var/lib/mail-server/endpoints.list- список созданных endpoint для отправки писем (порт:api_ключ:имя_сервиса:дата_создания)/var/lib/mail-server/logs/endpoint.log- журнал работы endpoint серверов/tmp/mail_endpoint_{PORT}.py- Python скрипты HTTP серверов для каждого endpoint
/etc/systemd/system/{service_name}.service- файлы конфигурации systemd/etc/systemd/system/mail-endpoint-{PORT}.service- файлы конфигурации systemd для endpoint отправки писем/etc/nginx/sites-available/{domain}.conf- конфигурации nginx/etc/nginx/sites-enabled/{domain}.conf- активированные конфигурации nginx (симлинки)/etc/postfix/mysql-virtual-*.cf- конфигурационные файлы Postfix для работы с MySQL/etc/dovecot/dovecot-sql.conf.ext- конфигурация Dovecot для работы с MySQL/etc/opendkim/keys/{domain}/dkim.private- приватные ключи DKIM для доменов/etc/opendkim/keys/{domain}/dkim.txt- публичные ключи DKIM для DNS записей
- Отправка уведомлений о статусе сервисов (service.sh)
- Отправка файлов логов (service.sh)
- Уведомления о событиях автоматизации (webhook.sh)
- Тестирование уведомлений
- Получение уведомлений о push в репозиторий
- Фильтрация по веткам
- Автоматический запуск команд при обновлении кода
- Создание и управление службами
- Автозапуск сервисов
- Журналирование
- Интеграция с автоматизацией (перезапуск сервисов)
- Проверка портов в существующих конфигурациях
- Создание новых конфигураций reverse proxy
- Автоматическая активация конфигураций через симлинки
- Интеграция с certbot для выпуска SSL сертификатов
- Валидация конфигураций перед применением
- Установка и настройка Postfix для отправки почты
- Установка и настройка Dovecot для приема почты (IMAP/IMAPS)
- Настройка MariaDB для хранения виртуальных доменов и пользователей
- Настройка OpenDKIM для подписи исходящей почты
- Настройка firewall (порты 25, 587, 993)
- Автоматическая генерация DNS записей (A, MX, SPF, DMARC, DKIM)
- Управление множественными доменами и почтовыми ящиками
- Требует прав суперпользователя для управления системными сервисами
- Проверка корректности ввода пользователя
- Подтверждение критических операций (удаление сервисов/автоматизаций)
- Безопасное редактирование конфигурационных файлов
- Webhook secret для защиты от несанкционированных запросов
- Валидация входящих webhook данных
- Изоляция выполнения команд автоматизации
- GREEN - успешные операции и активные элементы
- RED - ошибки и неактивные элементы
- YELLOW - предупреждения и информационные сообщения
- CYAN - пункты меню и заголовки
- BLUE - дополнительная информация
- BOLD - выделение важных элементов
- Настройка Git репозитория и целевой ветки
- Выбор между использованием существующих сервисов и ручным вводом команд
- Интеграция с созданными в service.sh сервисами
- Автоматическое формирование команд перезапуска сервисов
- HTTP сервер на настраиваемом порту (по умолчанию 9000)
- Обработка POST запросов от GitHub
- Парсинг JSON payload для определения ветки и репозитория
- Автоматический запуск соответствующих автоматизаций
- Подробное логирование всех событий с временными метками
- Отправка уведомлений в Telegram о статусе выполнения
- Просмотр журналов через интерфейс
- Тестирование автоматизаций вручную
- Интеграция с service.sh - автоматический git pull и перезапуск systemd сервиса
- Пользовательские команды - выполнение произвольных bash команд
- Комбинированные сценарии - объединение нескольких операций
- Webhook secret для аутентификации GitHub запросов
- Настраиваемый порт для webhook сервера
- Изоляция выполнения команд
- Валидация входящих данных
- Шифрование учетных данных для приватных репозиториев (base64 + rot13)
- Поддержка Personal Access Token и username/password аутентификации
- Просмотр списка всех конфигураций в /etc/nginx/sites-available/
- Отображение детальной информации о каждой конфигурации:
- Домены (server_name) с указанием wildcard доменов
- Порты прослушивания (listen)
- Цели проксирования (proxy_pass)
- Тип проксирования (локальный/внешний сервер)
- Статус SSL сертификата
- Статус активации конфигурации (sites-enabled)
- Цветная визуализация информации с выделением wildcard доменов
- Выбор конфигурации из списка для редактирования
- Открытие конфигурации в текстовом редакторе (vim/vi/nano)
- Автоматическая валидация конфигурации после редактирования (nginx -t)
- Автоматическая перезагрузка nginx при успешной валидации
- Откат изменений при обнаружении ошибок в конфигурации
- Выбор конфигурации для удаления
- Отображение информации о конфигурации перед удалением
- Подтверждение удаления (защита от случайного удаления)
- Автоматическое отключение конфигурации перед удалением
- Валидация и перезагрузка nginx после удаления
- Активация конфигурации через создание симлинка в /etc/nginx/sites-enabled/
- Деактивация конфигурации через удаление симлинка
- Автоматическая валидация конфигурации перед активацией
- Автоматическая перезагрузка nginx после изменений
- Откат активации при обнаружении ошибок в конфигурации
- Автоматическое определение домена из конфигурации
- Автоматическое определение типа сертификата (обычный/wildcard)
- Выпуск обычных SSL сертификатов через certbot --nginx (HTTP challenge)
- Выпуск wildcard SSL сертификатов через certbot certonly --manual --preferred-challenges dns (DNS challenge)
- Интерактивный процесс выпуска wildcard сертификатов:
- Инструкции по добавлению DNS TXT записи
- Ожидание подтверждения добавления записи
- Автоматическая настройка nginx после получения сертификата
- Автоматическая настройка HTTPS в конфигурации nginx
- Настройка автообновления через systemd timer (certbot.timer)
- Резервный вариант с рекомендацией настройки cron для автообновления
- Проверка наличия certbot перед выпуском сертификата
- Информирование о необходимых требованиях для успешного выпуска SSL
- Автоматическая активация конфигурации перед выпуском сертификата
- Интерактивный запрос домена с поддержкой форматов:
- Обычный домен (example.com)
- Поддомен (subdomain.example.com)
- Wildcard домен (*.example.com)
- Выбор типа проксирования:
- Локальный сервер (localhost:port) - проксирование на локальные сервисы
- Внешний сервер (host:port или IP:port) - проксирование на внешние серверы
- Опциональная поддержка WebSocket проксирования:
- Интерактивный выбор включения поддержки WebSocket при создании конфигурации
- Автоматическое добавление директив nginx для WebSocket (proxy_http_version 1.1, Upgrade, Connection)
- Сохранение поддержки WebSocket при выпуске wildcard SSL сертификатов
- Валидация введенных данных (корректность порта 1-65535, формат адреса)
- Автоматическое определение типа домена (wildcard/обычный)
- Создание reverse proxy конфигурации с учетом типа проксирования и поддержки WebSocket
- Поддержка wildcard доменов в server_name (*.example.com example.com)
- Автоматическое создание файла в /etc/nginx/sites-available/{domain}.conf
- Проверка существования конфигурации с подтверждением перезаписи
- Активация конфигурации через создание симлинка в /etc/nginx/sites-enabled/
- Валидация конфигурации nginx перед применением (nginx -t)
- Автоматическая перезагрузка nginx после создания конфигурации
- Опциональный выпуск SSL сертификата с автоматическим определением типа (обычный/wildcard)
- Проверка наличия certbot перед выпуском сертификата
- Информирование о необходимых требованиях для успешного выпуска SSL
- Использование certbot для автоматического выпуска Let's Encrypt сертификатов
- Поддержка двух типов сертификатов:
- Обычные сертификаты через HTTP challenge (certbot --nginx)
- Wildcard сертификаты через DNS challenge (certbot certonly --manual --preferred-challenges dns)
- Автоматическое определение типа сертификата на основе конфигурации домена
- Интерактивный процесс выпуска wildcard сертификатов:
- Получение DNS TXT записи от certbot
- Инструкции пользователю для добавления записи в DNS зону
- Ожидание подтверждения добавления записи
- Автоматическая настройка nginx после получения сертификата
- Автоматическое сохранение поддержки WebSocket при выпуске wildcard сертификатов (проверка наличия WebSocket директив в исходной конфигурации)
- Автоматическая настройка HTTPS в конфигурации nginx
- Поддержка редиректа HTTP -> HTTPS для wildcard доменов
- Проверка доступности домена перед выпуском сертификата
- Информирование о требованиях (DNS настройка, открытые порты 80/443)
- Настройка автообновления сертификатов через systemd timer
- Резервное копирование конфигурации перед изменением для wildcard сертификатов
- Интерактивный ввод данных (домен, hostname, пользователь, пароль)
- Автоматическая установка необходимых пакетов (Postfix, Dovecot, MariaDB, OpenDKIM)
- Настройка firewall для почтовых портов
- Создание базы данных и таблиц для виртуальных доменов и пользователей
- Настройка Postfix для работы с MySQL
- Настройка Dovecot для работы с MySQL
- Генерация DKIM ключей для домена
- Автоматический вывод DNS записей для настройки
- Добавление нового домена с почтовым ящиком
- Добавление почтового ящика к существующему домену
- Просмотр списка всех зарегистрированных доменов
- Просмотр списка всех почтовых ящиков по доменам
- Просмотр детальной информации о домене с DNS настройками и параметрами подключения
- Отправка тестового письма с выбранного почтового ящика для проверки работы почтового сервера
- A-запись для hostname почтового сервера
- MX-запись для приема почты
- SPF-запись для защиты от спама
- DMARC-запись для политики обработки почты
- DKIM-запись с автоматически извлеченным публичным ключом
- Интерактивный запрос порта для HTTP сервера (1-65535)
- Проверка доступности порта перед созданием
- Генерация или ручной ввод API ключа для аутентификации (автогенерация через openssl rand)
- Создание Python HTTP сервера с использованием http.server
- Валидация входящих данных (subject, message, from, to)
- Валидация email адресов через регулярные выражения
- Автоматическое определение типа контента (HTML или plain text) по наличию HTML тегов
- Формирование писем в формате RFC 2822 с автоматической установкой Content-Type (text/html или text/plain)
- Отправка писем через /usr/sbin/sendmail
- Создание systemd unit файла для автозапуска
- Сохранение конфигурации в endpoints.list
- URL:
http://localhost:{PORT}/send - Метод: POST
- Аутентификация: Заголовок
X-API-Keyс API ключом - Content-Type: application/json
- Тело запроса (JSON):
{ "from": "sender@example.com", "to": "recipient@example.com", "subject": "Тема письма", "message": "Текст сообщения или HTML контент" } - Поддержка HTML: Поле
messageможет содержать как обычный текст, так и HTML разметку. Система автоматически определяет тип контента по наличию HTML тегов и устанавливает соответствующий Content-Type заголовок (text/html или text/plain) - Ответ при успехе (200):
{ "status": "success", "message": "Email sent successfully", "from": "sender@example.com", "to": "recipient@example.com", "subject": "Тема письма" } - Ответ при ошибке (400/401/500):
{ "status": "error", "error": "Описание ошибки" } - Health check: GET
http://localhost:{PORT}/healthвозвращает статус сервиса
- Просмотр списка всех созданных endpoint с информацией о порте, статусе, API ключе, дате создания
- Запуск/остановка/перезапуск endpoint через systemctl
- Просмотр журналов endpoint через journalctl
- Показ примеров использования с curl
- Удаление endpoint с остановкой сервиса и очисткой файлов
- Автоматическое удаление endpoint'ов при полной очистке данных почтового сервера
- Аутентификация через API ключ в заголовке X-API-Key
- Валидация email адресов перед отправкой
- Проверка обязательных полей в запросе
- Логирование всех операций отправки писем
- Изоляция выполнения через systemd сервис