Files
server-core/Dockerfile
T

55 lines
2.0 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================
# opc-server —— 云超服核心服务端镜像
# 入口:dispatcher:app(统一入口,:8090,对外)
# 构建(在 server-core 目录内执行):
# docker build -t opc-server:latest .
# ============================================================
FROM python:3.12-slim
# ---- 系统依赖(asyncmy/pymysql 编译 + 健康检查 curl ----
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
build-essential \
pkg-config \
default-libmysqlclient-dev \
libffi-dev \
&& rm -rf /var/lib/apt/lists/*
# ---- 安装 uv ----
COPY --from=ghcr.io/astral-sh/uv:0.5 /uv /usr/local/bin/uv
ENV UV_LINK_MODE=copy \
UV_COMPILE_BYTECODE=1 \
UV_PYTHON_DOWNLOADS=never \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
WORKDIR /app
# ============================================================
# 依赖层(先装依赖,利用 Docker 层缓存;项目本体待代码层构建)
# ============================================================
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-install-project
# ============================================================
# 代码层(.dockerignore 已排除 .venv/.env/serverdata 运行时数据/wechatpayv3 密钥等)
# ============================================================
COPY . .
RUN uv sync --frozen --no-dev
# 数据目录(运行时卷挂载;seed/、prompts/ 模板随镜像提供)
RUN mkdir -p serverdata/data serverdata/logs serverdata/files \
serverdata/keys serverdata/prompts serverdata/uploads \
serverdata/park serverdata/backup
EXPOSE 8090
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
CMD curl -fsS http://127.0.0.1:8090/health || exit 1
# 复用项目内启动脚本:初始化 serverdata 目录 → exec uv run uvicorn dispatcher:app
CMD ["bash", "serverrun/start.sh"]