Files
iiEsaywebUI/scripts/rebrand_full.sh
2026-02-19 18:12:09 +00:00

210 lines
11 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
# ПОЛНЫЙ ребрендинг Open WebUI для iiEasy
# Удаляет ВСЕ упоминания Open WebUI из интерфейса, но защищает OAuth
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 "⚠ Удаление ВСЕХ упоминаний Open WebUI из интерфейса"
echo "⚠ 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..."
# Определяем пути для статических файлов
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
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")
else
STATIC_DIR="/app/web/build/_app/immutable"
docker exec "${CONTAINER_NAME}" mkdir -p "$STATIC_DIR" 2>/dev/null || true
fi
fi
# Копирование логотипов
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
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
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)
if [ -f "$MEDIA_DIR/favicon.png" ]; then
echo "$EXISTING_FAVICONS" | while read -r favicon_file; do
if [ -n "$favicon_file" ]; then
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
if [ -f "$MEDIA_DIR/logo.png" ]; then
echo "$EXISTING_LOGOS" | while read -r logo_file; do
if [ -n "$logo_file" ]; then
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
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 "2. Удаление упоминаний 'Open WebUI' из фронтенда (HTML/JS/TSX/Svelte)..."
# КРИТИЧНО: Изменяем ТОЛЬКО фронтенд файлы (веб-интерфейс)
# НЕ трогаем Python бэкенд файлы вообще, кроме исключений для безопасности
docker exec "${CONTAINER_NAME}" find /app/web -type f \( -name "*.html" -o -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" -o -name "*.svelte" -o -name "*.json" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" ! -path "*/dist/*" \
2>/dev/null | while read file; do
# Проверяем, содержит ли файл упоминания Open WebUI
if docker exec "${CONTAINER_NAME}" grep -q "Open WebUI\|open-webui\|openwebui\|\(Open WebUI\)" "$file" 2>/dev/null; then
echo " Обработка фронтенд: $file"
# Замена "Open WebUI" на "iiEasyWeb"
docker exec "${CONTAINER_NAME}" sed -i 's/Open WebUI/iiEasyWeb/g' "$file" 2>/dev/null || true
# Удаление "(Open WebUI)" в скобках
docker exec "${CONTAINER_NAME}" sed -i 's/(Open WebUI)//g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's/\(Open WebUI\)//g' "$file" 2>/dev/null || true
# Замена "iiEasyWeb (Open WebUI)" на "iiEasyWeb"
docker exec "${CONTAINER_NAME}" sed -i 's/iiEasyWeb (Open WebUI)/iiEasyWeb/g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's/iiEasyWeb \(Open WebUI\)/iiEasyWeb/g' "$file" 2>/dev/null || true
# Удаление "open-webui" и "openwebui" в тексте (но не в URL - они обычно в кавычках или переменных)
docker exec "${CONTAINER_NAME}" sed -i 's/open-webui/iieasyweb/g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's/openwebui/iieasyweb/g' "$file" 2>/dev/null || true
fi
done
echo "3. Удаление упоминаний из статических JSON файлов конфигурации..."
# Изменяем только JSON файлы конфигурации фронтенда (не бэкенд)
docker exec "${CONTAINER_NAME}" find /app/web -type f -name "*.json" \
! -path "*/node_modules/*" ! -path "*/.next/*" ! -path "*/dist/*" \
2>/dev/null | while read file; do
if docker exec "${CONTAINER_NAME}" grep -q "Open WebUI\|open-webui\|openwebui" "$file" 2>/dev/null; then
echo " Обработка JSON: $file"
docker exec "${CONTAINER_NAME}" sed -i 's/Open WebUI/iiEasyWeb/g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's/open-webui/iieasyweb/g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's/openwebui/iieasyweb/g' "$file" 2>/dev/null || true
fi
done
echo "4. Удаление 'Powered by' футеров из фронтенда..."
docker exec "${CONTAINER_NAME}" find /app/web -type f \( -name "*.html" -o -name "*.js" -o -name "*.tsx" -o -name "*.jsx" -o -name "*.svelte" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" ! -path "*/dist/*" \
2>/dev/null | while read file; do
if docker exec "${CONTAINER_NAME}" grep -q "Powered by\|powered by" "$file" 2>/dev/null; then
echo " Удаление футера из: $file"
docker exec "${CONTAINER_NAME}" sed -i '/Powered by.*[Oo]pen.*[Ww]eb[Uu][Ii]/d' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i '/powered by.*[Oo]pen.*[Ww]eb[Uu][Ii]/d' "$file" 2>/dev/null || true
fi
done
echo "5. Отключение проверки обновлений (только фронтенд)..."
docker exec "${CONTAINER_NAME}" find /app/web -type f \( -name "*.js" -o -name "*.ts" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" ! -path "*/dist/*" \
-exec grep -l "github.com.*releases\|check.*update\|update.*check" {} \; 2>/dev/null | while read file; do
echo " Отключение проверки обновлений в: $file"
docker exec "${CONTAINER_NAME}" sed -i 's|https://api.github.com/repos/open-webui|# https://api.github.com/repos/open-webui|g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's|github.com/open-webui|# github.com/open-webui|g' "$file" 2>/dev/null || true
done
echo ""
echo "⚠ ВАЖНО: Python бэкенд файлы НЕ изменялись"
echo "⚠ OAuth/Authentik файлы защищены"
echo "⚠ Изменены только фронтенд файлы (веб-интерфейс)"
echo ""
echo "6. Перезапуск контейнера..."
docker restart "${CONTAINER_NAME}" >/dev/null 2>&1 || {
echo "Предупреждение: Не удалось перезапустить контейнер автоматически."
echo "Перезапустите вручную: docker restart ${CONTAINER_NAME}"
}
echo ""
echo "=== ПОЛНЫЙ ребрендинг завершен! ==="
echo ""
echo "Проверьте:"
echo " 1. Откройте https://odo.iieasy.ru"
echo " 2. Проверьте отсутствие упоминаний 'Open WebUI'"
echo " 3. Проверьте OAuth - должен работать нормально"
echo ""
echo "Если OAuth не работает, пересоздайте контейнер:"
echo " sudo docker compose stop open-webui"
echo " sudo docker compose rm -f open-webui"
echo " sudo docker compose up -d open-webui"