外观
Docker部署
概述
本文介绍如何使用 Docker Compose 一键部署 Mars AI Studio 的完整生产环境,涵盖后端、AI 异步任务队列、MySQL、Redis、Milvus 向量库以及 Nginx 反向代理 + 前端静态资源。
部署相关的所有文件位于 devops/ 目录:
devops/
├── deploy.sh # 统一部署入口脚本
└── docker/
├── docker-compose.prod.yaml # 生产编排文件
├── backend/Dockerfile # 后端镜像构建
├── mysql/import-mars-ai.sh # MySQL 初始化导入脚本
├── nginx/nginx.conf # 反向代理与静态资源服务
├── nginx/web/ # 前端构建产物(dist)放置目录
├── nginx/ssl/ # SSL 证书目录(可选)
└── milvus/ # Milvus standalone 独立编排(可选)部署架构
整套服务通过 mars_ai_network 桥接网络互联,容器间使用服务名(如 mysql、redis、backend)互相访问。对外仅暴露 Nginx 的 80/443 端口,由 Nginx 统一转发 API 与托管前端。
- 后端(
backend)与 AI 异步任务队列(ai-worker)共用同一镜像,前者提供 HTTP 接口,后者消费 arq 队列(文档解析、异步向量化等)。 - 前端不单独起服务,由 Nginx 直接托管
nginx/web下的静态文件,并将/api/v1反向代理到后端。 - 有状态服务(MySQL、Redis、Milvus 及 etcd、MinIO)的数据全部挂载到宿主机目录,容器销毁后数据不丢失。
环境准备
一台具备至少 4 核、8GB 内存的 Linux 主机(Milvus standalone 较吃内存,compose 暂时设置 2GB 上限,按需调整)。下面以 Ubuntu Server 22.04 LTS 为例。
安装Docker
设置 Docker 的 apt 源
sh
# 信任 Docker 的 GPG 公钥
sudo apt-get update && apt-get install ca-certificates curl gnupg -y
sudo install -m 0755 -d /etc/apt/keyrings
# 下面命令可能失败,多试几次
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null安装Docker
sh
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# 安装成功后查看版本
docker version设置开机启动
sh
systemctl start docker
systemctl enable docker
systemctl status docker设置镜像加速
配置镜像源
sh
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://docker.m.daocloud.io",
"https://dislabaiot.xyz"
]
}
EOF
# 重启服务生效
sudo systemctl daemon-reload && sudo systemctl restart docker
# 查看配置结果
root@ubuntu22:/etc/docker# docker info
Client: Docker Engine - Community
Version: 28.1.1
Context: default
...
...
Registry Mirrors:
https://docker.1ms.run/
https://docker.xuanyuan.me/
https://docker.m.daocloud.io/
https://dislabaiot.xyz/
Live Restore Enabled: false部署步骤
生产环境配置
编辑后端生产环境变量 backend/env/.env.prod,至少确认以下关键项:
DATABASE_PASSWORD/REDIS_PASSWORD/MINIO_ROOT_PASSWORD:compose 会用它们初始化 MySQL、Redis、MinIO,生产环境务必改为强密码。SECRET_KEY:JWT 签名密钥,生产必须覆盖默认值(可用python -c "import secrets; print(secrets.token_urlsafe(48))"生成)。
构建前端
确认配置文件 frontend/apps/web-ele/.env.production ,在开发环境构建前端
bash
# 本地开发环境构建,构建结果:frontend\apps\web-ele\dist.zip
cd frontend
pnpm build:ele
### 下面信息表示构建成功
#@vben/web-ele:build: ✓ built in 19.65s
#@vben/web-ele:build: ZIP file created: D:\workspace_ai\mars-ai-studio\frontend\apps\web-ele\dist.zip执行部署脚本
以 Ubuntu Server 22.04 LTS 为例,以 root 用户 SSH 登录服务器,执行下面命令:
bash
# 下载最新代码到服务器
cd /opt
git clone https://gitee.com/abc/mars-ai-studio.git # 修改为自己的代码仓库
cd /opt/mars-ai-studio
git pull
# 手动上传前端产物dist.zip到下面目录,然后解压
cd /opt/mars-ai-studio/devops/docker/nginx/web/
# (手动上传dist.zip ,过程略)
apt install unzip # 第一次安装解压工具
unzip dist.zip # 解压
# 执行完整部署(构建 → 备份 → 迁移 → 启动 → 清理),第一次部署约15~30分钟
cd /opt/mars-ai-studio/devops
bash /opt/mars-ai-studio/devops/deploy.sh部署后配置
浏览器登录:http://<服务器IP> 默认账号 admin / admin123
文件管理--文件配置,修改本地存储的自定义域名。填写服务器IP与端口(80端口则省略),示例:
http://192.168.0.77(如果使用知识库功能)AI大模型--API密钥,Ollama 嵌入模型,填写正确的 BASE URL。指向Ollama服务器,示例:
http://192.168.0.241:11434(可选)开发环境
backend\static\upload目录下的文件,默认没有上传到服务器。如果需要,自行复制到服务的/opt/docker-data/backend/upload目录。
日常运维
数据持久化
所有有状态数据挂载到 DOCKER_DATA_DIR(默认 /opt/docker-data)下。Docker 数据目录配置位置:backend/env/.env.prod
bash
# 建议保持默认
DOCKER_DATA_DIR=/opt/docker-data目录用途
| 子目录 | 用途 |
|---|---|
mysql/data | MySQL 数据文件 |
mysql/backup | mysqldump 备份(gzip) |
redis/data | Redis AOF 持久化 |
milvus/etcd | etcd 元数据 |
milvus/minio | MinIO 对象存储(Milvus 依赖) |
milvus/data | Milvus 向量数据 |
backend/logs | 后端日志(挂载到容器 /app/logs) |
backend/upload | 上传文件(挂载到容器 /app/static/upload) |
bash
# 数据目录
root@ubuntu22:~# tree -L 2 /opt/docker-data
/opt/docker-data
├── backend
│ ├── logs
│ └── upload
├── milvus
│ ├── data
│ ├── etcd
│ └── minio
├── mysql
│ ├── backup
│ └── data
└── redis
└── datadocker compose down(或脚本 destroy)只删除容器与网络,数据保留在宿主机;删除数据需手动清理相应目录下数据。
DANGER
生产环境清理数据,属于高危操作!务必先对数据进行备份,再操作!
部署脚本命令
部署脚本位于仓库根目录下的 devops/deploy.sh,所有命令执行前都会先加载 backend/env/.env.prod 环境变量
bash
# 进入仓库根目录
cd /opt/mars-ai-studio
# 完整部署(构建 → 备份 → 迁移 → 启动 → 清理)
bash devops/deploy.sh
# 启动 / 停止 / 重启 / 销毁
bash devops/deploy.sh start
bash devops/deploy.sh stop
bash devops/deploy.sh restart
bash devops/deploy.sh destroy
# 查看状态与日志
bash devops/deploy.sh verify
bash devops/deploy.sh logs
# 数据库备份与迁移
bash devops/deploy.sh backup
bash devops/deploy.sh migratedocker命令
sh
# 查看各服务状态
docker ps
docker compose -f /opt/mars-ai-studio/devops/docker/docker-compose.prod.yaml ps
# 查看容器最后50条日志
docker logs -n 50 mars-ai-backend
# 查看容器内部进程
docker top mars-ai-backend
# 查看容器详细信息
docker inspect mars-ai-backend
# 进入容器
docker exec -it mars-ai-backend /bin/bash端口与资源
对外暴露端口由 .env.prod 控制:HTTP_PORT(默认 80)、HTTPS_PORT(默认 443)。
docker-compose.prod.yaml 为各服务设置内存上限,生产环境建议按实际负载调整。
- MySQL 1GB
- Redis 512MB
- etcd 512MB
- minio 512MB
- Milvus 2GB
- backend 2GB
- ai-worker 2GB
- nginx 256MB。