Files
server-core/Dockerfile
T

70 lines
3.1 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 .
#
# 依赖源全部走国内镜像(实测可用):
# 基础镜像 docker.m.daocloud.ioDocker Hub 加速)
# uv 本体 ghcr.nju.edu.cnGitHub Container 加速)
# apt mirrors.tuna.tsinghua.edu.cn(清华)
# PyPI mirrors.aliyun.com/pypi/simple(阿里云)
# ============================================================
FROM docker.m.daocloud.io/library/python:3.12-slim
# ---- 系统依赖(asyncmy/pymysql 编译 + 健康检查 curl);apt 源先切清华镜像 ----
RUN set -eux; \
if [ -f /etc/apt/sources.list.d/debian.sources ]; then \
sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g; s|http://security.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources; \
fi; \
if [ -f /etc/apt/sources.list ]; then \
sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g; s|http://security.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' /etc/apt/sources.list; \
fi; \
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(南大 ghcr 镜像加速) ----
COPY --from=ghcr.nju.edu.cn/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 \
UV_DEFAULT_INDEX=https://mirrors.aliyun.com/pypi/simple/
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
# 入口:直接启动 dispatcher:appserverrun 旧 start.sh 启动脚本已废弃移除)
# PORT 允许运行时覆盖(serverrun/docker-compose.yml 已显式固定 8090
CMD ["uv", "run", "uvicorn", "dispatcher:app", "--host", "0.0.0.0", "--port", "8090"]