Add project and deployment instruction (docs/DEPLOYMENT.md)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
126
scripts/rebrand_careful.sh
Executable file
126
scripts/rebrand_careful.sh
Executable file
@@ -0,0 +1,126 @@
|
||||
#!/bin/bash
|
||||
# ОЧЕНЬ АККУРАТНЫЙ ребрендинг Open WebUI для iiEasy
|
||||
# Только безопасные замены текста, НЕ трогает код
|
||||
|
||||
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 "⚠ Только безопасные замены текста в интерфейсе"
|
||||
echo "⚠ Код Python/JS НЕ изменяется"
|
||||
echo "⚠ OAuth/Authentik полностью защищены"
|
||||
echo ""
|
||||
|
||||
# Проверка наличия контейнера
|
||||
if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
||||
echo "Ошибка: Контейнер ${CONTAINER_NAME} не найден."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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"
|
||||
)
|
||||
|
||||
STATIC_DIR=""
|
||||
for dir in "${STATIC_DIRS[@]}"; do
|
||||
if docker exec "${CONTAINER_NAME}" test -d "$dir" 2>/dev/null; then
|
||||
STATIC_DIR="$dir"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$STATIC_DIR" ]; then
|
||||
FAVICON_PATH=$(docker exec "${CONTAINER_NAME}" find /app/web -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"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Копирование логотипов
|
||||
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
||||
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${STATIC_DIR}/logo.png" 2>/dev/null || true
|
||||
fi
|
||||
if [ -f "$MEDIA_DIR/favicon.png" ]; then
|
||||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${STATIC_DIR}/favicon.png" 2>/dev/null || true
|
||||
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${STATIC_DIR}/favicon.ico" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo "2. Замена текста 'Open WebUI' на 'iiEasyWeb' ТОЛЬКО в HTML/текстовых строках..."
|
||||
|
||||
# ТОЛЬКО фронтенд HTML/Svelte файлы - заменяем только в текстовом контенте
|
||||
docker exec "${CONTAINER_NAME}" find /app/web -type f \( -name "*.html" -o -name "*.svelte" \) \
|
||||
! -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 " HTML/Svelte: $file"
|
||||
# Заменяем только "Open WebUI" (с заглавными) в тексте, не трогаем код
|
||||
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
|
||||
fi
|
||||
done
|
||||
|
||||
echo "3. Удаление '(Open WebUI)' из текста интерфейса..."
|
||||
|
||||
# Только удаляем текст в скобках из HTML
|
||||
docker exec "${CONTAINER_NAME}" find /app/web -type f \( -name "*.html" -o -name "*.svelte" \) \
|
||||
! -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)//g' "$file" 2>/dev/null || true
|
||||
fi
|
||||
done
|
||||
|
||||
echo "4. Удаление 'Powered by Open WebUI' футеров..."
|
||||
|
||||
# Только удаляем строки с "Powered by"
|
||||
docker exec "${CONTAINER_NAME}" find /app/web -type f \( -name "*.html" -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.*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 ""
|
||||
echo "✓ Изменены ТОЛЬКО текстовые строки в HTML/Svelte"
|
||||
echo "✓ Код Python/JS НЕ изменялся"
|
||||
echo "✓ OAuth/Authentik полностью защищены"
|
||||
echo ""
|
||||
|
||||
echo "5. Перезапуск контейнера..."
|
||||
|
||||
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. Все должно работать нормально"
|
||||
echo " 3. Текст 'Open WebUI' заменен на 'iiEasyWeb' в интерфейсе"
|
||||
echo ""
|
||||
echo "Если что-то не работает, пересоздайте контейнер:"
|
||||
echo " sudo docker compose stop open-webui"
|
||||
echo " sudo docker compose rm -f open-webui"
|
||||
echo " sudo docker compose up -d open-webui"
|
||||
Reference in New Issue
Block a user