# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: WeKnora
spec:
    description: |
        WeKnora is Tencent's open-source LLM knowledge framework for enterprise RAG Q&A,
        ReAct agents, Wiki mode, multi-source document ingestion (PDF/Word/Excel/etc.),
        and multi-workspace RBAC. This template deploys the core stack:
        Web UI + App API + Docreader + PostgreSQL (ParadeDB/pgvector) + Redis.
    coverImage: https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/logo.png
    icon: https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/logo.png
    variables:
        - key: PUBLIC_DOMAIN
          type: DOMAIN
          name: Domain
          description: Public domain for WeKnora Web UI
        - key: JWT_SECRET
          type: STRING
          name: JWT Secret
          description: JWT signing secret (change in production, 16+ chars)
        - key: PG_PASSWORD
          type: STRING
          name: PostgreSQL Password
          description: Password for the weknora database user
        - key: REDIS_PASSWORD
          type: STRING
          name: Redis Password
          description: Redis requirepass password
    tags:
        - AI
        - RAG
        - Knowledge Base
        - LLM
        - Agent
    readme: "# WeKnora\n\nOpen-source knowledge framework by Tencent — RAG Q&A, ReAct Agent, Wiki mode,\nmulti-format document parsing, and enterprise workspace RBAC.\n\n**Upstream:** [github.com/Tencent/WeKnora](https://github.com/Tencent/WeKnora)  \n**Official site:** [weknora.weixin.qq.com](https://weknora.weixin.qq.com)\n\n## Services in this template\n\n| Service | Image | Role |\n|---------|-------|------|\n| frontend | `wechatopenai/weknora-ui` | Web UI (public domain) |\n| app | `wechatopenai/weknora-app` | Backend API (`:8080`) |\n| docreader | `wechatopenai/weknora-docreader` | Document parse gRPC (`:50051`) |\n| postgres | `paradedb/paradedb:v0.22.2-pg17` | DB + vector (pgvector) |\n| redis | `redis:7.0-alpine` | Cache / stream / MQ |\n\n## After deploy\n\n1. Open your **PUBLIC_DOMAIN** — complete first-time registration (unless disabled).\n2. In **Settings**, configure an LLM provider (OpenAI / DeepSeek / Qwen / Ollama / etc.).\n3. Create a knowledge base, upload documents, start Q&A or Agent mode.\n4. For production: set strong `JWT_SECRET` / DB / Redis passwords; prefer private network; consider `DISABLE_REGISTRATION=true` after bootstrap.\n\n## Resource tips\n\n- Recommended **≥ 4 vCPU / 8 GB** for comfortable document parsing + embeddings.\n- Optional compose profiles (Neo4j / MinIO / Langfuse / Milvus …) are **not** included; add them later as extra services if needed.\n- Configure external LLM/embedding API keys inside the product UI or via app env after deploy.\n\n## License\n\nMIT — [Tencent/WeKnora](https://github.com/Tencent/WeKnora)\n"
    services:
        - name: postgres
          icon: https://cdn.zeabur.com/marketplace/postgresql.svg
          template: PREBUILT_V2
          spec:
            id: postgres
            source:
                image: paradedb/paradedb:v0.22.2-pg17
            ports:
                - id: database
                  port: 5432
                  type: TCP
            volumes:
                - id: data
                  dir: /var/lib/postgresql/data
            env:
                PGDATA:
                    default: /var/lib/postgresql/data/pgdata
                POSTGRES_DB:
                    default: weknora
                    expose: true
                POSTGRES_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                POSTGRES_PASSWORD:
                    default: ${PG_PASSWORD}
                    expose: true
                POSTGRES_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
                POSTGRES_USER:
                    default: weknora
                    expose: true
        - name: redis
          icon: https://cdn.zeabur.com/prebuilt.svg
          template: PREBUILT_V2
          spec:
            id: redis
            source:
                image: redis:7.0-alpine
                command:
                    - redis-server
                    - --appendonly
                    - "yes"
                    - --requirepass
                    - ${REDIS_PASSWORD}
            ports:
                - id: redis
                  port: 6379
                  type: TCP
            volumes:
                - id: data
                  dir: /data
            env:
                REDIS_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                REDIS_PASSWORD:
                    default: ${REDIS_PASSWORD}
                    expose: true
                REDIS_PORT:
                    default: ${REDIS_PORT}
                    expose: true
        - name: docreader
          icon: https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/logo.png
          template: PREBUILT_V2
          spec:
            id: docreader
            source:
                image: wechatopenai/weknora-docreader:latest
            ports:
                - id: grpc
                  port: 50051
                  type: TCP
            volumes:
                - id: tmp
                  dir: /tmp/docreader
            env:
                DOCREADER_GRPC_PORT:
                    default: "50051"
                DOCREADER_GRPC_PORT_EXPOSE:
                    default: ${GRPC_PORT}
                    expose: true
                DOCREADER_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                DOCREADER_IMAGE_OUTPUT_DIR:
                    default: /tmp/docreader
                LOG_LEVEL:
                    default: info
                TZ:
                    default: Asia/Shanghai
        - name: app
          icon: https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/logo.png
          template: PREBUILT_V2
          spec:
            id: app
            source:
                image: wechatopenai/weknora-app:latest
            ports:
                - id: http
                  port: 8080
                  type: HTTP
            volumes:
                - id: files
                  dir: /data/files
                - id: tmp
                  dir: /tmp/docreader
            env:
                APP_INTERNAL_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                APP_INTERNAL_PORT:
                    default: "8080"
                    expose: true
                AUTO_MIGRATE:
                    default: "true"
                DB_DRIVER:
                    default: postgres
                DB_HOST:
                    default: ${POSTGRES_HOST}
                DB_NAME:
                    default: ${POSTGRES_DB}
                DB_PASSWORD:
                    default: ${POSTGRES_PASSWORD}
                DB_PORT:
                    default: "5432"
                DB_USER:
                    default: ${POSTGRES_USER}
                DISABLE_REGISTRATION:
                    default: "false"
                DOCREADER_ADDR:
                    default: ${DOCREADER_HOST}:50051
                DOCREADER_TRANSPORT:
                    default: grpc
                ENABLE_GRAPH_RAG:
                    default: "false"
                FRONTEND_BASE_URL:
                    default: https://${PUBLIC_DOMAIN}
                GIN_MODE:
                    default: release
                JWT_SECRET:
                    default: ${JWT_SECRET}
                LOCAL_STORAGE_BASE_DIR:
                    default: /data/files
                LOG_LEVEL:
                    default: info
                NEO4J_ENABLE:
                    default: "false"
                REDIS_ADDR:
                    default: ${REDIS_HOST}:6379
                REDIS_PASSWORD:
                    default: ${REDIS_PASSWORD}
                RETRIEVE_DRIVER:
                    default: postgres
                STORAGE_TYPE:
                    default: local
                TZ:
                    default: Asia/Shanghai
                WEKNORA_SANDBOX_MODE:
                    default: disabled
            healthCheck:
                type: HTTP
                port: http
                http:
                    path: /health
        - name: frontend
          icon: https://raw.githubusercontent.com/Tencent/WeKnora/main/docs/images/logo.png
          template: PREBUILT_V2
          spec:
            id: frontend
            source:
                image: wechatopenai/weknora-ui:latest
            ports:
                - id: web
                  port: 80
                  type: HTTP
            env:
                APP_HOST:
                    default: ${APP_INTERNAL_HOST}
                APP_PORT:
                    default: ${APP_INTERNAL_PORT}
                APP_SCHEME:
                    default: http
                MAX_FILE_SIZE_MB:
                    default: "50"
            healthCheck:
                type: HTTP
                port: web
                http:
                    path: /
          domainKey: PUBLIC_DOMAIN
localization:
    zh-CN:
        description: |
            WeKnora 是腾讯开源的企业级知识框架，支持 RAG 问答、ReAct 智能体、Wiki 模式、
            多源文档导入与多工作空间 RBAC。本模板一键部署核心栈：Web UI + API + 文档解析 +
            PostgreSQL(ParadeDB/pgvector) + Redis。
        variables:
            - key: PUBLIC_DOMAIN
              type: DOMAIN
              name: 域名
              description: WeKnora Web UI 公网域名
            - key: JWT_SECRET
              type: STRING
              name: JWT 密钥
              description: JWT 签名密钥（生产环境请修改，建议 16 位以上）
            - key: PG_PASSWORD
              type: STRING
              name: PostgreSQL 密码
              description: 数据库用户 weknora 的密码
            - key: REDIS_PASSWORD
              type: STRING
              name: Redis 密码
              description: Redis requirepass 密码
        readme: |
            # WeKnora

            腾讯开源知识框架 — RAG 问答、ReAct Agent、Wiki 模式、多格式文档解析、企业 RBAC。

            **仓库：** [github.com/Tencent/WeKnora](https://github.com/Tencent/WeKnora)

            ## 包含服务

            | 服务 | 镜像 | 作用 |
            |------|------|------|
            | frontend | weknora-ui | Web 界面（绑定公网域名） |
            | app | weknora-app | 后端 API |
            | docreader | weknora-docreader | 文档解析 gRPC |
            | postgres | paradedb/paradedb | 数据库 + 向量检索 |
            | redis | redis:7 | 缓存 / 队列 |

            ## 部署后

            1. 打开域名完成注册
            2. 在设置中配置 LLM / Embedding 提供商
            3. 创建知识库并上传文档
            4. 生产环境请使用强密码，并在初始化后考虑关闭公开注册

            ## 资源建议

            建议 ≥ 4 核 8G。Neo4j / MinIO / Langfuse 等可选组件未包含，可按需另加服务。

            ## 许可证

            MIT
