在这里插入图片描述

简介

什么是 PandaWiki ?

PandaWiki 是一款 AI 大模型驱动的开源知识库搭建系统,帮助你快速构建智能化的 产品文档、技术文档、FAQ、博客系统,借助大模型的力量为你提供 AI 创作、AI 问答、AI 搜索 等能力。

主要特点

  • AI驱动: 内置 AI 创作、问答和搜索功能,可接入多种 AI 大模型。
  • 多功能: 支持构建产品文档、技术文档、FAQ 和博客等多种形式的知识库。
  • 易于使用: 提供富文本编辑器,支持第三方集成和内容导入。
  • 开源: 采用 AGPL-3.0 开源协议,可免费使用和二次开发。
  • 智能化: 提供智能问答、智能搜索和智能客服等能力。

应用场景

  • 产品文档: 快速构建智能化的产品文档,提升用户体验。
  • 技术文档: 方便地管理和查询技术文档,提高开发效率。
  • FAQ: 建立智能 FAQ 系统,自动回答常见问题。
  • 个人知识库: 构建个人的知识体系,方便知识的积累和回顾。

PandaWiki 是一个灵活且功能强大的知识管理工具,适合各种用户需求,特别是在文档管理和知识共享方面提供了优越的体验。

安装

在群晖上以 Docker 方式安装。

但老苏没有使用官方的一键脚本,而是采用了 docker-compose 方式安装

建目录

通过 SSH 客户端登录到你的群晖,执行下面的命令,创建所需的目录

# 新建文件夹 pandawiki 和 子目录
mkdir -p /volume1/docker/pandawiki/data/{caddy/{caddy_config,caddy_data,run},conf/api,minio,nats,nginx/ssl,postgres,qdrant,raglite}

# 进入 pandawiki 目录
cd /volume1/docker/pandawiki

env.txt

env.txt 是配置文件

# 时区
TIMEZONE=Asia/Shanghai
# 容器网段
SUBNET_PREFIX=169.254.15
# 中间件密码
POSTGRES_PASSWORD={{PASSWORD}}
NATS_PASSWORD={{PASSWORD}}
JWT_SECRET={{PASSWORD}}
S3_SECRET_KEY={{PASSWORD}}
QDRANT_API_KEY={{PASSWORD}}
REDIS_PASSWORD={{PASSWORD}}
# 管理后台登录密码
ADMIN_PASSWORD={{PASSWORD}}
# 管理后台访问端口
ADMIN_PORT=2443
  1. 配置中的 {{PASSWORD}} 部分都是相关内部服务的密码,请生成随机密码来替换掉它们。注意:密码长度需要大于 8 位,且不要包含除了数字字母以外的特殊字符。
  2. ADMIN_PASSWORD 字段是 pandawiki 管理面板的密码,请务必牢记
  3. ADMIN_PORT 字段是后台访问的端口,不冲突就行

下面是一个老苏设置的示例,如果你保留了中文注释,记得保存要使用 UTF-8 格式

TIMEZONE=Asia/Shanghai
SUBNET_PREFIX=169.254.15

POSTGRES_PASSWORD=5JAgNyx9h9xu
NATS_PASSWORD=sE5YZjAT7Mtv
JWT_SECRET=vyHPZJsfMZEazzGj2Auc7wwPuajSjCSa
S3_SECRET_KEY=BRup9kYUp8gMAZ8JtzGzM9VKwuZbsUc8
QDRANT_API_KEY=AD23RJ7iCvsYapidU3dx2SiT3iWtDhuU
REDIS_PASSWORD=kB4vVExRdM3W

ADMIN_PASSWORD=laosu123

ADMIN_PORT=8816

docker-compose.yml

可以在当前目录中直接下载官方的文件

# 下载 docker-compose.yml 文件
wget "https://release.baizhi.cloud/panda-wiki/docker-compose.yml"

也可以将下面的内容保存为 docker-compose.yml 文件

services:
  caddy:
    container_name: panda-wiki-caddy
    restart: always
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-caddy:2.10-alpine
    cap_add:
      - NET_ADMIN
    volumes:
      - ./data/caddy/caddy_config:/config
      - ./data/caddy/caddy_data:/data
      - ./data/caddy/run:/var/run/caddy
    environment:
      - CADDY_ADMIN=unix//var/run/caddy/caddy-admin.sock
    network_mode: host
    
  nginx:
    container_name: panda-wiki-nginx
    depends_on:
      - api
    restart: always
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-nginx:v3.31.3
    ports:
      - ${ADMIN_PORT}:8080
    volumes:
      - ./data/nginx/ssl:/etc/nginx/ssl
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.111"

  app:
    container_name: panda-wiki-app
    restart: always
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-app:v3.31.3
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.112"

  api:
    container_name: panda-wiki-api
    depends_on:
      - postgres
      - nats
      - caddy
      - raglite
    restart: always
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-api:v3.31.3
    volumes:
      - ./data/caddy/run:/app/run
      - ./data/nginx/ssl:/app/etc/nginx/ssl
      - ./data/conf/api:/data
    environment:
      - NATS_PASSWORD=${NATS_PASSWORD}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - S3_SECRET_KEY=${S3_SECRET_KEY}
      - JWT_SECRET=${JWT_SECRET}
      - ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - SUBNET_PREFIX=${SUBNET_PREFIX}
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.2"

  consumer:
    container_name: panda-wiki-consumer
    depends_on:
      - nats
      - api
    restart: always
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-consumer:v3.31.3
    environment:
      - NATS_PASSWORD=${NATS_PASSWORD}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - S3_SECRET_KEY=${S3_SECRET_KEY}
      - JWT_SECRET=${JWT_SECRET}
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.3"

  postgres:
    container_name: panda-wiki-postgres
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-postgres:17.5
    restart: always
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "panda-wiki", "-d", "panda-wiki"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    environment:
      - POSTGRES_USER=panda-wiki
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=panda-wiki
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.10"

  redis:
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-redis:7.4.2-alpine
    container_name: panda-wiki-redis
    restart: always
    command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--appendonly", "yes", "--appendfilename", "appendonly.aof", "--save", "900 1", "--save", "300 10", "--save", "60 10000"]
    volumes:
      - ./data/redis:/data
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.11"

  minio:
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-minio:RELEASE.2025-04-22T22-12-26Z-cpuv1
    container_name: panda-wiki-minio
    restart: always
    command: ["minio", "server", "/data", "--console-address", ":9001"]
    volumes:
      - ./data/minio:/data
    environment:
      - MINIO_ACCESS_KEY=s3panda-wiki
      - MINIO_SECRET_KEY=${S3_SECRET_KEY}
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.12"

  nats:
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-nats:2.11.3-alpine
    container_name: panda-wiki-nats
    restart: always
    command: ["nats-server", "-c", "/etc/nats/nats.conf", "--user", "panda-wiki", "--pass", "${NATS_PASSWORD}"]
    volumes:
      - ./data/nats:/data
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.13"

  qdrant:
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-qdrant:v1.14.1
    container_name: panda-wiki-qdrant
    restart: always
    volumes:
      - ./data/qdrant:/qdrant/storage
    environment:
      - QDRANT__SERVICE__API_KEY=${QDRANT_API_KEY}
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.14"

  crawler:
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/anydoc:v0.6.11
    container_name: panda-wiki-crawler
    restart: always
    init: true
    environment:
      - GLOG_GLOBAL_LEVEL=info
      - NAMESPACE=anydoc
      - MQ_NATS_URL=nats://panda-wiki-nats:4222
      - MQ_NATS_USER=panda-wiki
      - MQ_NATS_PASSWORD=${NATS_PASSWORD}
      - OSS_MINIO_ACCESS_KEY=s3panda-wiki
      - OSS_MINIO_SECRET_KEY=${S3_SECRET_KEY}
      - OSS_MINIO_ENDPOINT=panda-wiki-minio:9000
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.17"

  raglite:
    image: chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-raglite:1-3-9
    container_name: panda-wiki-raglite
    restart: always
    volumes:
      - ./data/raglite:/data
    environment:
      - GIN_MODE=release
      - DATABASE_HOST=panda-wiki-postgres
      - DATABASE_USER=panda-wiki
      - DATABASE_PASSWORD=${POSTGRES_PASSWORD}
      - MINIO_HOST=panda-wiki-minio:9000
      - MINIO_USER=s3panda-wiki
      - MINIO_PASSWORD=${S3_SECRET_KEY}
      - QDRANT_HOST=panda-wiki-qdrant
      - QDRANT_API_KEY=${QDRANT_API_KEY}
    depends_on:
      - postgres
      - minio
      - qdrant
    networks:
      panda-wiki:
        ipv4_address: "${SUBNET_PREFIX:-169.254.15}.18"

networks:
  panda-wiki:
    ipam:
      driver: default
      config:
        - subnet: "${SUBNET_PREFIX:-169.254.15}.0/24"

当前目录结构如下

现在执行一键启动

# 一键启动
docker-compose --env-file env.txt up -d 

如果没有什么意外,会启动 12 个容器

运行

在浏览器中输入 https://群晖IP:8816

注意:https而不是 http 协议

打开 高级,继续前往

就能看到控制台登录界面了

用户名默认为 admin,而密码就是环境变量中 ADMIN_PASSWORD 的值

登录成功

接入 AI 模型

PandaWiki 是由 AI 大模型驱动的,在使用之前请先接入 AI 大模型,否则将无法正常使用

目前硅基流动(SiliconFlow),注册就送 2000Tokens,虽然不是免费,但也够用一阵子的

注册地址:

https://cloud.siliconflow.cn/i/NkUiXVhQ

如果设置没问题,可以获取到模型列表

创建 Wiki 站点

找一个群晖上未被占用的端口,例如: 8817

跟随向导

可以创建或者导入文档

访问 Wiki

因为我们在上一步创建 Wiki 站点时监听的是 8817 端口,所以我们可以用 http://群晖IP:8817 访问

注意: 这次是 http而不是 https 协议

可以问 AI 或者搜索文档

速度还是很快的

参考文档

chaitin/PandaWiki: PandaWiki 是一款 AI 大模型驱动的开源知识库搭建系统,帮助你快速构建智能化的 产品文档、技术文档、FAQ、博客系统,借助大模型的力量为你提供 AI 创作、AI 问答、AI 搜索等能力。
地址:https://github.com/chaitin/PandaWiki

PandaWiki
地址:https://pandawiki.docs.baizhi.cloud/

PandaWiki - PandaWiki 介绍
地址:https://pandawiki.docs.baizhi.cloud/node/0197160c-782c-74ad-a4b7-857dae148f84

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐