Преглед изворни кода

feat: Добавил ежедневную ротацию для логов Odoo

morikoff пре 22 часа
родитељ
комит
3b1839aaf1
1 измењених фајлова са 34 додато и 11 уклоњено
  1. 34 11
      odoo19_install_debian13.sh

+ 34 - 11
odoo19_install_debian13.sh

@@ -7,6 +7,7 @@
 # - wkhtmltopdf (нативная сборка для Bookworm/Trixie)
 # - venv, systemd, конфиг в /etc/odoo/
 # - обновление только баз, принадлежащих пользователю odoo
+# - автоматическая ежедневная ротация логов через logrotate
 #-------------------------------------------------------------------------------
 # Сделайте скрипт исполняемым: chmod +x odoo19_install_debian13.sh
 # Использование: sudo ./odoo19_install_debian13.sh {install|update|uninstall}
@@ -26,7 +27,7 @@ OE_VERSION="19.0"
 OE_PORT="8069"
 OE_SUPERADMIN="admin"
 GENERATE_RANDOM_PASSWORD="True"
-UPDATE_MODE="False"   # флаг для режима обновления
+UPDATE_MODE="False"
 
 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
 ODOO_ARCHIVE=$(ls -t "$SCRIPT_DIR"/odoo_19.0+e.*.tar.gz 2>/dev/null | head -n1)
@@ -90,14 +91,12 @@ extract_odoo() {
 
 extract_custom() {
     if [[ -n "$CUSTOM_ARCHIVE" && -f "$CUSTOM_ARCHIVE" ]]; then
-        # Если это обновление и папка уже существует, спрашиваем
         if [[ "$UPDATE_MODE" == "True" ]] && [[ -d "$OE_HOME/custom-addons/clean_enterprise" ]]; then
             read -p "Обновить кастомные модули (папка clean_enterprise уже существует)? (y/N): " confirm
             if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
                 log_info "Пропускаем обновление кастомных модулей."
                 return
             fi
-            # Если подтвердили, удаляем папку
             rm -rf "$OE_HOME/custom-addons/clean_enterprise"
         fi
 
@@ -177,9 +176,27 @@ EOF
     sleep 3
 }
 
+# Настройка logrotate для ежедневной ротации логов Odoo
+setup_logrotate() {
+    log_info "Настройка logrotate для /var/log/${OE_USER}/${OE_SERVER}.log"
+    cat > /etc/logrotate.d/${OE_SERVER} <<EOF
+/var/log/${OE_USER}/${OE_SERVER}.log {
+    daily
+    rotate 7
+    compress
+    missingok
+    notifempty
+    create 0640 ${OE_USER} ${OE_USER}
+    postrotate
+        systemctl reload ${OE_SERVER} > /dev/null 2>&1 || true
+    endscript
+}
+EOF
+    log_info "logrotate настроен: ежедневная ротация, хранение 7 дней, сжатие."
+}
+
 update_databases() {
     log_info "Обновление модулей во всех базах данных пользователя $OE_USER"
-    # Выбираем только те базы, владельцем которых является пользователь odoo
     OE_DBS=$(sudo -Hiu postgres psql -tAc "SELECT datname FROM pg_database WHERE datdba = (SELECT oid FROM pg_roles WHERE rolname='$OE_USER')")
     if [[ -n "$OE_DBS" ]]; then
         for db in $OE_DBS; do
@@ -217,11 +234,10 @@ do_install() {
         libssl-dev libffi-dev libxml2-dev libxslt1-dev \
         libzip-dev libldap2-dev libsasl2-dev libpq-dev \
         libjpeg-dev zlib1g-dev libpng-dev \
-        nodejs npm gdebi-core curl unzip
+        nodejs npm gdebi-core curl unzip logrotate
 
-    # 3. PostgreSQL 16 (установка, кластер уже не требует добавления репозитория)
+    # 3. PostgreSQL 16
     log_info "Установка PostgreSQL 16"
-    # Убедимся, что системный пользователь postgres существует
     if ! id "postgres" &>/dev/null; then
         log_info "Создание системного пользователя postgres"
         adduser --system --quiet --shell=/bin/bash --home=/var/lib/postgresql --group postgres
@@ -275,12 +291,15 @@ do_install() {
     create_config
     create_service
 
+    # 11. Настройка logrotate
+    setup_logrotate
+
     echo "-----------------------------------------------------------"
     echo "УСТАНОВКА ЗАВЕРШЕНА"
     echo "Веб-интерфейс: http://$(hostname -I | awk '{print $1}'):$OE_PORT"
     echo "Мастер-пароль: $OE_SUPERADMIN"
     echo "Конфиг: $OE_CONFIG_FILE"
-    echo "Логи: /var/log/${OE_USER}/${OE_SERVER}.log"
+    echo "Логи: /var/log/${OE_USER}/${OE_SERVER}.log (ротация ежедневная, 7 дней)"
     echo "Управление: systemctl {start|stop|restart|status} ${OE_SERVER}"
     echo "-----------------------------------------------------------"
 }
@@ -347,10 +366,14 @@ do_uninstall() {
     rm -f /usr/bin/wkhtmltopdf /usr/bin/wkhtmltoimage
     log_info "wkhtmltopdf и симлинки удалены"
 
-    # 6. (Опционально) Удаление глобальных npm-пакетов
+    # 6. Удаление настройки logrotate
+    rm -f /etc/logrotate.d/${OE_SERVER}
+    log_info "Настройка logrotate удалена"
+
+    # 7. (Опционально) Удаление глобальных npm-пакетов
     # npm uninstall -g less less-plugin-clean-css rtlcss
 
-    # 7. Удаление пользователя PostgreSQL и баз
+    # 8. Удаление пользователя PostgreSQL и баз
     read -p "Удалить пользователя PostgreSQL 'odoo' и его базы? (y/N): " del_pg
     if [[ "$del_pg" =~ ^[Yy]$ ]]; then
         if id "postgres" &>/dev/null; then
@@ -363,7 +386,7 @@ do_uninstall() {
         fi
     fi
 
-    # 8. Удаление PostgreSQL полностью (опционально)
+    # 9. Удаление PostgreSQL полностью (опционально)
     read -p "Удалить PostgreSQL полностью? (y/N): " del_pg_all
     if [[ "$del_pg_all" =~ ^[Yy]$ ]]; then
         apt-get purge -y postgresql-16 postgresql-client-16 postgresql-server-dev-16