Argilla Server 官方 Docker 镜像部署指南:环境变量、启动流程与实战配置
【免费下载链接】argillaArgilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets项目地址: https://gitcode.com/GitHub_Trending/ar/argilla
Argilla 是面向 AI 工程师与领域专家的高质量数据集协作平台。本文围绕 argilla-server 官方 Docker 镜像 展开,系统讲解镜像内置的USERNAME、PASSWORD、API_KEY、REINDEX_DATASET(S)等专属环境变量的作用与底层实现,并结合容器启动脚本、CLI 命令与 Docker Compose 实战示例,帮助读者在自托管环境中一次性完成数据库迁移、owner 用户创建与搜索索引重建,跑通完整的 Argilla Server 部署流程。
镜像定位:面向高质量数据构建的协作服务端
Argilla Server 是 Argilla 平台的服务端组件,其 Docker 镜像面向两类核心场景:一类是涉及 LLM 管道(如 RAG)的生成式任务监控与改进,另一类是 span 分类、文本分类等模型 AB 测试的预测式任务。无论是哪种任务,Argilla 都强调数据所有权与整体效率,确保"数据工作有所回报"——这一点在镜像 README 的 Why use Argilla 一节中有明确表述。
需要注意的是,仓库中存在两套 Docker 部署方案:
- argilla-server/docker/server:通用自托管镜像,支持任意环境部署,是本文讲解的主体;
- argilla-server/docker/argilla-hf-spaces:专用于 Hugging Face Spaces 部署,镜像 README 明确说明"仅可用于在 Hugging Face Hub 内部署 Argilla"。
两者的环境变量设计几乎一致,主要差异在于默认值(例如 HF Spaces 版REINDEX_DATASET默认保持启用、USERNAME默认取$SPACE_CREATOR_USER_ID或$SPACE_AUTHOR_NAME),自托管场景请以 server 镜像为准。
镜像结构解析:从 Dockerfile 看运行环境
server 镜像的 Dockerfile 采用标准的多阶段构建,先构建后精简,最终运行环境包含以下关键事实:
- 基础镜像:
python:3.13-slim,构建阶段额外安装python-dev-is-python3、libpq-dev、gcc以编译 PostgreSQL 驱动相关依赖; - 安装方式:
pip install "$wheel"[server,postgresql],即以 wheel 包形式安装 argilla-server,并启用server与postgresql两个 extras,说明该镜像默认就支持 PostgreSQL 数据源; - 运行用户:创建非 root 用户
argilla,数据目录/var/lib/argilla归其所有并声明为VOLUME,遵循最小权限原则; - 工作目录:
/home/argilla,启动脚本start_argilla_server.sh从scripts/目录复制于此并设为入口; - 端口:
EXPOSE 6900,与 uvicorn 默认端口一致。
镜像内置的默认环境变量
Dockerfile 的 ENV 指令定义了三个层面的默认值,构成了镜像的可观测行为基线:
| 变量 | 默认值 | 说明 |
|---|---|---|
USERNAME | "" | 若提供,作为 owner 用户用户名 |
PASSWORD | "" | 若提供,作为 owner 用户密码 |
API_KEY | "" | 若提供,作为 owner 用户 API key;留空则自动生成随机值 |
ARGILLA_HOME_PATH | /var/lib/argilla | Argilla 应用数据存放路径,同时被声明为 Docker 卷 |
UVICORN_PORT | 6900 | uvicorn 监听端口 |
UVICORN_APP | argilla_server:app | uvicorn 加载的应用对象,扩展镜像可覆盖此变量 |
ARGILLA_前缀的变量名不是随意命名的——服务端配置类 settings.py 基于 pydantic-settings 实现,其Config中声明env_prefix = "ARGILLA_",即所有配置项均可通过ARGILLA_前缀的环境变量注入,例如ARGILLA_ELASTICSEARCH、ARGILLA_DATABASE_URL、ARGILLA_REDIS_URL。
容器启动全流程:一行 CMD 背后的四步动作
镜像的入口是:
CMD ["/bin/bash", "start_argilla_server.sh"]真正干活的脚本是 start_argilla_server.sh,它在set -e模式下依次执行四个步骤,任何一步失败容器都会退出,便于编排系统感知故障:
1. 数据库迁移:python -m argilla_server database migrate
容器启动的第一件事是把数据库结构升级到最新。该命令封装了 Alembic 迁移逻辑(见 cli/database/migrate.py),默认目标 revision 为head,并会根据当前版本与目标版本的关系自动选择upgrade或downgrade动作,最终执行:
alembic -c <alembic.ini> upgrade head迁移目标是ARGILLA_DATABASE_URL指向的数据库。若未显式配置,settings.py 会默认落在sqlite+aiosqlite:///$ARGILLA_HOME_PATH/argilla.db;而生产部署通常配置为postgresql+asyncpg://...,此时ARGILLA_HOME_PATH卷主要存放附件等本地文件。
2. 按需创建 owner 用户:USERNAME+PASSWORD的判定
脚本只有在USERNAME与PASSWORD同时非空时才执行用户创建,否则打印 "No username and password was provided. Skipping user creation" 并跳过:
if [ -n "$USERNAME" ] && [ -n "$PASSWORD" ]; then python -m argilla_server database users create \ --first-name $USERNAME --username $USERNAME --password $PASSWORD --role owner \ [--api-key $API_KEY] [--workspace $WORKSPACE] fi这一步背后调用的 CLI 实现位于 cli/database/users/create.py,有以下值得注意的行为:
- 用户名约束:帮助文本要求 username 为不带空格的小写字符串,允许字母、数字、短横线与下划线;
- 角色固定为
owner:脚本硬编码--role owner,即通过环境变量创建的是平台超级管理员; - 幂等性:创建前会先查重(按 username 与 api_key 各查一次),已存在则打印提示并跳过,重复启动容器不会产生重复用户;
- API key 兜底:若未显式提供
API_KEY,模型层 database.py 中User.api_key字段的默认值生成器generate_user_api_key()会调用secrets.token_urlsafe()生成安全随机 key,CLI 选项也声明了"If not specified a secure random API key will be generated";显式提供的 key 则需满足最少 8 个字符的长度约束(见USER_API_KEY_MIN_LENGTH = 8)。
3. 按需重建搜索索引:REINDEX_DATASETS判定
if [ "$REINDEX_DATASETS" == "true" ] || [ "$REINDEX_DATASETS" == "1" ]; then python -m argilla_server search-engine reindex fi该步骤执行全量重建索引,底层实现在 cli/search_engine/reindex.py:遍历所有数据集,先delete_index再create_index,随后按每条 100 条记录(YIELD_PER = 100)的批次流式写回搜索服务,并用 rich 进度条输出过程信息。当搜索配置变更(如字段、问题、元数据属性、向量设置调整)或数据需要刷新时,开启此开关可保证搜索服务与数据库一致。
命名细节提醒:镜像 README 中写作单数
REINDEX_DATASET,但启动脚本与 docker-compose 示例 中实际生效的变量名是复数REINDEX_DATASETS,二者指向同一个功能。配置时请以复数写法为准,否则开关不会生效。
4. 启动 uvicorn:python -m uvicorn $UVICORN_APP --host "0.0.0.0"
最后以0.0.0.0全接口监听启动 ASGI 应用,端口由UVICORN_PORT决定(默认 6900)。脚本注释明确引用了 uvicorn 官方约定:任何以UVICORN_前缀命名的环境变量都会被 uvicorn 读取,例如设置UVICORN_PORT=5000即可改端口。自定义应用时,可通过覆盖UVICORN_APP指向自己的 ASGI 对象。
专属环境变量速查:镜像为你省掉的手工步骤
综合 镜像 README 与启动脚本实现,四个专属变量的完整语义如下:
| 环境变量 | 默认值 | 作用 |
|---|---|---|
USERNAME | "" | owner 用户名;可与 HF OAuth 配合定义服务端 owner |
PASSWORD | "" | owner 密码;仅当USERNAME与PASSWORD同时提供时才创建用户 |
API_KEY | "" | owner API key;留空时自动生成安全随机值 |
REINDEX_DATASETS | 0 | 取值1或true时,启动阶段全量重建搜索索引 |
这套设计的价值在于:传统部署需要先起服务、再手工执行database users create或create-default创建管理员,而镜像把这步收敛为环境变量,容器启动即完成初始化,非常适合编排平台幂等拉起。
实战:从 docker run 到 Docker Compose
最小化单容器启动
docker run -d \ --name argilla \ -p 6900:6900 \ -e USERNAME=argilla \ -e PASSWORD=12345678 \ -e API_KEY=argilla.apikey \ -e WORKSPACE=default \ -e ARGILLA_ELASTICSEARCH=http://localhost:9200 \ -e ARGILLA_DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/argilla \ -e ARGILLA_REDIS_URL=redis://localhost:6379/0 \ -v argilladata:/var/lib/argilla \ argilla/argilla-server:latest启动完成后即可用argilla/12345678登录 Web UI,或使用API_KEY从客户端连接。容器日志中可依次观察到数据库迁移、owner 用户创建(User successfully created)与 uvicorn 启动信息。
官方 Docker Compose 参考
仓库提供了完整的 docker-compose.yaml,包含 argilla(server + worker)、postgres、elasticsearch、redis 四类服务。其中 argilla 服务的关键配置:
argilla: image: argilla/argilla-server:latest ports: ["6900:6900"] environment: ARGILLA_HOME_PATH: /var/lib/argilla ARGILLA_ELASTICSEARCH: http://elasticsearch:9200 ARGILLA_DATABASE_URL: postgresql+asyncpg://postgres:postgres@postgres:5432/argilla ARGILLA_REDIS_URL: redis://redis:6379/0 USERNAME: argilla PASSWORD: 12345678 API_KEY: argilla.apikey WORKSPACE: default # REINDEX_DATASETS: 1 # 需要重索引时取消注释 # HF_HUB_DISABLE_TELEMETRY: 1 # 关闭遥测 volumes: - argilladata:/var/lib/argilla值得留意:示例中通过WORKSPACE环境变量指定了用户所属工作区,这对应脚本中--workspace $WORKSPACE参数(详见 create.py 中对--workspace可重复使用的说明);worker 服务则通过python -m argilla_server worker --num-workers $BACKGROUND_NUM_WORKERS启动后台任务进程,负责异步作业处理。
三个高频运维场景
- 想用默认实验账号:不设置
USERNAME/PASSWORD,容器会跳过用户创建;此时可通过python -m argilla_server database users create-default(见 create_default.py,默认账号argilla/ 密码1234/ API keyargilla.apikey,定义于 constants.py)在容器内手动创建。 - 搜索配置变更后需要刷新:给 argilla 服务追加
REINDEX_DATASETS: 1并重启容器,启动阶段会自动重建全部索引(也可在运行时用python -m argilla_server search-engine reindex --dataset-id <id>按数据集定向重建)。 - 更换默认端口:设置
UVICORN_PORT=8080,同时将容器端口映射调整为8080:8080即可,无需改动镜像。
总结
Argilla Server 的官方 Docker 镜像通过一个启动脚本把数据库迁移、owner 用户初始化、搜索索引重建、uvicorn 服务拉起四步动作编排成一条确定性的启动链路,并用USERNAME、PASSWORD、API_KEY、REINDEX_DATASETS四个专属环境变量对外暴露初始化能力。理解 Dockerfile 的默认值与 start_argilla_server.sh 的执行顺序,再配合 docker-compose 参考部署,即可在自托管环境中快速、幂等地交付一套可用的 Argilla 服务端,并为后续接入 PostgreSQL、Elasticsearch/OpenSearch 与 Redis 的生产架构打好基础。
【免费下载链接】argillaArgilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets项目地址: https://gitcode.com/GitHub_Trending/ar/argilla
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考