Files
gitserver/02/02-k-git-server-deploy.13.sh
2026-02-19 20:05:04 +03:00

279 lines
9.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 завершён: Почта настроена"