文章目录
- 前言
- 一、Deerflow是什么?
- 二、部署记录
-
- 1.文件上传
- 2.docker、make环境安装
- 3.准备config.yaml和.env文件
-
- [3.1 修改镜像源](#3.1 修改镜像源)
- [3.2 backend/Dockerfile修改镜像内源到阿里云](#3.2 backend/Dockerfile修改镜像内源到阿里云)
- [4. 执行安装](#4. 执行安装)
- 5.访问页面
- 总结
前言
同事安排搞一台虚拟机部署Deerflow。
一、Deerflow是什么?
Deerflow是一个完全开源的超级智能体
部署地址:https://github.com/bytedance/deer-flow/blob/main/README_zh.md
二、部署记录
1.文件上传
将脚本和代码文件上传到/opt/目录
2.docker、make环境安装
shell
cd /opt/
chmod a+x ./setup_docker_root.sh
./setup_docker_root.sh
apt install -y make
setup_docker_root.sh脚本文件
shell
#!/bin/bash
set -e # 遇到错误立即退出
echo "========== 开始配置阿里云镜像源 =========="
# 备份原有的 sources.list
cp /etc/apt/sources.list /etc/apt/sources.list.bak.$(date +%Y%m%d%H%M%S)
# 写入阿里云 Ubuntu 22.04 镜像源
cat > /etc/apt/sources.list <<EOF
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
EOF
echo "✅ 阿里云镜像源已配置"
# 更新 apt 缓存
echo "🔄 正在更新软件包列表..."
apt update -y
echo "========== 开始安装 Docker =========="
# 安装必要依赖
apt install -y ca-certificates curl gnupg lsb-release
# 添加 Docker 官方 GPG 密钥(通过阿里云镜像加速)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker APT 仓库(使用阿里云镜像)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
# 更新 apt 缓存(包含 Docker 仓库)
apt update -y
# 安装 Docker 引擎及相关组件
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动并启用 docker 服务
systemctl enable --now docker
echo "🎉 Docker 安装完成!版本信息如下:"
3.准备config.yaml和.env文件
代码如下(示例):
c
cd /opt/
unzip deer-flow-main.zip
cd /opt/deer-flow-main
cp config.example.yaml config.yaml
cp .env.example .env
cp frontend/.env.example frontend/.env
cp frontend/Dockerfile frontend/Dockerfile.example
cp backend/Dockerfile backend/Dockerfile.example
3.1 修改镜像源
shell
docker pull docker.1ms.run/node:22-alpine
sed -i 's|node:22-alpine|docker.1ms.run/node:22-alpine|g' frontend/Dockerfile
docker pull docker.1ms.run/nginx:alpine
sed -i 's|image: nginx:alpine|image: docker.1ms.run/nginx:alpine|g' docker/docker-compose.yaml
sed -i 's|image: nginx:alpine|image: docker.1ms.run/nginx:alpine|g' docker/docker-compose-dev.yaml
docker pull docker.1ms.run/library/docker:cli
sed -i 's|COPY --from=docker:cli|COPY --from=docker.1ms.run/library/docker:cli|g' backend/Dockerfile
docker pull docker.1ms.run/library/python:3.12-slim-bookworm
sed -i 's|FROM python:3.12-slim-bookworm|FROM docker.1ms.run/library/python:3.12-slim-bookworm|g' backend/Dockerfile docker/provisioner/Dockerfile
3.2 backend/Dockerfile修改镜像内源到阿里云
yaml
# Optionally override apt mirror for restricted networks (e.g. APT_MIRROR=mirrors.aliyun.com)
RUN if [ -n "${APT_MIRROR}" ]; then \
sed -i "s|deb.debian.org|${APT_MIRROR}|g" /etc/apt/sources.list.d/debian.sources 2>/dev/null || true; \
sed -i "s|deb.debian.org|${APT_MIRROR}|g" /etc/apt/sources.list 2>/dev/null || true; \
fi
# add
RUN set -ex; \
echo ">>> Step 1: Replacing system sources to Aliyun..."; \
if [ -f /etc/apt/sources.list ]; then \
sed -i 's|http://deb.debian.org|https://mirrors.aliyun.com|g' /etc/apt/sources.list; \
sed -i 's|http://security.debian.org|https://mirrors.aliyun.com/debian-security|g' /etc/apt/sources.list; \
fi; \
# 兼容新版 Debian Bookworm (sources.list.d/*.sources)
find /etc/apt/sources.list.d/ -type f -name "*.sources" -exec sed -i 's|http://deb.debian.org|https://mirrors.aliyun.com|g' {} +; \
find /etc/apt/sources.list.d/ -type f -name "*.sources" -exec sed -i 's|http://security.debian.org|https://mirrors.aliyun.com/debian-security|g' {} +
4. 执行安装
shell
make-init
结果
shell
root@ubuntu:/opt/deer-flow-main# make docker-init
==========================================
DeerFlow Init --- Pull Sandbox Image
==========================================
Detected local sandbox mode --- no Docker image required.
✓ Docker environment is ready.
Next step: make docker-start
shell
make-start
结果
shell
root@ubuntu:/opt/deer-flow-main# make docker-start
==========================================
Starting DeerFlow Docker Development
==========================================
Detected sandbox mode: local
Provisioner disabled (not required for this sandbox mode).
Setting DEER_FLOW_ROOT=/opt/deer-flow-main
Created extensions_config.json from example
Building and starting containers...
[+] Building 925.7s (34/34) FINISHED
=> [internal] load local bake definitions 0.0s
=> => reading from stdin 1.72kB 0.0s
=> [frontend internal] load build definition from Dockerfile 1.5s
=> => transferring dockerfile: 2.47kB 0.0s
=> [langgraph internal] load build definition from Dockerfile 1.1s
=> => transferring dockerfile: 2.70kB 0.0s
=> [gateway internal] load metadata for docker.1ms.run/library/python:3.12-slim-bookworm 2.7s
=> [langgraph internal] load metadata for ghcr.io/astral-sh/uv:0.7.20 7.2s
=> [gateway internal] load metadata for docker.1ms.run/library/docker:cli 2.6s
=> [frontend internal] load metadata for docker.1ms.run/node:22-alpine 2.1s
=> [langgraph internal] load .dockerignore 1.2s
=> => transferring context: 758B 0.0s
=> [frontend base 1/6] FROM docker.1ms.run/node:22-alpine@sha256:4d64b49e6c891c8fc821007cb1cdc6c0db7773110ac2c34bf2e6960adef62ed3 5.0s
=> => resolve docker.1ms.run/node:22-alpine@sha256:4d64b49e6c891c8fc821007cb1cdc6c0db7773110ac2c34bf2e6960adef62ed3 0.2s
=> [frontend internal] load build context 3.1s
=> => transferring context: 16.95MB 0.2s
=> [gateway internal] load build context 5.0s
=> => transferring context: 2.58MB 0.1s
=> [gateway uv-source 1/1] FROM ghcr.io/astral-sh/uv:0.7.20@sha256:2fd1b38e3398a256d6af3f71f0e2ba6a517b249998726a64d8cfbe55ab34af5e 398.0s
=> => resolve ghcr.io/astral-sh/uv:0.7.20@sha256:2fd1b38e3398a256d6af3f71f0e2ba6a517b249998726a64d8cfbe55ab34af5e 1.3s
=> => sha256:711e40d15079913d30013f63af5b4a4ddc3d5b07a7eab09e12b094357e6ffe7b 98B / 98B 0.6s
=> => sha256:f563f515ce8400dfe4690e03f99d4f9fed08fc3e0f89461ee6ceb7e31a7e95fb 18.88MB / 18.88MB 369.6s
=> => extracting sha256:f563f515ce8400dfe4690e03f99d4f9fed08fc3e0f89461ee6ceb7e31a7e95fb 13.0s
=> => extracting sha256:711e40d15079913d30013f63af5b4a4ddc3d5b07a7eab09e12b094357e6ffe7b 6.1s
=> [langgraph] FROM docker.1ms.run/library/docker:cli@sha256:70303ed0d265aee7bf4be0ddffe20b0b6e4f69ffa125e2a20cbb3718b99688db 17.9s
=> => resolve docker.1ms.run/library/docker:cli@sha256:70303ed0d265aee7bf4be0ddffe20b0b6e4f69ffa125e2a20cbb3718b99688db 1.5s
=> [langgraph stage-1 1/9] FROM docker.1ms.run/library/python:3.12-slim-bookworm@sha256:31c0807da611e2e377a2e9b566ad4eb038ac5a5838cbbbe6f2262259b5dc77a0 9.0s
=> => resolve docker.1ms.run/library/python:3.12-slim-bookworm@sha256:31c0807da611e2e377a2e9b566ad4eb038ac5a5838cbbbe6f2262259b5dc77a0 1.3s
=> [frontend base 2/6] RUN if [ -n "" ]; then export COREPACK_NPM_REGISTRY=""; fi && corepack enable && corepack install -g pnpm@10.26.2 13.3s
=> [langgraph stage-1 2/9] RUN if [ -n "" ]; then sed -i "s|deb.debian.org||g" /etc/apt/sources.list.d/debian.sources 2>/dev/null || true; sed -i "s|deb.debian.org||g" /etc/apt/sou 7.3s
=> [frontend base 3/6] RUN pnpm config set store-dir /root/.local/share/pnpm/store 5.1s
=> [gateway stage-1 3/9] RUN set -ex; echo ">>> Step 1: Replacing system sources to Aliyun..."; if [ -f /etc/apt/sources.list ]; then sed -i 's|http://deb.debian.org|https://mi 3.5s
=> [langgraph stage-1 4/9] RUN apt-get update && apt-get install -y curl build-essential gnupg ca-certificates && mkdir -p /etc/apt/keyrings && curl -fsSL https://deb 489.5s
=> [frontend base 4/6] RUN if [ -n "" ]; then pnpm config set registry ""; fi 3.9s
=> [frontend base 5/6] WORKDIR /app 1.6s
=> [frontend base 6/6] COPY frontend ./frontend 2.5s
=> [frontend dev 1/1] RUN cd /app/frontend && pnpm install --frozen-lockfile 205.9s
=> [frontend] exporting to image 131.4s
=> => exporting layers 70.6s
=> => exporting manifest sha256:2897bb170b8eb8469311193698ff4147938ad61bbc25f0a6f614c3762d27ba53 0.3s
=> => exporting config sha256:addc9dda684169142846b17e91dfbceed28beab16d53595148efe819e7ea7422 0.3s
=> => exporting attestation manifest sha256:c8d7222b655d4be4331cc169b2acbc17cb34c71fa63ecc0e75fec5165ad1ece6 2.5s
=> => exporting manifest list sha256:bfb1889efafb2f9805682f17020d8acd5255a4d81aa708126bc5200cd49c5453 0.3s
=> => naming to docker.io/library/deer-flow-dev-frontend:latest 0.0s
=> => unpacking to docker.io/library/deer-flow-dev-frontend:latest 55.1s
=> [frontend] resolving provenance for metadata file 0.0s
=> [langgraph stage-1 5/9] COPY --from=docker.1ms.run/library/docker:cli /usr/local/bin/docker /usr/local/bin/docker 3.0s
=> [langgraph stage-1 6/9] COPY --from=uv-source /uv /uvx /usr/local/bin/ 1.5s
=> [gateway stage-1 7/9] WORKDIR /app 1.2s
=> [gateway stage-1 8/9] COPY backend ./backend 2.0s
=> [gateway stage-1 9/9] RUN --mount=type=cache,target=/root/.cache/uv sh -c "cd backend && uv sync" 175.6s
=> [langgraph] exporting to image 97.6s
=> => exporting layers 43.8s
=> => exporting manifest sha256:7da671987f6a001fb3567c043af2aa20ecad399a4fdb3edaf7231a15fdb361f2 1.1s
=> => exporting config sha256:e7750116160e1249968dd5d654d7075f3f24e6b5f307956a63708fc6ec05cd62 0.4s
=> => exporting attestation manifest sha256:9cbf969a409c4b7ec22aa2ba41e4078e21f23aae3c398f35779dbf4286cf5f9f 1.2s
=> => exporting manifest list sha256:3bfdd4ecde55a26a18c1bd5c1d2033a978d3eb8c5c22211feedf1b8d179f384d 0.4s
=> => naming to docker.io/library/deer-flow-dev-langgraph:latest 0.1s
=> => unpacking to docker.io/library/deer-flow-dev-langgraph:latest 48.1s
=> [gateway] exporting to image 96.5s
=> => exporting layers 43.8s
=> => exporting manifest sha256:2bd96c97ff92fef11866fe089826a537cc785f25410833bfa5caee6a254c6aa4 1.2s
=> => exporting config sha256:69703fcf1a7529051e528355c5891dc7b3346e1644205c56ab2a5b3f0d4024c3 0.4s
=> => exporting attestation manifest sha256:3335f7285f5f3359a69041312593775db94644b0215e4eaeb1cc5fc4498607e0 1.2s
=> => exporting manifest list sha256:deabd05dabf917f1a3b7eced24c376c640c4bc0f1466f417db340dde1b288d93 0.3s
=> => naming to docker.io/library/deer-flow-dev-gateway:latest 0.0s
=> => unpacking to docker.io/library/deer-flow-dev-gateway:latest 47.0s
=> [gateway] resolving provenance for metadata file 55.5s
=> [langgraph] resolving provenance for metadata file 20.3s
[+] up 10/10
✔ Image deer-flow-dev-gateway Built 926.1s
✔ Image deer-flow-dev-langgraph Built 926.1s
✔ Image deer-flow-dev-frontend Built 926.1s
✔ Network deer-flow-dev_deer-flow-dev Created 0.5s
✔ Volume deer-flow-dev_gateway-venv Created 0.2s
✔ Volume deer-flow-dev_langgraph-venv Created 0.2s
✔ Container deer-flow-frontend Started 142.9s
✔ Container deer-flow-gateway Started 143.3s
✔ Container deer-flow-langgraph Started 143.0s
✔ Container deer-flow-nginx Started 11.6s
==========================================
DeerFlow Docker is starting!
==========================================
🌐 Application: http://localhost:2026
📡 API Gateway: http://localhost:2026/api/*
🤖 LangGraph: http://localhost:2026/api/langgraph/*
📋 View logs: make docker-logs
🛑 Stop: make docker-stop
5.访问页面


总结
部署完成,主要还是把需要的镜像改成国内源的,然后构建的时候把容器内的源改成阿里云的。