build/ci: prod发布重写
This commit is contained in:
parent
5bfdba9cdb
commit
cb758af645
22
Makefile
22
Makefile
|
|
@ -263,29 +263,29 @@ docker-logs-gateway:
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# Docker Publish Command
|
# Docker Publish Command
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# Usage: make docker-publish VERSION=v220.20251202 SERVICE=frontend
|
# Usage: make docker-publish VER=v220.20251202 SVC=frontend
|
||||||
# Example: make docker-publish VERSION=v220.20251202 SERVICE=frontend
|
# Example: make docker-publish VER=v220.20251202 SVC=frontend
|
||||||
docker-publish:
|
docker-publish:
|
||||||
@if [ -z "$(VERSION)" ]; then \
|
@if [ -z "$(VER)" ]; then \
|
||||||
echo "✗ VERSION is required (e.g. v220.20251202)"; \
|
echo "✗ VER is required (e.g. v220.20251202)"; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
@if [ -z "$(SERVICE)" ]; then \
|
@if [ -z "$(SVC)" ]; then \
|
||||||
echo "✗ SERVICE is required (frontend, gateway, langgraph)"; \
|
echo "✗ SVC is required (frontend, gateway, langgraph)"; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
@echo "=========================================="
|
@echo "=========================================="
|
||||||
@echo " Building Docker image for $(SERVICE)"
|
@echo " Building Docker image for $(SVC)"
|
||||||
@echo "=========================================="
|
@echo "=========================================="
|
||||||
@IMAGE=registry.xueai.art/deerflow/deerflow-$(SERVICE):$(VERSION); \
|
@IMAGE=registry.xueai.art/deerflow/deerflow-$(SVC):$(VER); \
|
||||||
DOCKERFILE=$$(case "$(SERVICE)" in \
|
DOCKERFILE=$$(case "$(SVC)" in \
|
||||||
frontend) echo "frontend/Dockerfile";; \
|
frontend) echo "frontend/Dockerfile.prod";; \
|
||||||
gateway) echo "backend/Dockerfile";; \
|
gateway) echo "backend/Dockerfile";; \
|
||||||
langgraph) echo "backend/Dockerfile";; \
|
langgraph) echo "backend/Dockerfile";; \
|
||||||
*) echo "";; \
|
*) echo "";; \
|
||||||
esac); \
|
esac); \
|
||||||
if [ -z "$$DOCKERFILE" ]; then \
|
if [ -z "$$DOCKERFILE" ]; then \
|
||||||
echo "✗ Unknown SERVICE: $(SERVICE)"; \
|
echo "✗ Unknown SVC: $(SVC)"; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi; \
|
fi; \
|
||||||
docker build -f $$DOCKERFILE -t $$IMAGE .; \
|
docker build -f $$DOCKERFILE -t $$IMAGE .; \
|
||||||
|
|
|
||||||
|
|
@ -8,20 +8,7 @@ RUN apt-get update && apt-get install -y \
|
||||||
docker.io \
|
docker.io \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install uv
|
RUN pip install uv -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||||
# Use IP address for proxy (cai.local may not resolve in Docker container)
|
|
||||||
ENV http_proxy=http://192.168.1.250:7897 https_proxy=http://192.168.1.250:7897
|
|
||||||
# Exclude localhost and container network from proxy
|
|
||||||
ENV no_proxy=localhost,127.0.0.1,0.0.0.0,frontend,gateway,langgraph,nginx,.local
|
|
||||||
# RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
||||||
# Try to install uv via official installer, fallback to pip if fails
|
|
||||||
RUN (curl -LsSf https://astral.sh/uv/install.sh | sh || pip install uv) && \
|
|
||||||
echo "uv installed at:" && \
|
|
||||||
which uv || echo "uv not found in PATH" && \
|
|
||||||
ls -la /root/.local/bin/ || echo "/root/.local/bin/ not found" && \
|
|
||||||
echo "uv version:" && \
|
|
||||||
uv --version || echo "uv command not working"
|
|
||||||
ENV PATH="/root/.local/bin:$PATH"
|
|
||||||
|
|
||||||
# Set working directory
|
# Set working directory
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
@ -33,9 +20,6 @@ COPY backend ./backend
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
sh -c "cd backend && uv sync"
|
sh -c "cd backend && uv sync"
|
||||||
|
|
||||||
# Keep proxy for uv sync (Python package downloads may need proxy in China)
|
|
||||||
ENV http_proxy= https_proxy=
|
|
||||||
|
|
||||||
# Expose ports (gateway: 8001, langgraph: 2024)
|
# Expose ports (gateway: 8001, langgraph: 2024)
|
||||||
EXPOSE 8001 2024
|
EXPOSE 8001 2024
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ services:
|
||||||
gateway:
|
gateway:
|
||||||
image: registry.xueai.art/deerflow/deerflow-gateway:${VERSION}
|
image: registry.xueai.art/deerflow/deerflow-gateway:${VERSION}
|
||||||
container_name: deer-flow-gateway
|
container_name: deer-flow-gateway
|
||||||
|
command: sh -c "cd backend && uv run uvicorn src.gateway.app:app --host 0.0.0.0 --port 8001 > /app/logs/gateway.log 2>&1"
|
||||||
volumes:
|
volumes:
|
||||||
- ../config.yaml:/app/config.yaml
|
- ../config.yaml:/app/config.yaml
|
||||||
- ../skills:/app/skills
|
- ../skills:/app/skills
|
||||||
|
|
@ -64,6 +65,7 @@ services:
|
||||||
langgraph:
|
langgraph:
|
||||||
image: registry.xueai.art/deerflow/deerflow-langgraph:${VERSION}
|
image: registry.xueai.art/deerflow/deerflow-langgraph:${VERSION}
|
||||||
container_name: deer-flow-langgraph
|
container_name: deer-flow-langgraph
|
||||||
|
command: sh -c "cd backend && exec uv run langgraph dev --no-browser --no-reload --allow-blocking --host 0.0.0.0 --port 2024 > /app/logs/langgraph.log 2>&1"
|
||||||
volumes:
|
volumes:
|
||||||
# Persist LangGraph inmem runtime data (threads/checkpoints/store)
|
# Persist LangGraph inmem runtime data (threads/checkpoints/store)
|
||||||
- ../backend/.langgraph_api:/app/backend/.langgraph_api
|
- ../backend/.langgraph_api:/app/backend/.langgraph_api
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
# --------------- 构建阶段 ---------------
|
||||||
|
FROM node:22-alpine AS builder
|
||||||
|
ARG PNPM_STORE_PATH=/root/.local/share/pnpm/store
|
||||||
|
ENV BETTER_AUTH_SECRET=any-random-string-123456
|
||||||
|
|
||||||
|
RUN corepack enable && corepack install -g pnpm@10.26.2
|
||||||
|
RUN pnpm config set store-dir ${PNPM_STORE_PATH}
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY frontend/ .
|
||||||
|
RUN pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
RUN pnpm build
|
||||||
|
|
||||||
|
# --------------- 运行阶段(最小镜像) ---------------
|
||||||
|
FROM node:22-alpine AS runner
|
||||||
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=builder /app/next.config.js ./
|
||||||
|
COPY --from=builder /app/.next ./.next
|
||||||
|
COPY --from=builder /app/node_modules ./node_modules
|
||||||
|
COPY --from=builder /app/package.json ./
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
CMD ["pnpm", "start"]
|
||||||
Loading…
Reference in New Issue