Add project and deployment instruction (docs/DEPLOYMENT.md)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
173
scripts/rebrand_precise.sh
Executable file
173
scripts/rebrand_precise.sh
Executable file
@@ -0,0 +1,173 @@
|
||||
#!/bin/bash
|
||||
# ТОЧНЫЙ ребрендинг Open WebUI для iiEasy
|
||||
# Находит и удаляет ВСЕ упоминания "(Open WebUI)" и "Open WebUI"
|
||||
# Только безопасные замены в текстовом контенте
|
||||
|
||||
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 "✓ Замена 'Open WebUI' на 'iiEasyWeb'"
|
||||
echo "✓ Исправление логотипов"
|
||||
echo ""
|
||||
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
||||
echo "Ошибка: Контейнер ${CONTAINER_NAME} не запущен."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "1. Замена логотипов и favicon..."
|
||||
|
||||
# Находим все места, где могут быть логотипы
|
||||
STATIC_DIRS=(
|
||||
"/app/web/build/_app/immutable"
|
||||
"/app/web/static"
|
||||
"/app/web/build"
|
||||
"/app/backend/static"
|
||||
)
|
||||
|
||||
for dir in "${STATIC_DIRS[@]}"; do
|
||||
if docker exec "${CONTAINER_NAME}" test -d "$dir" 2>/dev/null; then
|
||||
echo " Копирование в $dir..."
|
||||
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
||||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/logo.png" 2>/dev/null || true
|
||||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/logo.svg" 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "$MEDIA_DIR/favicon.png" ]; then
|
||||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${dir}/favicon.png" 2>/dev/null || true
|
||||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${dir}/favicon.ico" 2>/dev/null || true
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Заменяем существующие логотипы везде
|
||||
echo " Поиск и замена существующих логотипов..."
|
||||
EXISTING_LOGOS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "logo.png" -o -name "logo.svg" -o -name "logo.ico" \) 2>/dev/null)
|
||||
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
||||
echo "$EXISTING_LOGOS" | while read -r logo_file; do
|
||||
if [ -n "$logo_file" ] && [[ ! "$logo_file" == *"node_modules"* ]]; then
|
||||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
EXISTING_FAVICONS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "favicon.png" -o -name "favicon.ico" -o -name "favicon.svg" \) 2>/dev/null)
|
||||
if [ -f "$MEDIA_DIR/favicon.png" ]; then
|
||||
echo "$EXISTING_FAVICONS" | while read -r favicon_file; do
|
||||
if [ -n "$favicon_file" ] && [[ ! "$favicon_file" == *"node_modules"* ]]; then
|
||||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo "2. Поиск и удаление '(Open WebUI)' из ВСЕХ файлов..."
|
||||
|
||||
# Ищем ВСЕ файлы с упоминанием "(Open WebUI)" - включая скомпилированные
|
||||
# Ищем в разных вариантах написания
|
||||
docker exec "${CONTAINER_NAME}" find /app -type f \( -name "*.html" -o -name "*.svelte" -o -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" -o -name "*.json" -o -name "*.css" -o -name "*.mjs" \) \
|
||||
! -path "*/node_modules/*" ! -path "*/.next/*" \
|
||||
! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \
|
||||
2>/dev/null | while read file; do
|
||||
# Проверяем разные варианты написания - включая с пробелами и без
|
||||
if docker exec "${CONTAINER_NAME}" grep -qE "(Open WebUI)|\(Open WebUI\)|iiEasyWeb \(Open WebUI\)|iiEasyWeb\(Open WebUI\)" "$file" 2>/dev/null; then
|
||||
echo " Удаление '(Open WebUI)' из: $file"
|
||||
# Удаляем различные варианты написания в скобках
|
||||
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
|
||||
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
|
||||
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
|
||||
docker exec "${CONTAINER_NAME}" sed -i 's/iiEasyWeb(Open WebUI)/iiEasyWeb/g' "$file" 2>/dev/null || true
|
||||
# Также удаляем если есть пробелы вокруг
|
||||
docker exec "${CONTAINER_NAME}" sed -i 's/\s*(Open WebUI)\s*//g' "$file" 2>/dev/null || true
|
||||
# Удаляем если текст в кавычках или переменных
|
||||
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
|
||||
docker exec "${CONTAINER_NAME}" sed -i 's/`(Open WebUI)`//g' "$file" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo "3. Замена 'Open WebUI' на 'iiEasyWeb' в тексте..."
|
||||
|
||||
# Заменяем "Open WebUI" на "iiEasyWeb" в текстовом контенте
|
||||
docker exec "${CONTAINER_NAME}" find /app/web -type f \( -name "*.html" -o -name "*.svelte" -o -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" \) \
|
||||
! -path "*/node_modules/*" ! -path "*/.next/*" ! -path "*/dist/*" \
|
||||
2>/dev/null | while read file; do
|
||||
if docker exec "${CONTAINER_NAME}" grep -q "Open WebUI" "$file" 2>/dev/null; then
|
||||
echo " Замена в: $file"
|
||||
# Заменяем только в текстовом контенте, не в коде
|
||||
docker exec "${CONTAINER_NAME}" sed -i 's/Open WebUI/iiEasyWeb/g' "$file" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo "4. Удаление 'Powered by Open WebUI'..."
|
||||
|
||||
docker exec "${CONTAINER_NAME}" find /app -type f \( -name "*.html" -o -name "*.svelte" -o -name "*.js" -o -name "*.jsx" -o -name "*.ts" -o -name "*.tsx" \) \
|
||||
! -path "*/node_modules/*" ! -path "*/.next/*" ! -path "*/dist/*" \
|
||||
! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \
|
||||
2>/dev/null | while read file; do
|
||||
if docker exec "${CONTAINER_NAME}" grep -q "Powered by.*Open WebUI\|powered by.*Open WebUI" "$file" 2>/dev/null; then
|
||||
echo " Удаление футера из: $file"
|
||||
docker exec "${CONTAINER_NAME}" sed -i '/Powered by.*Open WebUI/d' "$file" 2>/dev/null || true
|
||||
docker exec "${CONTAINER_NAME}" sed -i '/powered by.*Open WebUI/d' "$file" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo "5. Поиск упоминаний в скомпилированных файлах (включая минифицированные)..."
|
||||
|
||||
# Ищем в скомпилированных JS файлах (могут быть минифицированы)
|
||||
# Также ищем в build директориях
|
||||
docker exec "${CONTAINER_NAME}" find /app/web/build -type f \( -name "*.js" -o -name "*.mjs" \) \
|
||||
! -path "*/node_modules/*" \
|
||||
2>/dev/null | while read file; do
|
||||
# Ищем разные варианты, включая минифицированные (без пробелов)
|
||||
if docker exec "${CONTAINER_NAME}" grep -qE "Open WebUI|\(Open WebUI\)|iiEasyWeb \(Open WebUI\)|OpenWebUI" "$file" 2>/dev/null; then
|
||||
echo " Обработка скомпилированного: $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)//g' "$file" 2>/dev/null || true
|
||||
docker exec "${CONTAINER_NAME}" sed -i 's/\(Open WebUI\)//g' "$file" 2>/dev/null || true
|
||||
docker exec "${CONTAINER_NAME}" sed -i 's/iiEasyWeb (Open WebUI)/iiEasyWeb/g' "$file" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo "6. Поиск в базе данных (если текст там хранится)..."
|
||||
|
||||
# Проверяем, может ли текст быть в базе данных
|
||||
# Если есть SQLite база, можем попробовать заменить там
|
||||
DB_PATH="/app/backend/data/webui.db"
|
||||
if docker exec "${CONTAINER_NAME}" test -f "$DB_PATH" 2>/dev/null; then
|
||||
echo " Найдена база данных, проверяем наличие '(Open WebUI)'..."
|
||||
# Ищем в базе через sqlite3 (если доступен)
|
||||
if docker exec "${CONTAINER_NAME}" command -v sqlite3 >/dev/null 2>&1; then
|
||||
# Ищем в текстовых полях базы
|
||||
docker exec "${CONTAINER_NAME}" sqlite3 "$DB_PATH" "SELECT name FROM sqlite_master WHERE type='table';" 2>/dev/null | while read table; do
|
||||
if [ -n "$table" ]; then
|
||||
# Пытаемся найти и заменить в текстовых полях (осторожно!)
|
||||
echo " Проверка таблицы: $table"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "6. Перезапуск контейнера..."
|
||||
|
||||
docker restart "${CONTAINER_NAME}" >/dev/null 2>&1 || {
|
||||
echo "Предупреждение: Перезапустите вручную: docker restart ${CONTAINER_NAME}"
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "=== ТОЧНЫЙ ребрендинг завершен! ==="
|
||||
echo ""
|
||||
echo "Проверьте:"
|
||||
echo " 1. Откройте https://odo.iieasy.ru"
|
||||
echo " 2. Должно быть 'Войти в iiEasyWeb' (без '(Open WebUI)')"
|
||||
echo " 3. Логотип должен отображаться правильно"
|
||||
echo ""
|
||||
echo "Если '(Open WebUI)' все еще видно, очистите кеш браузера (Ctrl+Shift+Delete)"
|
||||
Reference in New Issue
Block a user