initial commit

This commit is contained in:
unknown
2026-02-19 20:05:04 +03:00
parent 1ee67d8159
commit 05097d5dda
32 changed files with 4413 additions and 3 deletions

278
02/02-k-git-server-deploy.13.sh Executable file
View File

@@ -0,0 +1,278 @@
#!/bin/bash
#===============================================================================
# ШАГ 13: НАСТРОЙКА ПОЧТЫ (msmtp)
#===============================================================================
# Запуск: sudo bash 02-k-git-server-deploy.13.sh
#
# msmtp - легковесный SMTP-клиент для отправки почты через внешний сервер
# Поддерживает: Gmail, Яндекс, Mail.ru, корпоративные SMTP
#===============================================================================
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
source "$SCRIPT_DIR/02-k-git-server-deploy.00.sh"
init_log
check_root
print_header "ШАГ 13: НАСТРОЙКА ПОЧТЫ (msmtp)"
#-------------------------------------------------------------------------------
# 13.1 Информация
#-------------------------------------------------------------------------------
print_subheader "Информация о решении"
echo "msmtp - легковесный SMTP-клиент (~0 MB RAM)"
echo ""
echo "Преимущества:"
echo " - Минимальное потребление ресурсов"
echo " - Отправка через надёжные внешние SMTP-серверы"
echo " - Не нужен DKIM/SPF/DMARC для своего домена"
echo " - Простая настройка"
echo ""
echo "Требуется внешний SMTP-сервер:"
echo " - Gmail (требует App Password)"
echo " - Яндекс.Почта"
echo " - Mail.ru"
echo " - Корпоративный SMTP"
echo ""
read -p "Продолжить настройку почты? [y/N]: " CONTINUE
if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then
print_info "Настройка почты пропущена"
exit 0
fi
#-------------------------------------------------------------------------------
# 13.2 Ввод параметров SMTP
#-------------------------------------------------------------------------------
print_subheader "Настройка SMTP"
echo "Выберите SMTP-провайдера:"
echo " 1) Gmail (требует App Password)"
echo " 2) Яндекс.Почта"
echo " 3) Mail.ru"
echo " 4) Корпоративный SMTP"
echo " 5) Пропустить (настроить позже)"
echo ""
read -p "Выбор [1-5]: " SMTP_CHOICE
case $SMTP_CHOICE in
1)
SMTP_HOST="smtp.gmail.com"
SMTP_PORT="587"
SMTP_TLS="on"
SMTP_STARTTLS="on"
read -p "Gmail адрес (user@gmail.com): " SMTP_USER
read -s -p "App Password (16 символов): " SMTP_PASS
echo ""
SMTP_FROM="$SMTP_USER"
;;
2)
SMTP_HOST="smtp.yandex.ru"
SMTP_PORT="587"
SMTP_TLS="on"
SMTP_STARTTLS="on"
read -p "Яндекс.Почта (user@yandex.ru): " SMTP_USER
read -s -p "Пароль приложения: " SMTP_PASS
echo ""
SMTP_FROM="$SMTP_USER"
;;
3)
SMTP_HOST="smtp.mail.ru"
SMTP_PORT="587"
SMTP_TLS="on"
SMTP_STARTTLS="on"
read -p "Mail.ru адрес (user@mail.ru): " SMTP_USER
read -s -p "Пароль приложения: " SMTP_PASS
echo ""
SMTP_FROM="$SMTP_USER"
;;
4)
read -p "SMTP хост: " SMTP_HOST
read -p "SMTP порт [587]: " SMTP_PORT
SMTP_PORT=${SMTP_PORT:-587}
read -p "SMTP пользователь: " SMTP_USER
read -s -p "SMTP пароль: " SMTP_PASS
echo ""
read -p "Email отправителя: " SMTP_FROM
SMTP_TLS="on"
SMTP_STARTTLS="on"
;;
5|*)
print_info "Настройка почты отложена"
echo ""
echo "Для ручной настройки отредактируйте:"
echo " /etc/msmtprc"
echo " /etc/gitea/app.ini"
exit 0
;;
esac
#-------------------------------------------------------------------------------
# 13.3 Установка msmtp
#-------------------------------------------------------------------------------
print_subheader "Установка msmtp"
install_packages msmtp msmtp-mta mailutils
print_success "msmtp установлен"
#-------------------------------------------------------------------------------
# 13.4 Создание конфигурации msmtp
#-------------------------------------------------------------------------------
print_subheader "Создание конфигурации msmtp"
# Backup существующей конфигурации
if [[ -f /etc/msmtprc ]]; then
cp /etc/msmtprc /etc/msmtprc.backup.$(date +%Y%m%d_%H%M%S)
fi
cat > /etc/msmtprc << EOF
# msmtp configuration for Git Server
# Автоматически сгенерировано скриптом 02-k-git-server-deploy.13.sh
# Общие настройки
defaults
auth on
tls ${SMTP_TLS}
tls_starttls ${SMTP_STARTTLS}
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
# Учётная запись по умолчанию
account default
host ${SMTP_HOST}
port ${SMTP_PORT}
user ${SMTP_USER}
password ${SMTP_PASS}
from ${SMTP_FROM}
EOF
# Права на файл (пароль!)
chmod 600 /etc/msmtprc
chown root:root /etc/msmtprc
print_success "Конфигурация msmtp создана"
#-------------------------------------------------------------------------------
# 13.5 Настройка алиасов
#-------------------------------------------------------------------------------
print_subheader "Настройка алиасов"
cat > /etc/aliases << EOF
# Почтовые алиасы
root: ${SMTP_FROM}
git: ${SMTP_FROM}
gitea: ${SMTP_FROM}
EOF
newaliases 2>/dev/null || true
print_success "Алиасы настроены"
#-------------------------------------------------------------------------------
# 13.6 Создание лог-файла
#-------------------------------------------------------------------------------
print_subheader "Создание лог-файла"
touch /var/log/msmtp.log
chmod 644 /var/log/msmtp.log
print_success "Лог-файл создан"
#-------------------------------------------------------------------------------
# 13.7 Тестовая отправка
#-------------------------------------------------------------------------------
print_subheader "Тестовая отправка письма"
echo ""
read -p "Email для тестовой отправки: " TEST_EMAIL
if [[ -n "$TEST_EMAIL" ]]; then
print_info "Отправка тестового письма на $TEST_EMAIL..."
TEST_SUBJECT="Gitea Server Mail Test"
TEST_BODY="This is a test email from Gitea Server ($(hostname)).
Sent at: $(date)
SMTP Host: $SMTP_HOST
SMTP User: $SMTP_USER"
if echo "$TEST_BODY" | mail -s "$TEST_SUBJECT" "$TEST_EMAIL"; then
print_success "Письмо отправлено. Проверьте почтовый ящик $TEST_EMAIL"
# Показать лог
sleep 2
if [[ -s /var/log/msmtp.log ]]; then
echo ""
echo "Лог отправки:"
tail -5 /var/log/msmtp.log
fi
else
print_error "Ошибка отправки письма"
echo "Проверьте лог: /var/log/msmtp.log"
fi
fi
#-------------------------------------------------------------------------------
# 13.8 Настройка Gitea
#-------------------------------------------------------------------------------
print_subheader "Настройка Gitea"
if [[ -f "$GITEA_CONFIG" ]]; then
# Backup
cp "$GITEA_CONFIG" "${GITEA_CONFIG}.backup.$(date +%Y%m%d_%H%M%S)"
# Обновить или добавить секцию [mailer]
# Удаляем старую секцию mailer если есть
sed -i '/^\[mailer\]/,/^\[/{/^\[mailer\]/d;/^\[/!d}' "$GITEA_CONFIG" 2>/dev/null || true
# Добавляем новую секцию
cat >> "$GITEA_CONFIG" << EOF
[mailer]
ENABLED = true
PROTOCOL = sendmail
SENDMAIL_PATH = /usr/bin/msmtp
SENDMAIL_ARGS = "-t"
FROM = $SMTP_FROM
SUBJECT_PREFIX = [Gitea]
EOF
print_success "Конфигурация Gitea обновлена"
# Перезапуск Gitea
read -p "Перезапустить Gitea? [Y/n]: " RESTART_GITEA
RESTART_GITEA=${RESTART_GITEA:-Y}
if [[ "$RESTART_GITEA" =~ ^[Yy]$ ]]; then
systemctl restart gitea
print_success "Gitea перезапущена"
fi
else
print_warning "Конфигурация Gitea не найдена: $GITEA_CONFIG"
fi
#-------------------------------------------------------------------------------
# 13.9 Итог
#-------------------------------------------------------------------------------
echo ""
echo -e "${GREEN}============================================================${NC}"
echo -e "${GREEN} ПОЧТОВЫЙ СЕРВЕР НАСТРОЕН${NC}"
echo -e "${GREEN}============================================================${NC}"
echo ""
echo "SMTP сервер: $SMTP_HOST:$SMTP_PORT"
echo "Пользователь: $SMTP_USER"
echo "Отправитель: $SMTP_FROM"
echo ""
echo "Файлы конфигурации:"
echo " msmtp: /etc/msmtprc"
echo " aliases: /etc/aliases"
echo " log: /var/log/msmtp.log"
echo ""
echo "Тест отправки:"
echo " echo 'Test body' | mail -s 'Test subject' user@example.com"
echo ""
echo "Gitea настройки:"
echo " Mailer включён, использует msmtp"
echo ""
print_success "Шаг 13 завершён: Почта настроена"