剪藏#出发了很久别忘记出发的目的#剪藏

使用Docker安装PandaWiki(AI知识库)

2025 年 11 月 3 日1 分钟
分享Twitter / XTelegram微博
使用Docker安装PandaWiki(AI知识库) 封面

1、demo

JAVASCRIPT
详见:https://pandawiki.docs.baizhi.cloud/node/01971af3-f304-7043-9e39-d2c6b6f8d4e9

Notion image

2、安装要求

JAVASCRIPT
详见:https://pandawiki.docs.baizhi.cloud/node/01971602-bb4e-7c90-99df-6d3c38cfd6d5

Notion image

3、安装Docker

合集:Docker安装与使用

4、安装PandaWiki

JAVASCRIPT
详见:https://pandawiki.docs.baizhi.cloud/node/01971602-bb4e-7c90-99df-6d3c38cfd6d5
JAVASCRIPT
"当前环境说明"

操作系统:Ubuntu Server 24.04 LTS 64位
CPU:2核
内存:4GB

4.1、一键自动安装

安装:

JAVASCRIPT
# 执行命令:
bash -"$(curl -fsSLk https://release.baizhi.cloud/panda-wiki/manager.sh)"

# 说明:
"默认安装路径位于/data/pandawiki"

Notion image

JAVASCRIPT
说明:在此之前,已经选择"手动配置安装"这种方式,所以可以直接使用已下载的镜像

Notion image

切换目录:

JAVASCRIPT
cd /data/pandawiki

查看目录:

Notion image

查看.env文件:

Notion image

查看docker-compose.yml文件:

JAVASCRIPT
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.29.1
    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.29.1
    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.29.1
    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.29.1
    environment:
      - NATS_PASSW
JAVASCRIPT
ORD=${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
    comm
JAVASCRIPT
and: ["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.5.7
    container_name: panda-wiki-crawler
    restart: always
    inittrue
    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
JAVASCRIPT
.15}.0/24"

创建并启动容器(跳过):

JAVASCRIPT
docker-compose up -d

查看容器列表:

JAVASCRIPT
docker ps

停止并销毁容器:

JAVASCRIPT
docker-compose down

删除目录:

JAVASCRIPT
rm -rf ./data

删除镜像:

JAVASCRIPT
docker rmi \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-caddy:2.10-alpine \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-nginx:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-app:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-api:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-consumer:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-postgres:17.5 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-redis:7.4.2-alpine \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-minio:RELEASE.2025-04-22T22-12-26Z-cpuv1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-nats:2.11.3-alpine \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-qdrant:v1.14.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/anydoc:v0.5.7 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-raglite:1-3-9

4.2、手动配置安装

创建目录:

JAVASCRIPT
mkdir pandawiki

切换目录:

JAVASCRIPT
cd pandawiki

下载docker-compose.yml文件:

JAVASCRIPT
wget "https://release.baizhi.cloud/panda-wiki/docker-compose.yml"

查看docker-compose.yml文件:

JAVASCRIPT
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.29.1
    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.29.1
    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.29.1
    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.29.1
    environment:
      - NATS_PASSW
JAVASCRIPT
ORD=${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
    comm
JAVASCRIPT
and: ["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.5.7
    container_name: panda-wiki-crawler
    restart: always
    inittrue
    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
JAVASCRIPT
.15}.0/24"

创建.env配置文件:

Notion image

JAVASCRIPT
# 时区
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

备份.env配置文件:

JAVASCRIPT
cp .env .env-bak

修改.env配置文件:

JAVASCRIPT
"请根据实际情况修改密码"
# 因为当前为测试环境,所以都修改成相同密码

sed -'s/{{PASSWORD}}/pandawiki/g' .env

创建并启动容器:

JAVASCRIPT
docker-compose up -d

查看容器列表:

JAVASCRIPT
docker ps

停止并销毁容器:

JAVASCRIPT
docker-compose down

删除目录:

JAVASCRIPT
rm -rf ./data

删除镜像:

JAVASCRIPT
docker rmi \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-caddy:2.10-alpine \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-nginx:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-app:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-api:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-consumer:v3.29.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-postgres:17.5 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-redis:7.4.2-alpine \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-minio:RELEASE.2025-04-22T22-12-26Z-cpuv1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-nats:2.11.3-alpine \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-qdrant:v1.14.1 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/anydoc:v0.5.7 \
  chaitin-registry.cn-hangzhou.cr.aliyuncs.com/chaitin/panda-wiki-raglite:1-3-9

5、浏览器访问

JAVASCRIPT
假设当前ip为192.168.186.128
浏览器访问:https://192.168.186.128:2443
# 账号密码:admin  指定的密码或者自动生成的密码
账号密码:admin  pandawiki

浏览器访问:

Notion image

Notion image

登录:

Notion image

登录成功后,系统配置:

JAVASCRIPT
详见:https://pandawiki.docs.baizhi.cloud/node/01971616-811c-70e1-82d9-706a202b8498

Notion image

Notion image

JAVASCRIPT
"如果使用DeepSeek"

# 获取API Key:
https://platform.deepseek.com/api_keys

Notion image

JAVASCRIPT
【当前使用Gemini】
"如果使用Cloudflare的AI Gateway代理Google AI Studio"
# 详见:https://mp.weixin.qq.com/s/Xg7W7KJs6IpvXxPCoMWtXw

# 详见:
https://developers.cloudflare.com/ai-gateway/usage/providers/google-ai-studio/

# API地址格式:
https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/

# 模型名称格式:
google-ai-studio/{model}

# 以下参数根据实际情况填写:
{account_id}、{gateway_id}、{model}

Notion image

创建 Wiki 站点:

Notion image

Notion image

Notion image

Notion image

Notion image

Notion image

访问 WIKI 网站:

Notion image

管理后台:

Notion image

6、详见

JAVASCRIPT
https://baizhi.cloud
https://baizhi.cloud/landing/pandawiki
https://pandawiki.docs.baizhi.cloud
https://github.com/chaitin/PandaWiki

原文地址: https://mp.weixin.qq.com/s?__biz=MzI5MjAyMjIxOA==&mid=2457994625&idx=1&sn=fd0a7338a70efc6194c4bc83f2145ac4&chksm=faa762653f9e1b8d458e375675b560b2d73fb44caace844a639c4eb7ea47377c9371ef4775ea&mpshare=1&scene=1&srcid=1103tQMF2oAfsxELPCZK4sa7&sharer_shareinfo=d36f3a2e1f117b6b3ef02407f3e027b3&sharer_shareinfo_first=d36f3a2e1f117b6b3ef02407f3e027b3#rd

相关文章