feat: Go backend, enhanced search, new widgets, Docker deploy

Major changes:
- Add Go backend (backend/) with microservices architecture
- Enhanced master-agents-svc: reranker, content-classifier, stealth-crawler,
  proxy-manager, media-search, fastClassifier, language detection
- New web-svc widgets: KnowledgeCard, ProductCard, ProfileCard, VideoCard,
  UnifiedCard, CardGallery, InlineImageGallery, SourcesPanel, RelatedQuestions
- Improved discover-svc with discover-db integration
- Docker deployment improvements (Caddyfile, vendor.sh, BUILD.md)
- Library-svc: project_id schema migration
- Remove deprecated finance-svc and travel-svc
- Localization improvements across services

Made-with: Cursor
This commit is contained in:
home
2026-02-27 04:15:32 +03:00
parent 328d968f3f
commit 06fe57c765
285 changed files with 53132 additions and 1871 deletions

View File

@@ -3,12 +3,17 @@
# Сервисы из deploy/k3s/deploy.config.yaml (true)
#
# Использование:
# ./deploy/docker/run.sh # полный build + up
# ./deploy/docker/run.sh --web # только web-svc (кнопки, UI) — быстро
# ./deploy/docker/run.sh --up # только up (без build)
# ./deploy/docker/run.sh --down # остановить
# ./deploy/docker/run.sh # build + up (vendor если есть)
# ./deploy/docker/run.sh --no-cache # build без кэша + up
# ./deploy/docker/run.sh --web # только web-svc — быстро
# ./deploy/docker/run.sh --up # только up (без build)
# ./deploy/docker/run.sh --down # остановить
# ./deploy/docker/run.sh --vendor # скачать npm + docker images в vendor/
# ./deploy/docker/run.sh --offline # строгий оффлайн-билд (vendor обязателен)
# ./deploy/docker/run.sh --load-images # загрузить Docker images из vendor/
#
# BuildKit + --no-cache: при деплое старый кэш не используется, сборка всегда свежая
# Оффлайн-билд: vendor/npm-cache/ монтируется в Dockerfile через additional_contexts.
# Docker images: vendor/docker-images.tar загружается через docker load.
set -e
export DOCKER_BUILDKIT=1
@@ -16,46 +21,151 @@ export DOCKER_BUILDKIT=1
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml"
ENV_FILE="$REPO_ROOT/.env"
VENDOR_DIR="$REPO_ROOT/vendor"
VENDOR_CACHE="$VENDOR_DIR/npm-cache"
VENDOR_ARCHIVE="$VENDOR_DIR/npm-cache.tar.gz"
VENDOR_IMAGES="$VENDOR_DIR/docker-images.tar"
cd "$REPO_ROOT"
COMPOSE_ENV="docker compose -f $COMPOSE_FILE --env-file $ENV_FILE"
BUILD_SERVICES=(
reverse-proxy
llm-svc
auth-svc
api-gateway
geo-device-svc
localization-svc
discover-svc
travel-svc
cache-worker-tech
search-svc
master-agents-svc
chat-svc
projects-svc
library-svc
web-svc
)
build_sequential() {
local extra_flags="${1:-}"
for svc in "${BUILD_SERVICES[@]}"; do
echo "=== Build: $svc ==="
$COMPOSE_ENV build $extra_flags "$svc"
done
}
# -------------------------------------------------------
# ensure_vendor — распаковать npm-cache.tar.gz если нужно
# -------------------------------------------------------
ensure_vendor() {
if [ -d "$VENDOR_CACHE" ] && [ "$(ls -A "$VENDOR_CACHE" 2>/dev/null)" ]; then
return 0
fi
if [ -f "$VENDOR_ARCHIVE" ]; then
echo "Распаковка $VENDOR_ARCHIVE ..."
mkdir -p "$VENDOR_DIR"
tar -xzf "$VENDOR_ARCHIVE" -C "$VENDOR_DIR"
echo "npm-cache распакован."
return 0
fi
# additional_contexts в docker-compose.yml требует существующую директорию
mkdir -p "$VENDOR_CACHE"
return 1
}
# -------------------------------------------------------
# load_docker_images — загрузить base images из архива
# -------------------------------------------------------
load_docker_images() {
if [ -f "$VENDOR_IMAGES" ]; then
echo "Загрузка Docker images из $VENDOR_IMAGES ..."
docker load -i "$VENDOR_IMAGES"
echo "Docker images загружены."
else
echo "WARN: $VENDOR_IMAGES не найден, пропускаю загрузку images."
fi
}
# -------------------------------------------------------
# print_status — вывод адресов сервисов
# -------------------------------------------------------
print_status() {
echo ""
echo "Сервисы запущены:"
echo " web-svc: http://localhost:3000"
echo " api-gateway: http://localhost:3015"
echo " auth-svc: http://localhost:3014"
echo " llm-svc: http://localhost:3020"
echo " chat-svc: http://localhost:3005"
echo " master-agents: http://localhost:3018"
echo " search-svc: http://localhost:3001"
echo " redis: localhost:6379"
echo " ghost: http://localhost:2368 (Admin: /ghost)"
echo ""
echo "Самовосстановление: healthcheck + autoheal (перезапуск unhealthy контейнеров)."
}
case "${1:-}" in
--vendor)
echo "=== Скачивание vendor (npm + Docker images) ==="
bash "$SCRIPT_DIR/vendor.sh"
;;
--load-images)
load_docker_images
;;
--offline)
if ! ensure_vendor; then
echo "ОШИБКА: vendor/npm-cache не найден и vendor/npm-cache.tar.gz отсутствует."
echo "Сначала выполните: ./deploy/docker/run.sh --vendor"
exit 1
fi
load_docker_images
echo ""
echo "=== Оффлайн-билд ==="
build_sequential
$COMPOSE_ENV up -d --force-recreate
print_status
;;
--no-cache)
ensure_vendor || echo "WARN: vendor не найден, билд будет скачивать из интернета."
build_sequential "--no-cache"
$COMPOSE_ENV up -d --force-recreate
echo ""
echo "Сервисы пересобраны без кэша и запущены."
print_status
;;
--web)
docker compose -f "$COMPOSE_FILE" build --no-cache web-svc
docker compose -f "$COMPOSE_FILE" up -d --force-recreate web-svc reverse-proxy
ensure_vendor || echo "WARN: vendor не найден, билд будет скачивать из интернета."
$COMPOSE_ENV build --no-cache web-svc
$COMPOSE_ENV up -d --force-recreate web-svc reverse-proxy
echo ""
echo "web-svc пересобран и перезапущен. Обнови страницу (Ctrl+Shift+R)."
;;
--down)
docker compose -f "$COMPOSE_FILE" down
$COMPOSE_ENV down
echo "Остановлено."
;;
--up)
docker compose -f "$COMPOSE_FILE" up -d
echo ""
echo "Сервисы запущены:"
echo " web-svc: http://localhost:3000"
echo " api-gateway: http://localhost:3015"
echo " auth-svc: http://localhost:3014"
echo " llm-svc: http://localhost:3020"
echo " chat-svc: http://localhost:3005"
echo " master-agents: http://localhost:3018"
echo " search-svc: http://localhost:3001"
$COMPOSE_ENV up -d
print_status
;;
*)
docker compose -f "$COMPOSE_FILE" build --no-cache
docker compose -f "$COMPOSE_FILE" up -d --force-recreate
echo ""
echo "Сервисы запущены:"
echo " web-svc: http://localhost:3000"
echo " api-gateway: http://localhost:3015"
echo " auth-svc: http://localhost:3014"
echo " llm-svc: http://localhost:3020"
echo " chat-svc: http://localhost:3005"
echo " master-agents: http://localhost:3018"
echo " search-svc: http://localhost:3001"
echo " redis: localhost:6379"
echo ""
ensure_vendor || echo "WARN: vendor не найден, билд будет скачивать из интернета."
build_sequential
$COMPOSE_ENV up -d --force-recreate
print_status
echo "LLM: настройте .env (LLM_PROVIDER=timeweb или ollama)."
;;
esac