Add project and deployment instruction (docs/DEPLOYMENT.md)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ars
2026-02-19 18:12:09 +00:00
commit 53c572ef46
94 changed files with 9200 additions and 0 deletions

212
scripts/rebrand_final.sh Executable file
View File

@@ -0,0 +1,212 @@
#!/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"