56 lines
2.2 KiB
Docker
56 lines
2.2 KiB
Docker
|
|
# Backend Dockerfile (Context is root)
|
||
|
|
# 固定 Debian bookworm,避免 python:3.11-slim 随上游切到 trixie/testing 导致 apt 源 404
|
||
|
|
FROM python:3.11-slim-bookworm
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# 构建时若访问 deb.debian.org 不稳定:docker compose build --build-arg APT_CN_MIRROR=true
|
||
|
|
ARG APT_CN_MIRROR=false
|
||
|
|
|
||
|
|
# Install system dependencies(重试 + 超时;可选国内镜像)
|
||
|
|
RUN set -eux; \
|
||
|
|
printf 'Acquire::Retries "5";\nAcquire::http::Timeout "120";\nAcquire::https::Timeout "120";\n' \
|
||
|
|
> /etc/apt/apt.conf.d/99dataclaw; \
|
||
|
|
if [ "$APT_CN_MIRROR" = "true" ] || [ "$APT_CN_MIRROR" = "1" ] || [ "$APT_CN_MIRROR" = "yes" ]; then \
|
||
|
|
for f in /etc/apt/sources.list.d/*.sources /etc/apt/sources.list; do \
|
||
|
|
[ -f "$f" ] || continue; \
|
||
|
|
sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g' "$f"; \
|
||
|
|
sed -i 's|https://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g' "$f"; \
|
||
|
|
sed -i 's|http://security.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' "$f"; \
|
||
|
|
sed -i 's|https://security.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' "$f"; \
|
||
|
|
done; \
|
||
|
|
fi; \
|
||
|
|
i=1; \
|
||
|
|
while [ "$i" -le 8 ]; do \
|
||
|
|
apt-get update && \
|
||
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||
|
|
build-essential curl libpq-dev && \
|
||
|
|
rm -rf /var/lib/apt/lists/* && exit 0; \
|
||
|
|
echo "apt attempt $i failed, retry in 25s..."; \
|
||
|
|
i=$((i+1)); sleep 25; \
|
||
|
|
done; \
|
||
|
|
exit 1
|
||
|
|
|
||
|
|
# Install uv
|
||
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
||
|
|
|
||
|
|
# Copy build-related files from dataclaw-api directory
|
||
|
|
COPY dataclaw-api/pyproject.toml dataclaw-api/uv.lock dataclaw-api/hatch_build.py dataclaw-api/README.md ./
|
||
|
|
|
||
|
|
# Install dependencies
|
||
|
|
RUN uv sync --frozen --no-dev
|
||
|
|
|
||
|
|
# Copy dataclaw-api source
|
||
|
|
COPY dataclaw-api/ .
|
||
|
|
|
||
|
|
# Copy the actual agent-core package from the nested directory
|
||
|
|
COPY agent-core/nanobot/ ./nanobot/
|
||
|
|
# Copy dataclaw-voice source
|
||
|
|
COPY dataclaw-voice/ ./whisper/
|
||
|
|
|
||
|
|
# Expose port
|
||
|
|
EXPOSE 8000
|
||
|
|
|
||
|
|
# Run the application with uvicorn
|
||
|
|
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|