• AnythingLLM 的 Docker 使用


    AnythingLLM是使用大语言模型LLM的一站式简便框架。官网的介绍如下:

    AnythingLLM is the easiest to use, all-in-one AI application that can do RAG, AI Agents, and much more with no code or infrastructure headaches.

    1. 使用官方docker

          最方便的方法是使用 docker. 参考Local Docker Installation ~ AnythingLLM

    1.1 拉取镜像

      docker pull mintplexlabs/anythingllm

    1.2 创建db目录和配置文件

    Linux:

    1. export STORAGE_LOCATION=/var/lib/anythingllm && \
    2. mkdir -p $STORAGE_LOCATION && \
    3. touch "$STORAGE_LOCATION/.env"

    Windows:

    1. $env:STORAGE_LOCATION="$HOME\Documents\anythingllm"; `
    2. If(!(Test-Path $env:STORAGE_LOCATION)) {New-Item $env:STORAGE_LOCATION -ItemType Directory}; `
    3. If(!(Test-Path "$env:STORAGE_LOCATION\.env")) {New-Item "$env:STORAGE_LOCATION\.env" -ItemType File};

    1.3 运行docker

    1. docker run -d \
    2. --name anythingllm \
    3. --add-host=host.docker.internal:host-gateway \
    4. --env STORAGE_DIR=/app/server/storage \
    5. --health-cmd "/bin/bash /usr/local/bin/docker-healthcheck.sh || exit 1" \
    6. --health-interval 60s \
    7. --health-start-period 60s \
    8. --health-timeout 10s \
    9. -p 3001:3001/tcp \
    10. --restart=always \
    11. --user anythingllm \
    12. -v ${STORAGE_LOCATION}:/app/server/storage \
    13. -v ${STORAGE_LOCATION}/.env:/app/server/.env \
    14. -w /app \
    15. mintplexlabs/anythingllm

        --add-host 配置是为了访问同台机器上的ollama服务。

    1.4 访问 http://localhost:3001 进行初始配置,最好配置团队,可以进行权限控制

           可以配置大语言模型LLM、向量模型、向量数据库等等。

           完成后查看 .env 文件,如下(因人而异):

    1. SERVER_PORT=3001
    2. JWT_SECRET="my-random-string-for-seeding" # Please generate random string at least 12 chars long.
    3. STORAGE_DIR="/var/lib/anything"
    4. OPEN_AI_KEY=""
    5. LLM_PROVIDER='ollama'
    6. OLLAMA_BASE_PATH='http://localhost:11434'
    7. OLLAMA_MODEL_PREF='llama3-64k:latest'
    8. OLLAMA_MODEL_TOKEN_LIMIT='4096'
    9. EMBEDDING_ENGINE='native'
    10. VECTOR_DB='lancedb'

    1.5 访问api

           http://localhost:3001/api/docs/可以查看已有的API接口。

           在设置里生成APIKEY,客户端编程通过这个Key来访问接口。      

    1.6 一个好用的小工具get_command_4_run_container,查看运行容器的启动命令参数

    docker pull cucker/get_command_4_run_container
    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cucker/get_command_4_run_container [容器名称]/[容器ID]

    2. 生成自己的docker镜像

         如果想要有更多的自主和控制,比如加一些api接口。

    2.1 下载代码

    git clone https://github.com/Mintplex-Labs/anything-llm.git

    2.2 Windows下生成镜像

         进入代码目录anything-llm, 执行命令

    docker build -f ./docker/Dockerfile -t anythingllm:my_1.0 .

        如果中间超时报错了可以多跑几次,因为会访问github下载一些依赖的东西,而我们访问github是不稳定的, 如果你有代理服务就最好了。

    2.3 Ubuntu下生成镜像

          这里遇到不少问题,开始不管是用docker build还是docker-compose build都报错。

          后来研究./docker/Dockerfile 文件才发现,它是支持多平台编译的。

          为什么在Windows下没有问题呢,原因是我Windows下用的是Docker Desktop,而它自带buildx工具,会自动识别当前系统平台。

    2.3.1 安装工具buildx

    下载:

    1. export BUILDX_VERSION=$(curl -s https://api.github.com/repos/docker/buildx/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')
    2. curl -LO https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64

     安装:

    1. mkdir -p ~/.docker/cli-plugins
    2. mv buildx-${BUILDX_VERSION}.linux-amd64 ~/.docker/cli-plugins/docker-buildx
    3. chmod +x ~/.docker/cli-plugins/docker-buildx

    查看版本号:

    docker buildx version

    使用,这个工具也是个docker:

    1. docker buildx create --use
    2. docker buildx inspect --bootstrap

     2.3.2 生成镜像,使用buildx指定platform

    docker buildx build --platform linux/amd64 --build-arg ARG_UID=1000 --build-arg ARG_GID=1000 -f ./docker/Dockerfile  -t anythingllm:my_1.0 --load --output type=docker .
    

    2.3.3 启动命令和上面的类似

    a. 创建本地store目录   

    mkdir /var/lib/anythingllm-my

    b. 创建db和env配置文件

    1. cd /var/lib/anythingllm-my
    2. mkdir logs
    3. touch anythingllm.db
    4. touch .env
    5. chown 1000:1000 /var/lib/anythingllm-my/ -R

           这里要注意的是一定要给目录/var/lib/anythingllm-my修改owner(最后一条命令),不然docker启动会失败,报写readonly db的错误。

    c.  启动docker,不建议用docker-compose,

    1. export STORAGE_LOCATION=/var/lib/anythingllm-my &&
    2. docker run -d \
    3. --name anythingllm-my \
    4. --add-host=host.docker.internal:host-gateway \
    5. --env STORAGE_DIR=/app/server/storage \
    6. -p 3001:3001/tcp \
    7. --restart=always \
    8. --user anythingllm \
    9. -v ${STORAGE_LOCATION}:/app/server/storage \
    10. -v ${STORAGE_LOCATION}/.env:/app/server/.env \
    11. -v ${STORAGE_LOCATION}/logs:/app/server/logs/ \
    12. -w /app \
    13. anythingllm:my_1.0

         修改了文件./docker/docker-entrypoint.sh如下,增加了输出服务端log:

    1. #!/bin/bash
    2. {
    3. cd /app/server/ &&
    4. npx prisma generate --schema=./prisma/schema.prisma &&
    5. npx prisma migrate deploy --schema=./prisma/schema.prisma &&
    6. node /app/server/index.js &> /app/server/logs/server.log
    7. } &
    8. { node /app/collector/index.js; } &
    9. wait -n
    10. exit $?

    3. 结束

        有了自己的镜像,后面你可以自主修改代码了!!   

  • 相关阅读:
    5分钟构建电商API接口服务 | python小知识
    python -文件相关操作
    【C/C++笔试练习】二维数组、二维数组的访问,解引用,地址计算、计算糖果、进制转换
    Babylonjs PointerEventTypes.POINTERMOVE 获取不到模型信息
    【978.最长湍流子数组】
    韩国锂电池工厂火灾:行业安全警钟再次敲响
    排序学习(Learning to rank)综述
    【无标题】
    软测人面试 ,HR 会问到哪些问题?学会涨薪3000+
    中级工程师的职称好评吗?怎么评中级工程师?需要什么材料?
  • 原文地址:https://blog.csdn.net/myepicure/article/details/139154711