FROM python:3.11-slim

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1

# 系统依赖：curl 用于健康检查，default-mysql-client 提供 mysqldump，tar 已内置，influx CLI 用于 InfluxDB 备份
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    default-mysql-client \
    tar \
    gzip \
    tzdata \
    ca-certificates \
    gnupg \
    && rm -rf /var/lib/apt/lists/*

# 安装 InfluxDB CLI（直接下载二进制，避免 apt 签名问题）
RUN set -eux; \
    INFLUX_VERSION=2.7.5; \
    curl -fsSL "https://dl.influxdata.com/influxdb/releases/influxdb2-client-${INFLUX_VERSION}-linux-amd64.tar.gz" \
      -o /tmp/influx.tar.gz; \
    tar -xzf /tmp/influx.tar.gz -C /tmp; \
    mv /tmp/influx /usr/local/bin/influx; \
    chmod +x /usr/local/bin/influx; \
    rm -rf /tmp/influx.tar.gz /tmp/influx; \
    influx version

# 安装 etcdctl（直接下载二进制）
RUN set -eux; \
    ETCD_VERSION=v3.5.17; \
    curl -fsSL "https://github.com/etcd-io/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz" \
      -o /tmp/etcd.tar.gz; \
    tar -xzf /tmp/etcd.tar.gz -C /tmp; \
    mv /tmp/etcd-${ETCD_VERSION}-linux-amd64/etcdctl /usr/local/bin/etcdctl; \
    chmod +x /usr/local/bin/etcdctl; \
    rm -rf /tmp/etcd.tar.gz /tmp/etcd-${ETCD_VERSION}-linux-amd64; \
    etcdctl version

WORKDIR /app

# 先安装依赖以利用 Docker 缓存
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# 数据、日志、备份目录
RUN mkdir -p /app/data/backups /app/logs

EXPOSE 8000

# alembic 升级 + 启动 uvicorn
CMD ["sh", "-c", "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000"]
