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

276 lines
9.3 KiB
Bash
Executable File
Raw 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
#===============================================================================
# ШАГ 14: НАСТРОЙКА LOGROTATE
#===============================================================================
# Запуск: sudo bash 02-k-git-server-deploy.14.sh
#
# Настраивает ротацию логов для:
# - Gitea
# - Nginx
# - msmtp
# - Скриптов установки
#===============================================================================
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
source "$SCRIPT_DIR/02-k-git-server-deploy.00.sh"
init_log
check_root
print_header "ШАГ 14: НАСТРОЙКА LOGROTATE"
#-------------------------------------------------------------------------------
# 14.1 Проверка установки logrotate
#-------------------------------------------------------------------------------
print_subheader "Проверка logrotate"
if is_installed logrotate; then
print_success "logrotate установлен"
else
print_info "Установка logrotate..."
apt install -y logrotate
fi
#-------------------------------------------------------------------------------
# 14.2 Настройка ротации логов Gitea
#-------------------------------------------------------------------------------
print_subheader "Настройка ротации логов Gitea"
GITEA_LOG_DIR="$GITEA_DATA/log"
# Создаём директорию если нет
mkdir -p "$GITEA_LOG_DIR"
chown git:git "$GITEA_LOG_DIR"
cat > /etc/logrotate.d/gitea << 'EOF'
# Logrotate configuration for Gitea
# Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh
/var/lib/gitea/log/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 git git
sharedscripts
postrotate
# Gitea не требует сигнала для reopening логов
# Она автоматически открывает новые файлы
endscript
}
EOF
print_success "Конфигурация Gitea создана: /etc/logrotate.d/gitea"
#-------------------------------------------------------------------------------
# 14.3 Настройка ротации логов Nginx
#-------------------------------------------------------------------------------
print_subheader "Настройка ротации логов Nginx"
# Проверяем существующую конфигурацию (обычно уже есть)
if [[ -f /etc/logrotate.d/nginx ]]; then
print_info "Nginx logrotate уже настроен"
# Показать текущую конфигурацию
echo ""
cat /etc/logrotate.d/nginx
else
cat > /etc/logrotate.d/nginx << 'EOF'
# Logrotate configuration for Nginx
# Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1 || true
endscript
}
EOF
print_success "Конфигурация Nginx создана: /etc/logrotate.d/nginx"
fi
#-------------------------------------------------------------------------------
# 14.4 Настройка ротации логов msmtp
#-------------------------------------------------------------------------------
print_subheader "Настройка ротации логов msmtp"
# Создаём лог-файл если нет
touch /var/log/msmtp.log
chmod 644 /var/log/msmtp.log
cat > /etc/logrotate.d/msmtp << 'EOF'
# Logrotate configuration for msmtp
# Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh
/var/log/msmtp.log {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
create 0644 root root
}
EOF
print_success "Конфигурация msmtp создана: /etc/logrotate.d/msmtp"
#-------------------------------------------------------------------------------
# 14.5 Настройка ротации логов установки
#-------------------------------------------------------------------------------
print_subheader "Настройка ротации логов установки"
cat > /etc/logrotate.d/git-server-setup << 'EOF'
# Logrotate configuration for Git Server Setup Scripts
# Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh
/var/log/git-server-deploy.log
/var/log/server-setup.log
{
monthly
missingok
rotate 6
compress
delaycompress
notifempty
create 0644 root root
}
EOF
print_success "Конфигурация setup logs создана: /etc/logrotate.d/git-server-setup"
#-------------------------------------------------------------------------------
# 14.6 Настройка ротации логов Fail2ban
#-------------------------------------------------------------------------------
print_subheader "Настройка ротации логов Fail2ban"
if is_installed fail2ban; then
# Проверяем существующую конфигурацию
if [[ -f /etc/logrotate.d/fail2ban ]]; then
print_info "Fail2ban logrotate уже настроен"
else
cat > /etc/logrotate.d/fail2ban << 'EOF'
# Logrotate configuration for Fail2ban
# Автоматически сгенерировано скриптом 02-k-git-server-deploy.14.sh
/var/log/fail2ban.log {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
create 0640 root adm
postrotate
/usr/bin/fail2ban-client flushlogs >/dev/null 2>&1 || true
endscript
}
EOF
print_success "Конфигурация Fail2ban создана: /etc/logrotate.d/fail2ban"
fi
else
print_info "Fail2ban не установлен, пропуск"
fi
#-------------------------------------------------------------------------------
# 14.7 Тестирование конфигурации
#-------------------------------------------------------------------------------
print_subheader "Тестирование конфигурации"
echo "Проверка всех конфигураций logrotate..."
echo ""
ALL_OK=true
for config in /etc/logrotate.d/gitea /etc/logrotate.d/nginx /etc/logrotate.d/msmtp /etc/logrotate.d/git-server-setup; do
if [[ -f "$config" ]]; then
if logrotate -d "$config" 2>&1 | head -5; then
echo -e " $(basename $config): ${GREEN}OK${NC}"
else
echo -e " $(basename $config): ${RED}ERROR${NC}"
ALL_OK=false
fi
fi
done
echo ""
if $ALL_OK; then
print_success "Все конфигурации валидны"
else
print_warning "Есть ошибки в конфигурациях"
fi
#-------------------------------------------------------------------------------
# 14.8 Принудительный запуск (опционально)
#-------------------------------------------------------------------------------
print_subheader "Тестовый запуск"
echo "Logrotate запускается автоматически через cron.daily"
echo ""
echo "Текущее расписание:"
if [[ -f /etc/cron.daily/logrotate ]]; then
echo " /etc/cron.daily/logrotate - запускается ежедневно"
fi
echo ""
read -p "Запустить logrotate сейчас (dry-run)? [y/N]: " RUN_NOW
if [[ "$RUN_NOW" =~ ^[Yy]$ ]]; then
print_info "Dry-run всех логов..."
logrotate -v /etc/logrotate.conf 2>&1 | tail -30
fi
#-------------------------------------------------------------------------------
# 14.9 Итог
#-------------------------------------------------------------------------------
echo ""
echo -e "${GREEN}============================================================${NC}"
echo -e "${GREEN} LOGROTATE НАСТРОЕН${NC}"
echo -e "${GREEN}============================================================${NC}"
echo ""
echo "Настроена ротация логов:"
echo ""
echo " Gitea: /var/lib/gitea/log/*.log"
echo " Ротация: ежедневно, хранить 14 дней"
echo ""
echo " Nginx: /var/log/nginx/*.log"
echo " Ротация: ежедневно, хранить 14 дней"
echo ""
echo " msmtp: /var/log/msmtp.log"
echo " Ротация: еженедельно, хранить 8 недель"
echo ""
echo " Setup scripts: /var/log/git-server-deploy.log"
echo " /var/log/server-setup.log"
echo " Ротация: ежемесячно, хранить 6 месяцев"
echo ""
echo "Конфигурационные файлы:"
echo " /etc/logrotate.d/gitea"
echo " /etc/logrotate.d/nginx"
echo " /etc/logrotate.d/msmtp"
echo " /etc/logrotate.d/git-server-setup"
echo ""
echo "Полезные команды:"
echo " Тест: logrotate -d /etc/logrotate.d/gitea"
echo " Принудительно: logrotate -f /etc/logrotate.conf"
echo " Статус: cat /var/lib/logrotate/status"
echo ""
print_success "Шаг 14 завершён: Logrotate настроен"