276 lines
9.3 KiB
Bash
Executable File
276 lines
9.3 KiB
Bash
Executable File
#!/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 настроен"
|