docker-compose一键部署doccano:企业级标注平台搭建指南

docker-compose一键部署doccano:企业级标注平台搭建指南

【免费下载链接】doccano Open source annotation tool for machine learning practitioners. 【免费下载链接】doccano 项目地址: https://gitcode.com/gh_mirrors/do/doccano

引言:标注平台的企业级挑战与解决方案

你是否还在为团队协作标注数据而烦恼?手动搭建标注系统耗时费力,数据安全难以保障,多用户协作效率低下?本文将带你通过docker-compose一键部署企业级标注平台doccano,解决数据标注过程中的协作难题,提升标注效率。读完本文,你将掌握:

  • doccano企业级部署的完整流程
  • 关键配置参数的优化策略
  • 多用户协作与权限管理技巧
  • 数据安全与备份方案
  • 平台监控与性能调优方法

1. 什么是doccano?

doccano是一款面向机器学习从业者的开源标注工具(Open source annotation tool for machine learning practitioners),支持文本分类、序列标注、关系抽取等多种标注任务,提供直观的用户界面和强大的协作功能,是企业构建标注流水线的理想选择。

2. 企业级部署优势

部署方式复杂度可维护性扩展性安全性推荐度
源码部署⭐⭐
单容器部署⭐⭐⭐
docker-compose部署⭐⭐⭐⭐⭐

docker-compose部署通过容器化技术将doccano的各个组件(后端服务、数据库、消息队列、前端等)有机整合,实现一键部署、配置灵活、易于维护的企业级应用。

3. 部署准备工作

3.1 系统要求

  • 操作系统:Linux/Unix(推荐Ubuntu 20.04+)
  • 内存:至少4GB(生产环境建议8GB+)
  • 磁盘空间:至少20GB可用空间
  • Docker版本:20.10+
  • Docker Compose版本:v2.0+

3.2 环境检查

# 检查Docker是否安装
docker --version

# 检查Docker Compose是否安装
docker compose version

若未安装Docker和Docker Compose,请先执行以下命令安装:

# 安装Docker
sudo apt-get update
sudo apt-get install -y docker.io docker-compose

# 启动Docker服务
sudo systemctl start docker
sudo systemctl enable docker

3.3 网络端口规划

doccano部署将使用以下端口,确保这些端口未被占用或在防火墙中开放:

  • 80:Web应用端口(Nginx前端)
  • 5432:PostgreSQL数据库端口(内部使用)
  • 5672:RabbitMQ消息队列端口(内部使用)
  • 5555:Celery监控工具Flower端口(可选)

4. 一键部署步骤

4.1 获取项目代码

# 克隆doccano仓库
git clone https://gitcode.com/gh_mirrors/do/doccano
cd doccano

4.2 配置环境变量

# 进入docker目录
cd docker

# 复制环境变量示例文件
cp .env.example .env

# 编辑环境变量文件
vi .env

关键配置参数说明:

# 平台管理员设置(必填)
ADMIN_USERNAME=admin           # 管理员用户名
ADMIN_PASSWORD=your_strong_password  # 管理员密码(建议至少8位,包含大小写字母、数字和特殊符号)
ADMIN_EMAIL=admin@company.com  # 管理员邮箱

# RabbitMQ消息队列设置(内部组件通信)
RABBITMQ_DEFAULT_USER=doccano  # RabbitMQ用户名
RABBITMQ_DEFAULT_PASS=doccano  # RabbitMQ密码

# PostgreSQL数据库设置
POSTGRES_USER=doccano          # 数据库用户名
POSTGRES_PASSWORD=doccano      # 数据库密码
POSTGRES_DB=doccano            # 数据库名称

# Flower监控设置(可选,如需启用请配置)
FLOWER_BASIC_AUTH=flower_user:strong_password  # Flower访问认证,格式:用户名:密码

4.3 启动服务

# 后台启动所有服务
docker-compose -f docker-compose.prod.yml --env-file .env up -d

启动过程需要下载相关镜像,根据网络情况可能需要5-10分钟。成功启动后,会看到类似以下输出:

Creating network doccano_network-backend  ... done
Creating network doccano_network-frontend ... done
Creating doccano_postgres_1   ... done
Creating doccano_rabbitmq_1   ... done
Creating doccano_backend_1    ... done
Creating doccano_celery_1     ... done
Creating doccano_flower_1     ... done
Creating doccano_nginx_1      ... done

4.4 验证部署

# 检查容器状态
docker-compose -f docker-compose.prod.yml ps

所有服务状态应为"Up"。此时,访问服务器IP地址(无需端口,默认80端口)即可打开doccano登录页面:

http://服务器IP地址

使用配置的管理员用户名和密码登录系统。

5. 企业级配置优化

5.1 持久化存储配置

docker-compose.prod.yml中已默认配置数据持久化,关键数据将存储在以下卷中:

volumes:
  postgres_data:  # PostgreSQL数据库数据
  static_volume:  # 静态资源文件
  media:          # 用户上传的媒体文件
  tmp_file:       # 临时文件存储

如需自定义存储路径,可修改为:

volumes:
  postgres_data:
    driver: local
    driver_opts:
      type: 'none'
      o: 'bind'
      device: '/path/to/your/postgres_data'  # 替换为实际路径
  # 其他卷类似

5.2 安全加固

5.2.1 修改默认密码

.env文件中所有默认密码(ADMIN_PASSWORD、RABBITMQ_DEFAULT_PASS、POSTGRES_PASSWORD)必须修改为强密码。

5.2.2 配置HTTPS(推荐)
  1. 准备SSL证书(可通过Let's Encrypt免费获取)
  2. 修改nginx配置:
# 编辑nginx配置模板
vi docker/nginx/nginx.conf.template

添加HTTPS配置:

server {
    listen 443 ssl;
    server_name your-domain.com;  # 替换为你的域名

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # SSL相关配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 其他配置与80端口类似,将API_URL修改为https
    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://backend:8000/api/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 其他location配置...
}
  1. 修改docker-compose.prod.yml,添加SSL证书挂载:
nginx:
  image: doccano/doccano:frontend
  # ...其他配置
  volumes:
    - static_volume:/static
    - media:/media
    - ./nginx/ssl:/etc/nginx/ssl  # 添加SSL证书挂载
  ports:
    - 80:8080
    - 443:443  # 添加HTTPS端口映射
  # ...其他配置

5.3 性能优化

5.3.1 调整资源限制

根据服务器配置,适当调整各容器的资源限制:

services:
  backend:
    # ...其他配置
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
        reservations:
          cpus: '1'
          memory: 1G

  celery:
    # ...其他配置
    deploy:
      resources:
        limits:
          cpus: '4'  # Celery处理任务,可适当增加CPU资源
          memory: 4G
        reservations:
          cpus: '2'
          memory: 2G

  postgres:
    # ...其他配置
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '1'
          memory: 2G
5.3.2 数据库优化

对于大规模标注任务,建议修改PostgreSQL配置:

postgres:
  image: postgres:13.3-alpine
  volumes:
    - postgres_data:/var/lib/postgresql/data/
    - ./postgres.conf:/var/lib/postgresql/data/postgresql.conf  # 挂载自定义配置文件
  environment:
    POSTGRES_USER: "${POSTGRES_USER}"
    POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
    POSTGRES_DB: "${POSTGRES_DB}"
  command: postgres -c config_file=/var/lib/postgresql/data/postgresql.conf  # 指定配置文件
  networks:
    - network-backend

6. 平台使用指南

6.1 登录系统

访问部署好的doccano平台(http://服务器IP或https://你的域名),使用管理员账号登录:

![登录界面示意图]

6.2 创建项目

  1. 点击"Create Project"按钮
  2. 填写项目信息:
    • Name: 项目名称(如"产品评论情感分析")
    • Description: 项目描述
    • Task Type: 选择任务类型(文本分类、序列标注、关系抽取等)

![创建项目示意图]

6.3 导入数据集

  1. 进入项目后,点击"Actions" > "Import Dataset"
  2. 选择文件格式(支持JSON、CSV、TXT等)
  3. 上传数据集文件

支持的导入格式示例(JSON):

{"text": "这款手机续航能力很强,值得推荐!"}
{"text": "屏幕显示效果出色,但价格偏高。"}

6.4 定义标签

  1. 点击左侧菜单"Labels"
  2. 点击"Add Label"按钮
  3. 设置标签信息:
    • Label Text: 标签名称(如"正面"、"负面")
    • Shortcut Key: 快捷键(方便标注)
    • Background Color: 背景颜色
    • Text Color: 文本颜色

![定义标签示意图]

6.5 添加成员与权限管理

  1. 点击左侧菜单"Members"
  2. 点击"Add"按钮
  3. 选择用户并分配角色:
    • Admin: 项目管理员,拥有所有权限
    • Annotator: 标注员,只能进行标注操作
    • Reviewer: 审核员,可审核标注结果

6.6 开始标注

  1. 点击"Start Annotation"进入标注界面
  2. 根据任务类型进行标注:
    • 文本分类:选择对应的标签
    • 序列标注:选中文本片段并分配标签
    • 关系抽取:先标注实体,再标注实体间关系

![标注界面示意图]

6.7 导出标注结果

  1. 点击"Actions" > "Export Dataset"
  2. 选择导出格式(JSON、CSV、CoNLL等)
  3. 点击"Export"按钮下载标注结果

导出的JSON格式示例:

{"doc_id": 1, "text": "这款手机续航能力很强,值得推荐!", "label": ["正面"], "username": "annotator1"}
{"doc_id": 2, "text": "屏幕显示效果出色,但价格偏高。", "label": ["中性"], "username": "annotator2"}

7. 运维与管理

7.1 服务监控

7.1.1 容器状态监控
# 查看容器状态
docker-compose -f docker-compose.prod.yml ps

# 查看服务日志
docker-compose -f docker-compose.prod.yml logs -f backend  # 查看后端服务日志
docker-compose -f docker-compose.prod.yml logs -f celery   # 查看任务队列日志
docker-compose -f docker-compose.prod.yml logs -f postgres # 查看数据库日志
7.1.2 使用Flower监控任务

如果配置了FLOWER_BASIC_AUTH,可通过http://服务器IP:5555访问Flower监控界面,查看Celery任务执行情况。

7.2 数据备份

# 创建备份脚本 backup.sh
#!/bin/bash
BACKUP_DIR="/path/to/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份数据库
docker exec doccano_postgres_1 pg_dump -U doccano doccano > $BACKUP_DIR/doccano_db_$TIMESTAMP.sql

# 备份媒体文件
tar -czf $BACKUP_DIR/doccano_media_$TIMESTAMP.tar.gz -C ./docker media

# 保留最近30天的备份
find $BACKUP_DIR -type f -mtime +30 -delete

添加执行权限并设置定时任务:

chmod +x backup.sh
crontab -e
# 添加以下内容,每天凌晨3点执行备份
0 3 * * * /path/to/backup.sh

7.3 版本升级

# 进入项目目录
cd doccano

# 拉取最新代码
git pull origin master

# 重新构建并启动服务
cd docker
docker-compose -f docker-compose.prod.yml --env-file .env down
docker-compose -f docker-compose.prod.yml --env-file .env up -d --build

8. 常见问题解决

8.1 服务启动失败

检查日志找出具体原因:

docker-compose -f docker-compose.prod.yml logs backend

常见原因及解决方法:

  • 端口冲突:确保80、5432、5672等端口未被其他服务占用
  • 环境变量配置错误:检查.env文件中的必填参数是否正确设置
  • 数据卷权限问题:确保宿主机目录有足够权限

8.2 标注数据丢失

  • 检查数据备份策略是否生效
  • 确认PostgreSQL容器是否正常运行:docker-compose -f docker-compose.prod.yml ps postgres
  • 查看数据库日志,排查是否有错误信息

8.3 系统运行缓慢

  • 检查服务器资源使用情况:tophtop
  • 调整容器资源限制,增加CPU或内存分配
  • 优化数据库查询,检查是否有慢查询

9. 总结与展望

通过docker-compose一键部署doccano,我们快速搭建了一个功能完善的企业级标注平台,实现了数据标注的协作化、流程化管理。本文详细介绍了从部署准备、环境配置、一键启动到平台使用、运维管理的全过程,帮助团队快速上手企业级数据标注工作。

未来,你还可以基于此平台进行更多扩展:

  • 集成自动标注模型,提升标注效率
  • 开发自定义导出格式,对接下游训练流程
  • 构建标注质量评估体系,提升数据质量

立即行动,部署你的企业级标注平台,让数据标注工作事半功倍!

附录:docker-compose配置详解

完整的docker-compose.prod.yml配置文件解析:

version: "3.7"
services:
  # 后端API服务
  backend:
    image: doccano/doccano:backend
    volumes:
      - static_volume:/backend/staticfiles  # 静态文件存储
      - media:/backend/media                # 媒体文件存储
      - tmp_file:/backend/filepond-temp-uploads  # 临时上传文件存储
    environment:
      ADMIN_USERNAME: "${ADMIN_USERNAME}"    # 管理员用户名
      ADMIN_PASSWORD: "${ADMIN_PASSWORD}"    # 管理员密码
      ADMIN_EMAIL: ${ADMIN_EMAIL}            # 管理员邮箱
      CELERY_BROKER_URL: "amqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@rabbitmq"  # Celery消息队列地址
      DATABASE_URL: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable"  # 数据库连接地址
      ALLOW_SIGNUP: "False"                  # 是否允许用户注册(企业环境建议设为False)
      DEBUG: "False"                         # 是否开启调试模式(生产环境设为False)
      DJANGO_SETTINGS_MODULE: "config.settings.production"  # Django配置文件
    depends_on:
      - postgres  # 依赖PostgreSQL数据库
    networks:
      - network-backend
      - network-frontend

  # Celery任务队列(处理异步任务如导入导出)
  celery:
    image: doccano/doccano:backend
    volumes:
      - media:/backend/media
      - tmp_file:/backend/filepond-temp-uploads
    entrypoint: ["/opt/bin/prod-celery.sh"]  # Celery启动脚本
    environment:
      PYTHONUNBUFFERED: "1"  # 实时输出日志
      CELERY_BROKER_URL: "amqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@rabbitmq"
      DATABASE_URL: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable"
      DJANGO_SETTINGS_MODULE: "config.settings.production"
    depends_on:
      - postgres
      - rabbitmq  # 依赖RabbitMQ消息队列
    networks:
      - network-backend

  # Celery监控工具
  flower:
    image: doccano/doccano:backend
    entrypoint: ["/opt/bin/prod-flower.sh"]  # Flower启动脚本
    environment:
      PYTHONUNBUFFERED: "1"
      CELERY_BROKER_URL: "amqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@rabbitmq"
      DATABASE_URL: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}?sslmode=disable"
      DJANGO_SETTINGS_MODULE: "config.settings.production"
      FLOWER_BASIC_AUTH: "${FLOWER_BASIC_AUTH}"  # Flower访问认证
    depends_on:
      - celery
    ports:
      - 5555:5555  # Flower端口
    networks:
      - network-backend
      - network-frontend

  # RabbitMQ消息队列
  rabbitmq:
    image: rabbitmq:3.10.7-alpine  # 使用轻量级Alpine镜像
    environment:
      RABBITMQ_DEFAULT_USER: "${RABBITMQ_DEFAULT_USER}"
      RABBITMQ_DEFAULT_PASS: "${RABBITMQ_DEFAULT_PASS}"
    ports:
      - 5672:5672  # RabbitMQ默认端口
    networks:
      - network-backend

  # Nginx前端服务
  nginx:
    image: doccano/doccano:frontend
    command: >
      /bin/sh -c
      "envsubst '
      $${WORKER_PROCESSES}
      '< /etc/nginx/nginx.conf.template
      > /etc/nginx/nginx.conf
      && nginx -g 'daemon off;'"  # 生成Nginx配置并启动
    environment:
      API_URL: "http://backend:8000"  # 后端API地址
      GOOGLE_TRACKING_ID: ""  # 谷歌统计ID(可选)
      WORKER_PROCESSES: "auto"  # Nginx工作进程数(自动)
    volumes:
      - static_volume:/static
      - media:/media
    ports:
      - 80:8080  # 映射80端口
    depends_on:
      - backend
    networks:
      - network-frontend

  # PostgreSQL数据库
  postgres:
    image: postgres:13.3-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/  # 数据库数据持久化
    environment:
      POSTGRES_USER: "${POSTGRES_USER}"
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
      POSTGRES_DB: "${POSTGRES_DB}"
    networks:
      - network-backend

# 数据卷定义
volumes:
  postgres_data:
  static_volume:
  media:
  tmp_file:

# 网络定义
networks:
  network-backend:  # 后端服务网络
  network-frontend:  # 前端服务网络

【免费下载链接】doccano Open source annotation tool for machine learning practitioners. 【免费下载链接】doccano 项目地址: https://gitcode.com/gh_mirrors/do/doccano

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值