132 lines
4.6 KiB
Bash
132 lines
4.6 KiB
Bash
# Server (internal bind inside containers)
|
|
HOST=0.0.0.0
|
|
BACKEND_INTERNAL_PORT=8080
|
|
FRONTEND_INTERNAL_PORT=80
|
|
|
|
# External ports on the host (docker compose publish)
|
|
BACKEND_PORT=8080
|
|
FRONTEND_PORT=3080
|
|
VITE_DEV_PORT=5173
|
|
|
|
# OpenRouter
|
|
OPENROUTER_API_KEY=sk-or-v1-your-key-here
|
|
OPENROUTER_MODEL=deepseek/deepseek-chat
|
|
# deepseek/deepseek-v4-pro — сильная модель, tools поддерживаются:
|
|
# OPENROUTER_MODEL=deepseek/deepseek-v4-pro
|
|
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
|
|
OPENROUTER_TOOLS_ENABLED=true
|
|
# none = без thinking (быстрее, стабильнее с tools). low|medium|high|xhigh — reasoning.
|
|
OPENROUTER_REASONING_EFFORT=none
|
|
# Vision (скриншоты Mi Fitness и др.)
|
|
OPENROUTER_VISION_MODEL=google/gemini-2.5-flash-lite
|
|
VISION_MAX_EDGE_PX=1280
|
|
VISION_JPEG_QUALITY=85
|
|
VISION_DEBUG_ENABLED=true
|
|
VISION_MAX_IMAGES=8
|
|
# JSON-экстракция памяти отдельной моделью (если основная капризничает):
|
|
# MEMORY_EXTRACT_MODEL=deepseek/deepseek-chat
|
|
|
|
# App
|
|
DATABASE_URL=sqlite:///./data/assistant.db
|
|
CORS_ORIGINS=http://localhost:5173,http://localhost:8080,http://localhost:3080
|
|
SYSTEM_PROMPT_PATH=./prompts/assistant.md
|
|
MEMORY_AUTO_EXTRACT=true
|
|
|
|
# Multi-user (API token auth)
|
|
DEFAULT_USER_USERNAME=owner
|
|
DEFAULT_USER_DISPLAY_NAME=
|
|
DEFAULT_API_TOKEN=change-me-to-long-random-string
|
|
AUTH_REQUIRED=true
|
|
# Опционально для dev (автовход без /login). В prod оставьте пустым.
|
|
VITE_API_TOKEN=
|
|
|
|
# Fitness (wger + Open Food Facts — public HTTPS, no proxy)
|
|
WGER_BASE_URL=https://wger.de/api/v2
|
|
OPENFOODFACTS_BASE_URL=https://world.openfoodfacts.org
|
|
FITNESS_REMINDERS_ENABLED=true
|
|
REMINDERS_ENABLED=true
|
|
|
|
# Taiga (on host :9000, nginx → taiga.grigowashere.ru)
|
|
TAIGA_BASE_URL=http://host.docker.internal:9000
|
|
TAIGA_USERNAME=your_taiga_user
|
|
TAIGA_PASSWORD=your_taiga_password
|
|
TAIGA_PUBLIC_URL=https://taiga.grigowashere.ru
|
|
|
|
# Gitea (on host :3000, nginx → git.grigowashere.ru)
|
|
GITEA_BASE_URL=http://host.docker.internal:3000
|
|
GITEA_TOKEN=your_gitea_api_token
|
|
GITEA_PUBLIC_URL=https://git.grigowashere.ru
|
|
GITEA_WEBHOOK_SECRET=generate_a_random_secret
|
|
|
|
# Gitea webhook URL (repo Settings → Webhooks):
|
|
# https://assistant.your-domain/api/v1/webhooks/gitea ← nginx → 127.0.0.1:BACKEND_PORT
|
|
# http://172.17.0.1:8202/api/v1/webhooks/gitea ← если Gitea в Docker (не 127.0.0.1!)
|
|
|
|
REPOS_DIR=/data/repos
|
|
|
|
# Homelab — GPU PC 192.168.1.109
|
|
OPENMETEO_BASE_URL=http://192.168.1.109:8085
|
|
WEATHER_LAT=59.9343
|
|
WEATHER_LON=30.3351
|
|
WEATHER_LOCATION_NAME=Санкт-Петербург
|
|
WEATHER_CACHE_SEC=300
|
|
WEATHER_FORECAST_DAYS=7
|
|
# Если локальный OpenMeteo отдаёт только temperature_2m — подставить публичный API
|
|
OPENMETEO_FALLBACK_URL=https://api.open-meteo.com
|
|
OPENMETEO_FALLBACK_ON_PARTIAL=true
|
|
|
|
# News RSS (comma-separated)
|
|
NEWS_RSS_URLS=https://habr.com/ru/rss/all/all/,https://www.reddit.com/r/programming/.rss
|
|
NEWS_CACHE_SEC=1800
|
|
NEWS_MAX_ITEMS=7
|
|
|
|
# Morning digest (Europe/Moscow or user profile timezone)
|
|
MORNING_DIGEST_ENABLED=true
|
|
MORNING_DIGEST_HOUR=8
|
|
MORNING_DIGEST_MINUTE=0
|
|
|
|
# ComfyUI on GPU PC (Anima split-model — как в aiChatBot)
|
|
COMFYUI_BASE_URL=http://192.168.1.109:8188
|
|
COMFYUI_ENABLED=true
|
|
# Anima: UNET+CLIP+VAE, CHECKPOINT пустой. Для SD1.5/Pony — задай CHECKPOINT, очисти UNET.
|
|
COMFYUI_CHECKPOINT=
|
|
COMFYUI_UNET=anima-preview3-base.safetensors
|
|
COMFYUI_CLIP=qwen_3_06b_base.safetensors
|
|
COMFYUI_VAE=qwen_image_vae.safetensors
|
|
COMFYUI_STYLE_LORA=anima-preview-3-masterpieces-v5.safetensors
|
|
COMFYUI_STYLE_LORA_WEIGHT=0.7
|
|
COMFYUI_STEPS=30
|
|
COMFYUI_CFG=4
|
|
COMFYUI_SAMPLER=er_sde
|
|
COMFYUI_SCHEDULER=simple
|
|
COMFYUI_WIDTH=1024
|
|
COMFYUI_HEIGHT=720
|
|
COMFYUI_NEGATIVE_PROMPT=worst quality, low quality, score_1, score_2, score_3, blurry, jpeg artifacts, sepia
|
|
COMFYUI_ROFL_ENABLED=true
|
|
COMFYUI_ROFL_MAX_PER_DAY=1
|
|
COMFYUI_ROFL_PROBABILITY=0.15
|
|
COMFYUI_ROFL_MIN_INTERVAL_HOURS=12
|
|
GENERATED_MEDIA_DIR=./data/generated
|
|
|
|
# RP Chat (aiChatBot) — генерация картинок + sd-prompt; persona_id в карточке персонажа
|
|
RP_CHAT_BASE_URL=http://host.docker.internal:8201
|
|
RP_CHAT_ENABLED=true
|
|
RP_CHAT_TIMEOUT_SEC=300
|
|
|
|
# Netdata on server
|
|
NETDATA_BASE_URL=http://host.docker.internal:19999
|
|
NETDATA_PUBLIC_URL=
|
|
NETDATA_ALERTS_ENABLED=true
|
|
NETDATA_POLL_INTERVAL_SEC=120
|
|
|
|
# Vector DB (phase 3)
|
|
QDRANT_PORT=6333
|
|
QDRANT_GRPC_PORT=6334
|
|
|
|
# RAG / embeddings
|
|
QDRANT_URL=http://qdrant:6333
|
|
EMBEDDING_MODEL=openai/text-embedding-3-small
|
|
RAG_ENABLED=true
|
|
RAG_TOP_K=8
|
|
MEMORY_FACTS_IN_CONTEXT=8
|