feat: rebuild as multi-user web agent
This commit is contained in:
+236
@@ -0,0 +1,236 @@
|
||||
name: k1412-agent
|
||||
|
||||
services:
|
||||
web:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/web.Dockerfile
|
||||
image: ${WEB_IMAGE:-k1412-agent-web:dev}
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${WEB_PORT:-3000}:8080"
|
||||
environment:
|
||||
WEBUI_URL: ${WEBUI_URL:-http://localhost:3000}
|
||||
WEBUI_NAME: K1412 Agent
|
||||
CORS_ALLOW_ORIGIN: ${CORS_ALLOW_ORIGIN:-http://localhost:3000}
|
||||
WEBUI_AUTH: "true"
|
||||
WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY:?WEBUI_SECRET_KEY is required}
|
||||
WEBUI_ADMIN_EMAIL: ${WEBUI_ADMIN_EMAIL:?WEBUI_ADMIN_EMAIL is required}
|
||||
WEBUI_ADMIN_PASSWORD: ${WEBUI_ADMIN_PASSWORD:?WEBUI_ADMIN_PASSWORD is required}
|
||||
WEBUI_ADMIN_NAME: Administrator
|
||||
WEBUI_SESSION_COOKIE_SAME_SITE: lax
|
||||
WEBUI_SESSION_COOKIE_SECURE: ${WEBUI_COOKIE_SECURE:-false}
|
||||
WEBUI_AUTH_COOKIE_SAME_SITE: lax
|
||||
WEBUI_AUTH_COOKIE_SECURE: ${WEBUI_COOKIE_SECURE:-false}
|
||||
JWT_EXPIRES_IN: 7d
|
||||
ENABLE_SIGNUP: "true"
|
||||
DEFAULT_USER_ROLE: pending
|
||||
ENABLE_SIGNUP_PASSWORD_CONFIRMATION: "true"
|
||||
ENABLE_FORWARD_USER_INFO_HEADERS: "true"
|
||||
FORWARD_USER_INFO_HEADER_JWT_SECRET: ${OPENWEBUI_FORWARD_JWT_SECRET:?OPENWEBUI_FORWARD_JWT_SECRET is required}
|
||||
FORWARD_USER_INFO_HEADER_JWT_EXPIRES_SECONDS: "300"
|
||||
OPENAI_API_BASE_URL: http://runtime:8000/v1
|
||||
OPENAI_API_KEY: ${INTERNAL_PROVIDER_KEY:?INTERNAL_PROVIDER_KEY is required}
|
||||
DEFAULT_MODELS: chat-medium
|
||||
TASK_MODEL: chat-light
|
||||
ENABLE_TITLE_GENERATION: "false"
|
||||
ENABLE_FOLLOW_UP_GENERATION: "false"
|
||||
ENABLE_OLLAMA_API: "false"
|
||||
ENABLE_DIRECT_CONNECTIONS: "false"
|
||||
ENABLE_PERSISTENT_CONFIG: "false"
|
||||
ENABLE_VERSION_UPDATE_CHECK: "false"
|
||||
SAFE_MODE: "true"
|
||||
ENABLE_COMMUNITY_SHARING: "false"
|
||||
ENABLE_WEB_SEARCH: "false"
|
||||
ENABLE_IMAGE_GENERATION: "false"
|
||||
ENABLE_CODE_EXECUTION: "false"
|
||||
ENABLE_CODE_INTERPRETER: "false"
|
||||
ENABLE_MEMORIES: "false"
|
||||
ENABLE_NOTES: "false"
|
||||
ENABLE_CHANNELS: "false"
|
||||
ENABLE_CALENDAR: "false"
|
||||
ENABLE_AUTOMATIONS: "false"
|
||||
ENABLE_EVALUATION_ARENA_MODELS: "false"
|
||||
ENABLE_USER_STATUS: "false"
|
||||
RAG_EMBEDDING_ENGINE: openai
|
||||
RAG_EMBEDDING_MODEL: disabled
|
||||
RAG_OPENAI_API_BASE_URL: http://runtime:8000/v1
|
||||
RAG_OPENAI_API_KEY: ${INTERNAL_PROVIDER_KEY:?INTERNAL_PROVIDER_KEY is required}
|
||||
RAG_EMBEDDING_MODEL_AUTO_UPDATE: "false"
|
||||
RAG_RERANKING_MODEL_AUTO_UPDATE: "false"
|
||||
ENABLE_RAG_HYBRID_SEARCH: "false"
|
||||
BYPASS_EMBEDDING_AND_RETRIEVAL: "true"
|
||||
VECTOR_DB: disabled
|
||||
STORAGE_PROVIDER: local
|
||||
USER_PERMISSIONS_WORKSPACE_MODELS_ACCESS: "false"
|
||||
USER_PERMISSIONS_WORKSPACE_KNOWLEDGE_ACCESS: "false"
|
||||
USER_PERMISSIONS_WORKSPACE_PROMPTS_ACCESS: "false"
|
||||
USER_PERMISSIONS_WORKSPACE_TOOLS_ACCESS: "false"
|
||||
USER_PERMISSIONS_WORKSPACE_SKILLS_ACCESS: "false"
|
||||
USER_PERMISSIONS_CHAT_CONTROLS: "false"
|
||||
USER_PERMISSIONS_CHAT_VALVES: "false"
|
||||
USER_PERMISSIONS_CHAT_SYSTEM_PROMPT: "false"
|
||||
USER_PERMISSIONS_CHAT_PARAMS: "false"
|
||||
USER_PERMISSIONS_CHAT_MULTIPLE_MODELS: "false"
|
||||
USER_PERMISSIONS_CHAT_SHARE: "false"
|
||||
USER_PERMISSIONS_CHAT_ALLOW_PUBLIC_SHARING: "false"
|
||||
USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS: "false"
|
||||
USER_PERMISSIONS_FEATURES_WEB_SEARCH: "false"
|
||||
USER_PERMISSIONS_FEATURES_IMAGE_GENERATION: "false"
|
||||
USER_PERMISSIONS_FEATURES_CODE_INTERPRETER: "false"
|
||||
USER_PERMISSIONS_FEATURES_API_KEYS: "false"
|
||||
USER_PERMISSIONS_FEATURES_MEMORIES: "false"
|
||||
USER_PERMISSIONS_FEATURES_AUTOMATIONS: "false"
|
||||
USER_PERMISSIONS_FEATURES_CHANNELS: "false"
|
||||
USER_PERMISSIONS_FEATURES_CALENDAR: "false"
|
||||
USER_PERMISSIONS_FEATURES_NOTES: "false"
|
||||
USER_PERMISSIONS_SETTINGS_INTERFACE: "false"
|
||||
DATABASE_URL: postgresql+psycopg://${POSTGRES_USER:-agent}:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}@postgres:5432/${POSTGRES_DB:-agent}
|
||||
REDIS_URL: redis://redis:6379/0
|
||||
volumes:
|
||||
- openwebui-data:/app/backend/data
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
runtime:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- internal
|
||||
- public
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "--silent", "--fail", "http://127.0.0.1:8080/health"]
|
||||
interval: 15s
|
||||
timeout: 5s
|
||||
retries: 20
|
||||
|
||||
runtime:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/runtime.Dockerfile
|
||||
image: ${RUNTIME_IMAGE:-k1412-agent-runtime:dev}
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
MODEL_API_BASE_URL: ${MODEL_API_BASE_URL:-https://api.k1412.top}
|
||||
MODEL_API_KEY: ${MODEL_API_KEY:?MODEL_API_KEY is required}
|
||||
OPENWEBUI_FORWARD_JWT_SECRET: ${OPENWEBUI_FORWARD_JWT_SECRET:?OPENWEBUI_FORWARD_JWT_SECRET is required}
|
||||
INTERNAL_PROVIDER_KEY: ${INTERNAL_PROVIDER_KEY:?INTERNAL_PROVIDER_KEY is required}
|
||||
INTERNAL_GATEWAY_KEY: ${INTERNAL_GATEWAY_KEY:?INTERNAL_GATEWAY_KEY is required}
|
||||
DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-agent}:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}@postgres:5432/${POSTGRES_DB:-agent}
|
||||
GATEWAY_URL: http://gateway:8001
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
gateway:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- internal
|
||||
- egress
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /tmp:rw,noexec,nosuid,size=128m
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
gateway:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/gateway.Dockerfile
|
||||
image: ${GATEWAY_IMAGE:-k1412-agent-gateway:dev}
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
OPENWEBUI_FORWARD_JWT_SECRET: ${OPENWEBUI_FORWARD_JWT_SECRET:?OPENWEBUI_FORWARD_JWT_SECRET is required}
|
||||
INTERNAL_GATEWAY_KEY: ${INTERNAL_GATEWAY_KEY:?INTERNAL_GATEWAY_KEY is required}
|
||||
EXECUTION_PROVIDER: ${EXECUTION_PROVIDER:-local-docker}
|
||||
WORKSPACE_IMAGE: ${WORKSPACE_IMAGE:-k1412-agent-workspace:dev}
|
||||
WORKSPACE_NETWORK_ENABLED: ${WORKSPACE_NETWORK_ENABLED:-true}
|
||||
WORKSPACE_MEMORY_LIMIT: ${WORKSPACE_MEMORY_LIMIT:-2g}
|
||||
WORKSPACE_CPU_LIMIT: ${WORKSPACE_CPU_LIMIT:-2}
|
||||
WORKSPACE_PIDS_LIMIT: ${WORKSPACE_PIDS_LIMIT:-512}
|
||||
WORKSPACE_SSH_HOST: ${WORKSPACE_SSH_HOST:-}
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
networks:
|
||||
- internal
|
||||
- egress
|
||||
read_only: true
|
||||
tmpfs:
|
||||
- /tmp:rw,noexec,nosuid,size=128m
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
cap_drop:
|
||||
- ALL
|
||||
|
||||
bootstrap:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/runtime.Dockerfile
|
||||
image: ${RUNTIME_IMAGE:-k1412-agent-runtime:dev}
|
||||
restart: "no"
|
||||
command: ["python", "-m", "agent_platform.bootstrap"]
|
||||
environment:
|
||||
OPENWEBUI_INTERNAL_URL: http://web:8080
|
||||
WEBUI_ADMIN_EMAIL: ${WEBUI_ADMIN_EMAIL:?WEBUI_ADMIN_EMAIL is required}
|
||||
WEBUI_ADMIN_PASSWORD: ${WEBUI_ADMIN_PASSWORD:?WEBUI_ADMIN_PASSWORD is required}
|
||||
INTERNAL_GATEWAY_KEY: ${INTERNAL_GATEWAY_KEY:?INTERNAL_GATEWAY_KEY is required}
|
||||
GATEWAY_URL: http://gateway:8001
|
||||
depends_on:
|
||||
web:
|
||||
condition: service_healthy
|
||||
gateway:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- internal
|
||||
|
||||
postgres:
|
||||
image: postgres:17-alpine@sha256:742f40ea20b9ff2ff31db5458d127452988a2164df9e17441e191f3b72252193
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-agent}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-agent}
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
networks:
|
||||
- internal
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-agent} -d ${POSTGRES_DB:-agent}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 20
|
||||
|
||||
redis:
|
||||
image: redis:8-alpine@sha256:8096655e437712b07503796fb64d81359256cfcff0ab29d95a7da72863786efb
|
||||
restart: unless-stopped
|
||||
command: ["redis-server", "--save", "60", "1", "--appendonly", "yes"]
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
networks:
|
||||
- internal
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 20
|
||||
|
||||
workspace-image:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/workspace.Dockerfile
|
||||
image: ${WORKSPACE_IMAGE:-k1412-agent-workspace:dev}
|
||||
command: ["true"]
|
||||
profiles: ["build-only"]
|
||||
|
||||
networks:
|
||||
public:
|
||||
egress:
|
||||
internal:
|
||||
internal: true
|
||||
|
||||
volumes:
|
||||
openwebui-data:
|
||||
postgres-data:
|
||||
redis-data:
|
||||
Reference in New Issue
Block a user