279 lines
9.6 KiB
Bash
Executable File
279 lines
9.6 KiB
Bash
Executable File
#!/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 завершён: Почта настроена"
|