153 lines
7.1 KiB
Bash
Executable File
153 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# БЕЗОПАСНЫЙ скрипт ребрендинга Open WebUI для iiEasy
|
||
# Только логотипы и favicon, БЕЗ изменения кода Python/JS
|
||
|
||
set -e
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
MEDIA_DIR="$PROJECT_DIR/media"
|
||
CONTAINER_NAME="open-webui"
|
||
|
||
echo "=== БЕЗОПАСНЫЙ ребрендинг Open WebUI для iiEasy ==="
|
||
echo "⚠ ВНИМАНИЕ: Этот скрипт изменяет ТОЛЬКО логотипы и favicon"
|
||
echo "⚠ Код Python/JS НЕ изменяется для защиты OAuth/Authentik"
|
||
echo ""
|
||
|
||
# Проверка наличия контейнера
|
||
if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
||
echo "Ошибка: Контейнер ${CONTAINER_NAME} не найден. Запустите docker-compose up -d сначала."
|
||
exit 1
|
||
fi
|
||
|
||
# Проверка, что контейнер запущен
|
||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
||
echo "Ошибка: Контейнер ${CONTAINER_NAME} не запущен. Запустите docker-compose up -d."
|
||
exit 1
|
||
fi
|
||
|
||
echo "1. Замена логотипов и favicon..."
|
||
|
||
# Определяем пути для статических файлов в Open WebUI
|
||
STATIC_DIRS=(
|
||
"/app/web/build/_app/immutable"
|
||
"/app/web/static"
|
||
"/app/web/build"
|
||
"/app/backend/static"
|
||
"/app/static"
|
||
"/app/public"
|
||
)
|
||
|
||
# Находим существующую директорию со статическими файлами
|
||
STATIC_DIR=""
|
||
for dir in "${STATIC_DIRS[@]}"; do
|
||
if docker exec "${CONTAINER_NAME}" test -d "$dir" 2>/dev/null; then
|
||
STATIC_DIR="$dir"
|
||
echo " Найдена директория статических файлов: $STATIC_DIR"
|
||
break
|
||
fi
|
||
done
|
||
|
||
if [ -z "$STATIC_DIR" ]; then
|
||
echo " Предупреждение: Директория статических файлов не найдена, пробуем найти через поиск favicon..."
|
||
FAVICON_PATH=$(docker exec "${CONTAINER_NAME}" find /app -name "favicon.png" -o -name "favicon.ico" 2>/dev/null | head -1)
|
||
if [ -n "$FAVICON_PATH" ]; then
|
||
STATIC_DIR=$(dirname "$FAVICON_PATH")
|
||
echo " Найдена директория через поиск favicon: $STATIC_DIR"
|
||
else
|
||
STATIC_DIR="/app/web/build/_app/immutable"
|
||
echo " Используем стандартный путь: $STATIC_DIR"
|
||
docker exec "${CONTAINER_NAME}" mkdir -p "$STATIC_DIR" 2>/dev/null || true
|
||
fi
|
||
fi
|
||
|
||
# Копирование логотипов (приоритет: PNG > SVG)
|
||
for target_dir in "$STATIC_DIR" "/app/web/build/_app/immutable" "/app/web/static" "/app/web/build"; do
|
||
if docker exec "${CONTAINER_NAME}" test -d "$target_dir" 2>/dev/null || [ "$target_dir" = "$STATIC_DIR" ]; then
|
||
echo " Копирование в $target_dir..."
|
||
|
||
# Логотипы
|
||
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${target_dir}/logo.png" 2>/dev/null || true
|
||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${target_dir}/logo.svg" 2>/dev/null || true
|
||
elif [ -f "$MEDIA_DIR/logo-light.svg" ]; then
|
||
docker cp "$MEDIA_DIR/logo-light.svg" "${CONTAINER_NAME}:${target_dir}/logo.svg" 2>/dev/null || true
|
||
fi
|
||
|
||
if [ -f "$MEDIA_DIR/logo-dark.svg" ]; then
|
||
docker cp "$MEDIA_DIR/logo-dark.svg" "${CONTAINER_NAME}:${target_dir}/logo-dark.svg" 2>/dev/null || true
|
||
fi
|
||
|
||
# Favicon
|
||
if [ -f "$MEDIA_DIR/favicon.ico" ]; then
|
||
docker cp "$MEDIA_DIR/favicon.ico" "${CONTAINER_NAME}:${target_dir}/favicon.ico" 2>/dev/null || true
|
||
elif [ -f "$MEDIA_DIR/favicon.png" ]; then
|
||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${target_dir}/favicon.png" 2>/dev/null || true
|
||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${target_dir}/favicon.ico" 2>/dev/null || true
|
||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${target_dir}/favicon-96x96.png" 2>/dev/null || true
|
||
elif [ -f "$MEDIA_DIR/favicon.svg" ]; then
|
||
docker cp "$MEDIA_DIR/favicon.svg" "${CONTAINER_NAME}:${target_dir}/favicon.svg" 2>/dev/null || true
|
||
fi
|
||
fi
|
||
done
|
||
|
||
# Поиск и замена существующих favicon и logo файлов
|
||
echo " Поиск существующих favicon и logo файлов для замены..."
|
||
EXISTING_FAVICONS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "favicon.png" -o -name "favicon.ico" -o -name "favicon.svg" \) 2>/dev/null | head -10)
|
||
EXISTING_LOGOS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "logo.png" -o -name "logo.svg" \) 2>/dev/null | head -10)
|
||
|
||
# Заменяем существующие favicon файлы
|
||
if [ -f "$MEDIA_DIR/favicon.png" ]; then
|
||
echo "$EXISTING_FAVICONS" | while read -r favicon_file; do
|
||
if [ -n "$favicon_file" ]; then
|
||
echo " Замена: $favicon_file"
|
||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
|
||
favicon_dir=$(dirname "$favicon_file")
|
||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${favicon_dir}/favicon.ico" 2>/dev/null || true
|
||
fi
|
||
done
|
||
fi
|
||
|
||
# Заменяем существующие logo файлы
|
||
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
||
echo "$EXISTING_LOGOS" | while read -r logo_file; do
|
||
if [ -n "$logo_file" ]; then
|
||
echo " Замена: $logo_file"
|
||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true
|
||
fi
|
||
done
|
||
fi
|
||
|
||
# Копируем в public директории
|
||
PUBLIC_DIRS=(
|
||
"/app/web/public"
|
||
"/app/public"
|
||
"/app/backend/public"
|
||
)
|
||
|
||
for pub_dir in "${PUBLIC_DIRS[@]}"; do
|
||
if docker exec "${CONTAINER_NAME}" test -d "$pub_dir" 2>/dev/null; then
|
||
echo " Копирование в $pub_dir..."
|
||
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${pub_dir}/logo.png" 2>/dev/null || true
|
||
fi
|
||
if [ -f "$MEDIA_DIR/favicon.png" ]; then
|
||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${pub_dir}/favicon.png" 2>/dev/null || true
|
||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${pub_dir}/favicon.ico" 2>/dev/null || true
|
||
fi
|
||
break
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
echo "=== БЕЗОПАСНЫЙ ребрендинг завершен! ==="
|
||
echo ""
|
||
echo "⚠ Изменены ТОЛЬКО логотипы и favicon"
|
||
echo "⚠ Код Python/JS НЕ изменялся - OAuth/Authentik защищены"
|
||
echo ""
|
||
echo "Рекомендуется использовать Admin Panel для постоянных изменений:"
|
||
echo " Settings → Appearance → Logo (загрузите файлы из /app/media/)"
|
||
echo ""
|
||
echo "Если нужно изменить текст интерфейса, используйте Admin Panel или"
|
||
echo "настройте переменные окружения в docker-compose.yml"
|