ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Label Studio Enterprise 企业版 Docker Compose 本地化部署完整指南

Label Studio Enterprise 企业版 Docker Compose 本地化部署完整指南 Label Studio Enterprise 企业版 Docker Compose 本地化部署完整指南【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio本文档基于 Label Studio 开源仓库中的企业版安装手册系统讲解如何以 Docker Compose 方式在自有基础设施上部署 Label Studio Enterprise含 Nginx、uWSGI 应用与 RQ 任务队列的分层架构覆盖 Docker Registry 授权登录、license 文件挂载、env.list 与 docker-compose.yml 完整配置、PostgreSQL/Redis 连接与 SSL 加固、版本核对等关键环节。读完本文你将能够独立完成一套可运行、可备份、可升级的 Label Studio Enterprise 本地化部署并理解每项配置背后的源码实现依据。部署方式选择与适用场景当企业面临严格的隐私法规、法律合规要求或希望完全掌控自有基础设施上的自定义安装时可以在 Docker 或公有云环境中本地化部署 Label Studio Enterprise。安装方式的选择应结合部署规模与可靠性要求Docker Compose 部署更适合概念验证Proof-of-Concept与小规模项目。对于生产环境和更大规模部署官方文档强烈建议使用 Kubernetes——Kubernetes 部署提供更好的可扩展性、可靠性并可解锁如 Prompts 等高级特性详见 在 Kubernetes 上部署 Label Studio Enterprise。离线Airgapped环境部署如果要求没有任何数据离开企业基础设施可参考 无公网访问安装 Label Studio Enterprise。有关 Label Studio Enterprise 的安全加固细节参见 Secure Label Studio。社区版Community Edition的安装方法不同请参考 安装 Label Studio 社区版本文仅针对企业版。需要注意的是学术许可Academic licenses不支持 Label Studio Enterprise 的本地化部署。部署架构总览Label Studio Enterprise 本地化部署的两个核心组件是**主应用main app**与RQRedis Queue工作进程。安装完成后应用会自动连接到以下两个运行中的外部服务PostgreSQL版本 13存储标注元数据同时与 RQ workers 协作存储报表与预标注数据Redis版本 6.0协助主应用执行统计报表计算、预测等后台任务并与 RQ workers 通信以管理后台任务队列。在 Docker Compose 编排下详见下文 第四步整个栈由 6 个服务组成nginx反向代理与静态资源、appuWSGI 应用进程、以及 4 个不同优先级的 RQ workerlow/default/high/critical。关于本地化部署整体组件的更完整描述身份提供方、负载均衡/Ingress、对象存储、ML 后端、Webhook 集成等可参阅 安装概览。从源码角度印证镜像入口脚本 deploy/docker-entrypoint.sh 根据容器启动命令分派不同角色——nginx模式运行独立反向代理容器、label-studio-uwsgi模式通过uwsgi --ini /label-studio/deploy/uwsgi.ini启动应用、label-studio-migrate模式执行数据库迁移其余命令包括各 RQ worker走通用分支其中rqworker --with-scheduler表示该进程同时承担调度器职责。系统要求端口要求Label Studio 默认期望8080 端口开放。如需使用其他端口可在启动时另行指定。服务器要求磁盘根据计划标注的数据量分配磁盘空间。基准参考使用 SQLite 数据库时100 万条标注任务约占 2.3GB 磁盘生产实例建议预留50GB磁盘空间。内存最低8GB RAM推荐16GB RAM例如 AWS 上的 t3.large 或 t3.xlarge。软件要求PostgreSQL 14 及以上版本或 SQLite 3.35 及以上版本企业版 Docker 部署实际以 PostgreSQL Redis 为准见上文架构说明。前提准备在开始部署前需要确认已具备以下两项授权资源Docker 镜像拉取授权令牌authorization token有效的 license 文件license file。如果你是 Label Studio Enterprise 客户但没有上述资源可通过邮件联系 supporthumansignal.com或在官方支持门户提交工单获取授权令牌与 license 文件副本。此外请确保系统已安装 Docker Compose。第一步登录 Docker Registry拉取 Label Studio Enterprise 镜像前必须先完成授权登录。执行以下命令docker login --username heartexlabs提示输入密码时输入**令牌token**而非账户密码。登录成功后会生成~/.docker/config.json文件保存授权信息。注意如果你在登录 Docker 时配置了默认 registry可能需要显式指定 registrydocker login --username heartexlabs docker.io第二步添加 license 文件拉取最新企业版镜像后需要添加 license 文件——没有 license 文件无法启动 Docker 镜像。创建工作目录label-studio-enterprise并将 license 文件放入其中mkdir -p label-studio-enterprise cd label-studio-enterprise将 license 文件license.txt移动到label-studio-enterprise目录下。第三步配置 env.list 环境变量在生产环境运行 Label Studio Enterprise 时通过 Docker Compose 启动可以连接外部数据库与服务。首先创建label-studio-enterprise/env.list写入所需的环境变量# Specify the path to the license file. LICENSE/label-studio-enterprise/license.txt # Specify the FQDN name with port if differs from 80 LABEL_STUDIO_HOSThttp://localhost/ # Database engine (PostgreSQL by default) DJANGO_DBdefault # Default configuration DJANGO_SETTINGS_MODULEhtx.settings.label_studio # PostgreSQL database name POSTGRE_NAMEpostgres # PostgreSQL database user POSTGRE_USERpostgres # PostgreSQL database password POSTGRE_PASSWORD # PostgreSQL database host POSTGRE_HOSTdb # PostgreSQL database port POSTGRE_PORT5432 # Optional: PostgreSQL SSL mode # POSTGRE_SSL_MODErequire # Optional: Specify Postgre SSL certificate # POSTGRE_SSLROOTCERTpostgre-ca-bundle.pem # Optional: Client-side certificate and key # POSTGRE_SSLCERTclient.crt # POSTGRE_SSLKEYclient.key # Redis location e.g. redis[s]://[:password]localhost:6379/1 # rediss:// scheme is mandatory to use SSL REDIS_LOCATIONredis://redis:6379/1 # Optional: Redis database # REDIS_DB1 # Optional: Redis password # REDIS_PASSWORD12345 # Optional: Redis socket timeout # REDIS_SOCKET_TIMEOUT3600 # Optional: Require certificate # REDIS_SSL_CERTS_REQSrequired # Optional: Specify Redis SSL certificate # REDIS_SSL_CA_CERTSredis-ca-bundle.pem # Optional: Client-side certificate and key # REDIS_SSL_CERTFILEclient.crt # REDIS_SSL_KEYFILEclient.key # Optional: Specify SSL termination certificate key # Files should be placed in the directory certs at the same directory as docker-compose.yml file # NGINX_SSL_CERT/certs/cert.pem # NGINX_SSL_CERT_KEY/certs/cert.key核心环境变量速查表变量必填默认值说明LICENSE是无license 文件在容器内的挂载路径如/label-studio-enterprise/license.txtLABEL_STUDIO_HOST是http://localhost/对外访问的 FQDN端口非 80 时需显式带上端口支持子路径DJANGO_DB否default数据库引擎选择企业版 Docker 默认defaultPostgreSQL可选mysql、sqliteDJANGO_SETTINGS_MODULE是htx.settings.label_studio企业版 Django 配置模块POSTGRE_NAME否postgresPostgreSQL 数据库名POSTGRE_USER否postgresPostgreSQL 用户名POSTGRE_PASSWORD否postgresPostgreSQL 密码POSTGRE_HOST否localhostPostgreSQL 主机compose 网络内通常为dbPOSTGRE_PORT否5432PostgreSQL 端口POSTGRE_SSL_MODE否无PostgreSQL SSL 模式如require、verify-ca、verify-full等POSTGRE_SSLROOTCERT条件无CA 证书 bundle 路径verify-ca/verify-full时必填POSTGRE_SSLCERT/POSTGRE_SSLKEY条件无客户端证书与私钥verify-full时必填REDIS_LOCATION是无Redis 连接串格式redis[s]://[:password]host:port/db使用 SSL 时必须采用rediss://schemeREDIS_DB否1Redis 数据库编号REDIS_PASSWORD否无Redis 密码REDIS_SOCKET_TIMEOUT否无Redis socket 超时秒如3600REDIS_SSL_CERTS_REQS否required是否校验证书设为none可关闭REDIS_SSL_CA_CERTS否无Redis CA 证书 bundle 路径REDIS_SSL_CERTFILE/REDIS_SSL_KEYFILE否无客户端证书与私钥NGINX_SSL_CERT/NGINX_SSL_CERT_KEY否无Nginx SSL 终止证书与私钥证书文件须放在与 docker-compose.yml 同级的certs目录配置项的源码实现依据以上 PostgreSQL 相关变量与 Django 数据库配置存在直接映射关系。在 label_studio/core/settings/base.py 中DATABASES_ALL字典通过get_env()依次读取POSTGRE_NAME、POSTGRE_USER、POSTGRE_PASSWORD、POSTGRE_HOST、POSTGRE_PORT默认值分别为postgres/postgres/postgres/localhost/5432DJANGO_DB变量则决定最终选用哪套数据库配置default指向 PostgreSQL。这意味着即使不在 Docker 环境、直接以进程方式运行 Label Studio也可以通过同名环境变量复用本手册的配置思路。Redis 的 SSL 行为同样有源码支撑label_studio/core/settings/base.py 中构造了REDIS_SSL_SETTINGS字典将REDIS_SSL_CERTS_REQS默认required取值为none时关闭校验、REDIS_SSL_CA_CERTS、REDIS_SSL_KEYFILE、REDIS_SSL_CERTFILE传递给 Redis 客户端。后台任务执行框架则见 label_studio/core/redis.py其中redis_healthcheck()与start_job_async_or_sync()展示了应用层如何依赖 Redis 完成异步任务的分发与执行。第四步编写 docker-compose.yml设置完所有环境变量后创建docker-compose.ymlversion: 3.8 services: nginx: image: heartexlabs/label-studio-enterprise:VERSION ports: - 80:8085 - 443:8086 depends_on: - app restart: on-failure env_file: - env.list command: nginx volumes: - ./certs:/certs:ro working_dir: /label-studio-enterprise app: image: heartexlabs/label-studio-enterprise:VERSION restart: on-failure env_file: - env.list command: label-studio-uwsgi volumes: - ./mydata:/label-studio/data:rw - ./license.txt:/label-studio-enterprise/license.txt:ro working_dir: /label-studio-enterprise rqworkers_low: image: heartexlabs/label-studio-enterprise:VERSION depends_on: - app env_file: - env.list volumes: - ./mydata:/label-studio/data:rw - ./license.txt:/label-studio-enterprise/license.txt:ro working_dir: /label-studio-enterprise command: [ python3, /label-studio-enterprise/label_studio_enterprise/manage.py, rqworker, --with-scheduler, low ] rqworkers_default: image: heartexlabs/label-studio-enterprise:VERSION depends_on: - app env_file: - env.list volumes: - ./mydata:/label-studio/data:rw - ./license.txt:/label-studio-enterprise/license.txt:ro working_dir: /label-studio-enterprise command: [ python3, /label-studio-enterprise/label_studio_enterprise/manage.py, rqworker, --with-scheduler, default ] rqworkers_high: image: heartexlabs/label-studio-enterprise:VERSION depends_on: - app env_file: - env.list volumes: - ./mydata:/label-studio/data:rw - ./license.txt:/label-studio-enterprise/license.txt:ro working_dir: /label-studio-enterprise command: [ python3, /label-studio-enterprise/label_studio_enterprise/manage.py, rqworker, --with-scheduler, high] rqworkers_critical: image: heartexlabs/label-studio-enterprise:VERSION depends_on: - app env_file: - env.list volumes: - ./mydata:/label-studio/data:rw - ./license.txt:/label-studio-enterprise/license.txt:ro working_dir: /label-studio-enterprise command: [ python3, /label-studio-enterprise/label_studio_enterprise/manage.py, rqworker, --with-scheduler, critical ]将镜像标签中的VERSION替换为你实际使用的版本号例如2.2.8-1参见下文「获取 Docker 镜像版本」。各服务职责解析nginx对外反向代理映射宿主 80/443 端口到容器内 8085/8086command: nginx触发 deploy/docker-entrypoint.sh 中的 nginx 分支进入独立容器模式并通过APP_HOST环境变量代理到app服务。SSL 终止证书可通过NGINX_SSL_CERT/NGINX_SSL_CERT_KEY注入容器启动时由 deploy/docker-entrypoint.d/nginx/10-configure-nginx.sh 动态写入配置该脚本还支持按NGINX_ERROR_LOG_LEVEL调整日志级别、按LABEL_STUDIO_HOST自动生成子路径路由。appuWSGI 应用进程command: label-studio-uwsgi对应入口脚本中的应用分支加载 deploy/uwsgi.ini默认 4 个进程可通过UWSGI_PROCESSES覆盖默认按 RSS 1GB 回收 worker、worker 最大生命周期 1200 秒、请求超时 harakiri 91 秒等自我保护参数均可在该文件中调整。数据目录./mydata以读写方式挂载到/label-studio/datalicense 以只读方式挂载。rqworkers_low / rqworkers_default / rqworkers_high / rqworkers_critical四个不同优先级的 RQ 后台任务工作进程均以python3 .../manage.py rqworker --with-scheduler queue启动。--with-scheduler表示 worker 同时运行 RQ 调度器用于处理周期性任务四个队列的存在让报表生成、数据导入等不同重要程度的任务可以分级调度、互不阻塞。如需参考社区版的同类编排含内置 PostgreSQL 服务与pgautoupgrade自动升级镜像、JSON_LOG1结构化日志等差异点可查看仓库根目录的 docker-compose.yml。第五步启动 Docker Compose运行以下命令启动整个服务栈docker-compose up注意如果你对外暴露了 80 端口必须以sudo启动 Docker。启动过程中各容器的入口脚本会自动完成若干初始化工作可以从源码中确认deploy/docker-entrypoint.d/app/20-wait-for-db.sh 会等待 PostgreSQL或 MySQL就绪后才继续启动应用同时该脚本会解析POSTGRE_SSL_MODE在verify-ca/verify-full模式下强制要求提供 CA 证书并将证书复制到容器内安全目录权限 600再导出PGSSLMODE、PGSSLROOTCERT、PGSSLCERT、PGSSLKEY供 psycopg 连接使用。deploy/docker-entrypoint.d/app/30-run-db-migrations.sh 在检测到数据库主机环境变量且未设置SKIP_DB_MIGRATIONStrue时自动执行python3 .../manage.py locked_migrate完成数据库迁移。获取 Docker 镜像版本如需核对当前运行的 Label Studio Enterprise Docker 镜像版本可在宿主机上以 root 或sudo执行docker ps$ docker ps 03b88eebdb65 heartexlabs/label-studio-enterprise:2.2.8-1 uwsgi --ini deploy/… 36 hours ago Up 36 hours 0.0.0.0:80-8000/tcp label-studio-enterprise_app_1以上例输出中image列即显示镜像与版本号镜像heartexlabs/label-studio-enterprise:2.2.8-1对应版本2.2.8-1。常见运维要点与排障提示数据库连接失败检查POSTGRE_HOST是否指向 compose 网络内的服务名默认dbPOSTGRE_NAME/POSTGRE_USER/POSTGRE_PASSWORD是否与数据库实际配置一致相关连接参数解析见 label_studio/core/settings/base.py。Redis 连接失败确认REDIS_LOCATION格式正确SSL 场景必须使用rediss://并检查REDIS_SSL_CERTS_REQS与证书路径若应用因 Redis 不可用导致后台任务统计报表、预测等无法执行可参考 label_studio/core/redis.py 中的健康检查与任务分发逻辑定位问题。端口占用默认对外暴露 80/443若与宿主其他服务冲突可修改ports映射并同步调整LABEL_STUDIO_HOST如果无法使用 80 端口需以sudo启动。数据持久化./mydata:/label-studio/data:rw挂载保存应用数据头像、快照等资产务必做好该目录的定期备份license 文件变更后需重启对应容器使其生效。升级获取新版本镜像后更新docker-compose.yml中的VERSION标签重新执行docker-compose up -d入口脚本会再次执行数据库迁移除非显式设置SKIP_DB_MIGRATIONStrue。安全加固生产环境建议启用 PostgreSQL SSLPOSTGRE_SSL_MODErequire及以上、Redis SSLrediss://以及 Nginx 的 HTTPS 终止NGINX_SSL_CERT/NGINX_SSL_CERT_KEY证书放入与 compose 文件同级的certs目录更完整的安全与加固说明参见 Secure Label Studio。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表