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:

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

Windows:

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

1.3 运行docker

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

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

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

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

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

SERVER_PORT=3001
JWT_SECRET="my-random-string-for-seeding" # Please generate random string at least 12 chars long.
STORAGE_DIR="/var/lib/anything"
OPEN_AI_KEY=""LLM_PROVIDER='ollama'
OLLAMA_BASE_PATH='http://localhost:11434'
OLLAMA_MODEL_PREF='llama3-64k:latest'
OLLAMA_MODEL_TOKEN_LIMIT='4096'EMBEDDING_ENGINE='native'
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

下载:

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

 安装:

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

查看版本号:

docker buildx version

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

docker buildx create --use
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配置文件

cd /var/lib/anythingllm-my
mkdir logs
touch anythingllm.db
touch .env
chown 1000:1000 /var/lib/anythingllm-my/ -R

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

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

export STORAGE_LOCATION=/var/lib/anythingllm-my &&
docker run -d \--name anythingllm-my \--add-host=host.docker.internal:host-gateway \--env STORAGE_DIR=/app/server/storage \-p 3001:3001/tcp \--restart=always \--user anythingllm \-v ${STORAGE_LOCATION}:/app/server/storage \-v ${STORAGE_LOCATION}/.env:/app/server/.env \-v ${STORAGE_LOCATION}/logs:/app/server/logs/ \-w /app \anythingllm:my_1.0

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

#!/bin/bash
{cd /app/server/ &&npx prisma generate --schema=./prisma/schema.prisma &&npx prisma migrate deploy --schema=./prisma/schema.prisma &&node /app/server/index.js &> /app/server/logs/server.log
} &
{ node /app/collector/index.js; } &
wait -n
exit $?

3. 结束

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Conda安装

conda可以做到不同项目就用不同虚拟环境,这样就能做到每个项目的依赖包都是相互独立 一、windows Download Success | Anaconda 环境变量 二、nano 本次安装Archiconda的外部python版本为python3.7.1

【论文复现|智能算法改进】基于改进鲸鱼优化算法的移动机器人多目标点路径规划

目录 1.算法原理2.数学模型3.改进点4.结果展示5.参考文献6.代码获取 1.算法原理 SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】 2.数学模型 使用 A* 算法生成所有目标点之间的距离矩阵U: U [ d 1 − 1 d 1 − 2 d 1 − 3 ⋯ d 1 − i d…

【算法训练记录——Day28】

Day28——回溯算法Ⅳ 1.复原IP地址2.[全排列](https://leetcode.cn/problems/permutations/submissions/539240290/)3.[全排列Ⅱ](https://leetcode.cn/problems/permutations-ii/description/) ● 93.复原IP地址 ● 78.子集 ● 90.子集II 1.复原IP地址 思路:相当于…

【C语言】二维数组(详解)

目录 1. 二维数组的创建 1.1 二维数组的概念 1.2 二维数组的创建 2. 二维数组的初始化 2.1 不完全初始化 2.2 完全初始化 2.3 按照行初始化 2.4 初始化时能省略行,但不能省略列 3. 二维数组的使用 3.1 二维数组下标 3.2 二维数组…

将Firefox插件导入Edge/Chrome中

目录 将Firefox插件导入Edge/Chrome中前言导出火狐插件.xpi格式插件导入edge/chorme中错误示范1错误示范2修改过程manifest.jsondict文件夹修改backgroundScript.jsinjectedScript.jsdebug过程最终backgroundScript.js和injectedScript.js代码 完工阶段修改后的源码 将Firefox插…

DS1338/PT7C4338串行实时时钟-国产兼容RS4C1338

RS4C1338串行实时时钟(RTC)是一种低功耗、全二进制编码十进制(BCD)时钟/日历加上56字节NV SRAM。地址和数据通过I2C接口串行传输。时钟/日历提供秒、分钟、小时、天、日期、月份和年份信息。对于少于31天的月份,月末日…

这款神器可以让屏幕截图变为HTML代码!!【送源码】

今天的开源项目是「screenshot-to-code」——这就是那个能够将截图转化为HTML/JS/Tailwind CSS代码的项目。 利用GPT-4 Vision生成代码、结合DALL-E 3生成相似的图片。 「项目的独特之处:」 「1. 屏幕截图即代码:」 将屏幕截图瞬间转变为可运行的HTML/…

区间合并——Acwing.803区间合并

区间合并 定义 区间合并是指将一组有重叠或相邻的区间合并成一个或多个更大的区间。 运用情况 图像处理:在图像的区域分析中,可能需要将相邻的具有相似特征的区域进行合并。时间区间处理:比如将多个连续时间段进行合并。行程规划&#xf…

发布中文文档类资源仓库-ChineseDocumentPDF

引言 今天中午,排队打饭间隙,刷到新闻,说是:360AILAB-NLP团队开源了中文论文、研报文档场景的轻量化版式分析模型360LayoutAnalysis。 面向中文论文及研报两个场景的轻量化版式分析模型已经开源: Github地址&#x…

Gi标签管理

文章目录 前言理解标签创建标签操作标签总结 前言 理解标签 标签,可以理解为对某次commit的一次标识,相当于起起了一个别名。 例如,在项目发布某个版本时候,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。 这有什…

论文《Federated Social Recommendation with Graph Neural Network》阅读

论文《Federated Social Recommendation with Graph Neural Network》阅读 论文概况IntroMethodology问题形式化FeSoG本地图设计本地差分隐私Pseudo-Item Labeling 模型优化模型训练 论文总结 论文概况 今天总结一下最近阅读的关于联邦社会化推荐的论文《Federated Social Rec…

第五讲:51单片机+RA8889驱动控制彩屏 完整源码说明 【 源码v1.2 】

51单片机驱动控制彩屏系列讲座 第一讲:单片机STC89C52RA8889驱动控制彩屏【 源码v1.0 】 第二讲:单片机STC89C52RA8889驱动控制彩屏 代码移植介绍 第三讲:单片机STC89C52RA8889驱动控制彩屏 代码的压缩(Keil编译器) 第…

phpstudy的安装dvwa

phpstudy安装dvwa 1. 下载phpstudy Windows版phpstudy下载 - 小皮面板(phpstudy) (xp.cn) 2. 搭建dvwa靶场 下载地址:https://github.com/ethicalhack3r/DVWA/archive/master.zip 将其放入www文件夹中 3. 修改配置文件 将\DVWA-master\config中config.inc.php…

STL-常用容器

3.1.1. string基本概念 本质: string是C风格的字符串,char*是C语言风格的字符串string本质上是一个类 string和char*的区别: char*是一个指针string是一个类,类内部封装并负责管理char*,是一个char*型的容器 特点&a…

ISCC2024 winterbegins

首先,用IDA打开程序,看到一大堆while(1)又套着while(1)的结构,肯定是控制流平坦化了,我们可以使用IDA插件d810去掉。 现在程序就好看多了。如果IDA没有显示这堆中文字符串,可以考虑使用IDA8.3,就可以显示…

stm32_HAL_CAN(特点:广播试,检测线路是否空,id有优先级)

UART I2C SPI 介绍 CAN(Controller Area Network)接口是一种常用于嵌入式系统中的通信接口,尤其在汽车和工业领域。它由Robert Bosch GmbH在1986年开发,旨在提供一种可靠、高效、灵活的车载通信网络。CAN总线的主要 特点包括&am…

eNSP学习——配置高级的访问控制列表

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置Telnet 4、配置高级ACL控制访问 需要eNSP各种配置命令的点击链接自取:华为eNSP各种设备配置命令大全PDF版_ensp配置命令大全资源-…

数据结构01 栈及其相关问题讲解

栈是一种线性数据结构,栈的特征是数据的插入和删除只能通过一端来实现,这一端称为“栈顶”,相应的另一端称为“栈底”。 栈及其特点 用一个简单的例子来说,栈就像一个放乒乓球的圆筒,底部是封住的,如果你想…

【简单介绍下Sass,什么是Sass?】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

Linux:多线程的操作

多线程操作 进程与线程线程的创建 create_pthread创建线程池给线程传入对象的指针 线程等待 pthread_join退出线程 pthread_exit线程等待参数 retval 与 线程退出参数 retval 线程中断 pthread_cancel获取线程编号 pthread_self线程分离 pthread_detach 进程与线程 进程是资源…