213 lines
12 KiB
Bash
213 lines
12 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# ФИНАЛЬНЫЙ ребрендинг - удаляет ВСЕ упоминания и меняет ссылки на документацию
|
|||
|
|
|
|||
|
|
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 "✓ Замена ссылок на документацию на note.iieasy.ru"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
|||
|
|
echo "Ошибка: Контейнер ${CONTAINER_NAME} не запущен."
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "1. Замена логотипов..."
|
|||
|
|
|
|||
|
|
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
|
|||
|
|
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
|||
|
|
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/logo.png" 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
|
|||
|
|
|
|||
|
|
# Заменяем все существующие логотипы
|
|||
|
|
EXISTING_LOGOS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "logo.png" -o -name "logo.svg" \) 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
|
|||
|
|
|
|||
|
|
echo "2. АГРЕССИВНОЕ удаление '(Open WebUI)' из ВСЕХ файлов..."
|
|||
|
|
|
|||
|
|
# Ищем ВО ВСЕХ файлах, включая бинарные (может быть в строковых константах)
|
|||
|
|
docker exec "${CONTAINER_NAME}" find /app -type f \
|
|||
|
|
! -path "*/node_modules/*" ! -path "*/.next/*" \
|
|||
|
|
! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \
|
|||
|
|
! -name "*.pyc" ! -name "*.pyo" ! -name "*.so" \
|
|||
|
|
2>/dev/null | while read file; do
|
|||
|
|
# Проверяем, это текстовый файл
|
|||
|
|
if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then
|
|||
|
|
if docker exec "${CONTAINER_NAME}" grep -qE "(Open WebUI)|\(Open WebUI\)|iiEasyWeb.*Open.*WebUI" "$file" 2>/dev/null; then
|
|||
|
|
echo " Удаление из: $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/'(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
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
echo "3. Замена ссылок на документацию на note.iieasy.ru..."
|
|||
|
|
|
|||
|
|
# Заменяем ссылки на документацию
|
|||
|
|
docker exec "${CONTAINER_NAME}" find /app -type f \
|
|||
|
|
! -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}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then
|
|||
|
|
if docker exec "${CONTAINER_NAME}" grep -qE "docs\.openwebui\.com|open-webui\.com/docs|github\.com/open-webui/docs" "$file" 2>/dev/null; then
|
|||
|
|
echo " Замена ссылок на документацию в: $file"
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|https://docs.openwebui.com|https://note.iieasy.ru|g' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|https://open-webui.com/docs|https://note.iieasy.ru|g' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|https://github.com/open-webui/docs|https://note.iieasy.ru|g' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|docs\.openwebui\.com|note.iieasy.ru|g' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|open-webui\.com/docs|note.iieasy.ru|g' "$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
echo "4. Замена 'Open WebUI' на 'iiEasyWeb' в тексте..."
|
|||
|
|
|
|||
|
|
docker exec "${CONTAINER_NAME}" find /app/web -type f \
|
|||
|
|
! -path "*/node_modules/*" ! -path "*/.next/*" \
|
|||
|
|
2>/dev/null | while read file; do
|
|||
|
|
if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then
|
|||
|
|
if docker exec "${CONTAINER_NAME}" grep -q "Open WebUI" "$file" 2>/dev/null; then
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's/Open WebUI/iiEasyWeb/g' "$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
echo "5. Проверка базы данных..."
|
|||
|
|
|
|||
|
|
# Пытаемся найти и исправить в базе данных
|
|||
|
|
DB_PATH="/app/backend/data/webui.db"
|
|||
|
|
if docker exec "${CONTAINER_NAME}" test -f "$DB_PATH" 2>/dev/null; then
|
|||
|
|
echo " Найдена база данных, проверяем..."
|
|||
|
|
if docker exec "${CONTAINER_NAME}" command -v sqlite3 >/dev/null 2>&1; then
|
|||
|
|
# Ищем таблицы с текстовыми полями
|
|||
|
|
TABLES=$(docker exec "${CONTAINER_NAME}" sqlite3 "$DB_PATH" "SELECT name FROM sqlite_master WHERE type='table';" 2>/dev/null)
|
|||
|
|
echo "$TABLES" | while read table; do
|
|||
|
|
if [ -n "$table" ]; then
|
|||
|
|
# Пытаемся найти и заменить в текстовых полях
|
|||
|
|
docker exec "${CONTAINER_NAME}" sqlite3 "$DB_PATH" "UPDATE $table SET value = REPLACE(value, '(Open WebUI)', '') WHERE value LIKE '%(Open WebUI)%';" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sqlite3 "$DB_PATH" "UPDATE $table SET value = REPLACE(value, 'Open WebUI', 'iiEasyWeb') WHERE value LIKE '%Open WebUI%';" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "6. Удаление социальных сетей, GitHub и лицензии из футера..."
|
|||
|
|
|
|||
|
|
# Удаляем Discord
|
|||
|
|
docker exec "${CONTAINER_NAME}" find /app -type f \
|
|||
|
|
! -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}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then
|
|||
|
|
if docker exec "${CONTAINER_NAME}" grep -qE "discord\.gg|discord\.com|Discord" "$file" 2>/dev/null; then
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/discord\.gg/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/discord\.com/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/Discord/d' "$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# Удаляем Twitter/X
|
|||
|
|
docker exec "${CONTAINER_NAME}" find /app -type f \
|
|||
|
|
! -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}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then
|
|||
|
|
if docker exec "${CONTAINER_NAME}" grep -qE "twitter\.com|x\.com|X \(formerly Twitter\)|Twitter|Follow" "$file" 2>/dev/null; then
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/twitter\.com/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/x\.com/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/X (formerly Twitter)/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/Twitter/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/Follow/d' "$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# Удаляем GitHub Repo
|
|||
|
|
docker exec "${CONTAINER_NAME}" find /app -type f \
|
|||
|
|
! -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}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then
|
|||
|
|
if docker exec "${CONTAINER_NAME}" grep -qE "Github Repo|GitHub Repo" "$file" 2>/dev/null; then
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/Github Repo/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/GitHub Repo/d' "$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# Удаляем лицензию
|
|||
|
|
docker exec "${CONTAINER_NAME}" find /app -type f \
|
|||
|
|
! -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}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then
|
|||
|
|
if docker exec "${CONTAINER_NAME}" grep -qE "лицензионный тарифный план|Перейдите на лицензионный|Лицензия" "$file" 2>/dev/null; then
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/лицензионный тарифный план/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/Перейдите на лицензионный/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/расширенные возможности/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/настраиваемую тематику/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/фирменный стиль/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/специальную поддержку/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/Лицензия/d' "$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "7. Перезапуск контейнера..."
|
|||
|
|
|
|||
|
|
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. Ссылки на документацию должны вести на note.iieasy.ru"
|
|||
|
|
echo ""
|
|||
|
|
echo "ВАЖНО: Очистите кеш браузера (Ctrl+Shift+Delete)"
|
|||
|
|
echo ""
|
|||
|
|
echo "Если '(Open WebUI)' все еще видно, проверьте через Admin Panel:"
|
|||
|
|
echo " Settings → Appearance → Site Title"
|