Alibaba DASD-4B Thinking 企业内网部署全攻略:基于Ubuntu服务器与Docker Compose

最近有不少朋友在问,有没有办法把一些强大的AI模型部署到自己的服务器上,特别是企业内部,既能保证数据安全,又能灵活调用。正好,我最近花了不少时间,把阿里的DASD-4B Thinking模型在企业内网环境里完整地跑了起来,整个过程踩了不少坑,也总结了一套比较稳妥的方案。

今天这篇文章,我就手把手带你走一遍,如何在公司内部的Ubuntu服务器上,用Docker Compose把DASD-4B Thinking部署成一个高可用、带Web界面的私有化AI对话服务。从服务器初始化开始,到最终通过域名安全访问,我会把每一步都讲清楚,目标是让你跟着做就能成功。

1. 部署前准备:理清思路与资源

在动手之前,我们先搞清楚这次部署要达成什么目标,以及需要准备哪些东西。简单来说,我们要搭建一个包含以下核心组件的服务栈:

  1. 模型服务:运行DASD-4B Thinking模型,提供AI推理能力。
  2. 缓存服务:用Redis来缓存一些会话信息或临时数据,提升响应速度。
  3. Web服务:提供一个用户友好的对话界面,方便团队成员使用。
  4. 反向代理:用Nginx来处理外部请求,转发给内部服务,并且配置SSL证书实现HTTPS加密访问。

这样一来,整个服务就具备了生产环境的基本要素:服务隔离、性能优化、安全访问和易用性。

你需要准备的东西:

  • 一台Ubuntu服务器:建议版本20.04 LTS或22.04 LTS。配置方面,由于是4B参数的模型,内存最好有16GB或以上,CPU核心数多一些更好,硬盘空间预留50GB以上。这台服务器需要能在你的企业内网中访问。
  • 一个域名:用于通过HTTPS访问服务,比如 ai.your-company.com。你需要能管理这个域名的DNS解析。
  • 基础网络知识:知道怎么通过SSH连接服务器,了解端口、防火墙的基本概念。

好了,思路理清了,资源也备好了,我们这就开始。

2. 第一步:Ubuntu服务器基础环境搭建

拿到一台全新的Ubuntu服务器,我们首先需要做一些基础的初始化工作,为后续的Docker部署铺平道路。

2.1 系统更新与基础工具安装

通过SSH连接到你的服务器,第一件事就是更新系统软件包列表并升级已有的软件。

# 更新软件包列表
sudo apt update

# 升级所有已安装的软件包(这可能需要一些时间)
sudo apt upgrade -y

# 安装一些后续可能会用到的工具
sudo apt install -y curl wget vim git net-tools

curlwget用于下载文件,vim是文本编辑器,git用于克隆代码仓库,net-tools包含了一些网络诊断工具如netstat

2.2 安装Docker引擎

Docker是我们整个部署方案的核心。我们将使用Docker官方提供的一键安装脚本,这是最方便的方法。

# 下载并运行Docker安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

安装完成后,将当前用户添加到docker用户组,这样以后运行Docker命令就不需要每次都加sudo了。

# 将当前用户加入docker组
sudo usermod -aG docker $USER

# 提示:为了使组更改生效,你需要注销并重新登录,或者执行以下命令
newgrp docker

最后,启动Docker服务并设置开机自启。

# 启动Docker服务
sudo systemctl start docker

# 设置Docker开机自启
sudo systemctl enable docker

# 验证Docker是否安装成功
docker --version

如果安装成功,你会看到Docker的版本号信息。

2.3 安装Docker Compose

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。我们将用它来编排我们的模型服务、Redis和Nginx。

# 下载Docker Compose的稳定版本
# 注意:请访问Docker Compose的GitHub发布页查看最新版本号,替换下面的`v2.23.0`
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予二进制文件可执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 创建软链接(可选,方便调用)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 验证安装
docker-compose --version

看到版本号输出,说明Docker Compose也准备好了。

3. 第二步:编写Docker Compose编排文件

这是最关键的一步,我们将创建一个docker-compose.yml文件,把模型服务、Redis、Nginx和Web界面这四大件定义清楚,并告诉它们如何协同工作。

在你的服务器上,找一个合适的目录,比如/opt/ai-service,然后创建这个文件。

# 创建项目目录
sudo mkdir -p /opt/ai-service
cd /opt/ai-service

# 创建docker-compose.yml文件
vim docker-compose.yml

将以下内容复制到docker-compose.yml文件中。我会在关键部分加上注释说明。

version: '3.8'

services:
  # 1. Redis缓存服务
  redis:
    image: redis:7-alpine
    container_name: dasd-redis
    restart: unless-stopped
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes
    networks:
      - ai-network

  # 2. DASD-4B Thinking 模型服务
  # 注意:这里需要替换为实际的模型镜像地址,请根据阿里云或ModelScope提供的镜像进行修改
  model-service:
    image: registry.cn-hangzhou.aliyuncs.com/your-namespace/dasd-4b-thinking:latest
    container_name: dasd-model
    restart: unless-stopped
    depends_on:
      - redis
    environment:
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      # 可以在这里添加其他模型需要的环境变量,如API_KEY、模型路径等
    volumes:
      - model_data:/app/models # 假设模型数据挂载点
    ports:
      - "8000:8000" # 将容器内的8000端口映射到宿主机的8000端口
    networks:
      - ai-network
    # 如果模型服务启动较慢,可以适当增加健康检查的间隔和超时时间
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  # 3. Web前端界面服务
  # 这里假设有一个提供Web UI的镜像,用于与模型服务交互
  web-ui:
    image: some-web-ui-image:latest # 请替换为实际的Web UI镜像
    container_name: dasd-webui
    restart: unless-stopped
    depends_on:
      - model-service
    environment:
      - API_BASE_URL=http://model-service:8000
    ports:
      - "3000:3000"
    networks:
      - ai-network

  # 4. Nginx反向代理服务
  nginx:
    image: nginx:alpine
    container_name: dasd-nginx
    restart: unless-stopped
    depends_on:
      - web-ui
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d:ro # Nginx站点配置
      - ./nginx/ssl:/etc/nginx/ssl:ro       # SSL证书目录
      - ./nginx/html:/usr/share/nginx/html:ro # 静态文件(可选)
    networks:
      - ai-network

# 定义数据卷,用于持久化存储
volumes:
  redis_data:
  model_data:

# 定义自定义网络,方便服务间通过服务名通信
networks:
  ai-network:
    driver: bridge

重要说明:

  1. 镜像替换:文件中的 registry.cn-hangzhou.aliyuncs.com/your-namespace/dasd-4b-thinking:latestsome-web-ui-image:latest 是占位符。你需要将它们替换为真实的、可访问的Docker镜像地址。通常,模型镜像可以在阿里云的容器镜像服务或ModelScope平台找到。
  2. 端口映射:我们暂时将模型服务的API端口(8000)和Web UI端口(3000)映射到了宿主机,方便调试。在生产环境,通常只通过Nginx(80/443端口)对外暴露。
  3. 网络:我们创建了一个名为ai-network的桥接网络,所有服务都加入其中。这样,在容器内部,它们可以直接使用服务名(如 redis, model-service)相互访问,非常方便。

4. 第三步:配置Nginx与SSL证书

接下来,我们需要配置Nginx,让它作为门户,接收外部的HTTPS请求,并正确地转发给内部的Web UI或模型API。

4.1 准备Nginx配置目录和文件

/opt/ai-service目录下,创建Nginx所需的目录结构。

mkdir -p nginx/conf.d nginx/ssl nginx/html

然后,创建主要的Nginx配置文件。

vim nginx/conf.d/ai-service.conf

将以下配置内容粘贴进去。这个配置做了几件事:监听443端口(HTTPS),配置SSL证书,将请求转发给后端的Web UI服务。

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name ai.your-company.com; # 请替换为你的域名

    # SSL证书配置
    ssl_certificate /etc/nginx/ssl/ai.your-company.com.crt; # 证书文件路径
    ssl_certificate_key /etc/nginx/ssl/ai.your-company.com.key; # 私钥文件路径
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 前端Web UI的反向代理
    location / {
        proxy_pass http://web-ui:3000; # 转发到web-ui容器的3000端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_request_buffering off;
    }

    # 模型API的反向代理(可选,如果你需要直接调用API)
    location /api/ {
        proxy_pass http://model-service:8000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# 可选:将HTTP请求重定向到HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name ai.your-company.com;
    return 301 https://$server_name$request_uri;
}

4.2 获取并放置SSL证书

为了启用HTTPS,你需要为你的域名(ai.your-company.com)申请SSL证书。对于企业内网,你有几种选择:

  • 公有证书:从Let‘s Encrypt等机构申请免费证书,适合可以公开访问的域名。
  • 私有证书:使用企业内部CA签发的证书。这是内网服务更常见的选择。
  • 自签名证书:用于测试环境,浏览器会提示不安全,需要手动信任。

假设你已经有了证书文件(.crt.pem文件)和私钥文件(.key文件),将它们放到之前创建的nginx/ssl/目录下,并确保文件名与Nginx配置中指定的路径一致。

# 将你的证书和私钥复制到ssl目录,并重命名为配置中指定的名字
cp /path/to/your/certificate.crt /opt/ai-service/nginx/ssl/ai.your-company.com.crt
cp /path/to/your/private.key /opt/ai-service/nginx/ssl/ai.your-company.com.key

# 设置正确的权限,保护私钥
chmod 600 /opt/ai-service/nginx/ssl/ai.your-company.com.key

5. 第四步:启动服务与验证

所有配置都完成后,我们就可以启动整个服务栈了。

5.1 使用Docker Compose启动服务

/opt/ai-service目录下,运行以下命令:

# 在后台启动所有服务
docker-compose up -d

-d参数表示在后台运行。Docker Compose会按照依赖关系依次拉取镜像(如果本地没有)并启动容器。

你可以使用以下命令查看服务启动状态和日志:

# 查看所有容器的状态
docker-compose ps

# 查看某个服务的日志(例如查看模型服务启动是否正常)
docker-compose logs -f model-service

启动过程可能需要一些时间,特别是第一次拉取模型镜像,文件可能比较大。请耐心等待,直到所有容器的状态都是 Up

5.2 验证服务是否正常运行

  1. 检查容器状态docker-compose ps 应该显示所有服务(redis, model-service, web-ui, nginx)的状态为 Up
  2. 检查Nginx配置:进入Nginx容器内部,检查配置语法是否正确。
    docker exec dasd-nginx nginx -t
    
    如果输出 syntax is oktest is successful,说明配置没问题。
  3. 内部网络测试:在宿主机上,尝试访问Web UI服务(通过容器网络)。
    # 使用curl测试Web UI服务是否可达
    curl -I http://localhost:3000
    
    或者测试模型服务的健康检查端点。
    curl http://localhost:8000/health
    
  4. 外部访问测试
    • 首先,确保你的域名(如 ai.your-company.com)的DNS记录已经指向了这台Ubuntu服务器的内网IP地址。
    • 然后,打开你的浏览器,访问 https://ai.your-company.com
    • 如果一切顺利,你应该能看到DASD-4B Thinking的Web对话界面。由于使用了HTTPS,浏览器地址栏会显示安全锁标志。

6. 总结

走完这一整套流程,我们成功地在企业内网的Ubuntu服务器上,部署了一套包含DASD-4B Thinking模型、Redis缓存、Web界面和Nginx反向代理的完整AI服务。整个过程的核心思路就是用Docker Compose把各个组件“打包”在一起,通过一个配置文件统一管理,这让部署、更新和维护都变得非常清晰和简单。

实际部署的时候,有几个地方可能需要你多花点心思。一个是模型镜像,一定要确认好正确的镜像地址和版本标签。另一个是SSL证书,内网环境用私有CA签发的证书会更规范。最后,如果访问量上来了,可能还需要考虑调整Docker Compose文件里的资源限制,或者对Nginx配置做进一步的优化,比如加上缓存、负载均衡什么的。

这套方案的优势很明显,所有服务都在内网,数据完全自主可控,而且Docker化部署保证了环境的一致性,减少了“在我机器上是好的”这类问题。如果你团队内部有使用AI对话模型的需求,又对数据隐私有要求,不妨试试这个方案。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐