FROM ccr.ccs.tencentyun.com/gm-base/py3.8-buster:v1.0.1
RUN cat /etc/apt/sources.list
RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN cat /etc/apt/sources.list
RUN apt-get clean
RUN apt-get update
RUN apt-get install -y --no-install-recommends   \
    # 业务相关依赖和安装工具
    libjemalloc-dev \
    git \
    g++ \
    gcc \
    binutils \
    clang \
    cmake \
    coreutils \
    dpkg-dev \
    dpkg \
    findutils \
    libc-dev \
    libffi-dev \
    libtirpc-dev \
    make \
    ncurses-dev \
    pax-utils \
    tcl-dev \
    tk \
    tk-dev \
    python3-dev \
    librdkafka-dev \
    libxml2-dev \
    libxslt-dev \
    librdkafka-dev \
    libaio-dev \
    libffi-dev \
    gfortran \
    swig \
    liblapack-dev \
    musl-dev \
    && ln -s /usr/lib/x86_64-linux-musl/libc.so /lib/libc.musl-x86_64.so.1

# ENV LD_PRELOAD $LD_PRELOAD:/usr/lib/x86_64-linux-gnu/libjemalloc.so

WORKDIR /srv/apps/card/

RUN python -m venv "/srv/apps/card/venv" \
    && pip config set global.index-url https://pypi-1593408770345:241c0cbfa8437730ad982ece687b5a06e78dcf83@gengmei-pypi.pkg.coding.net/tob/pypi/simple
ENV VIRTUAL_ENV "/srv/apps/card/venv"
ENV PATH "$VIRTUAL_ENV:$PATH"

# 编译安装 xlearn
COPY ./gm_xlearn /tmp/gm_xlearn
RUN cd /tmp/gm_xlearn \
    && mkdir /tmp/gm_xlearn/build \
    && cd build \
    && cmake ../ \
    && cp /tmp/gm_xlearn/gm_lib/libxlearn_api.so /tmp/gm_xlearn/build/lib \
    && cd python-package/ \
    && bash -c "source /srv/apps/card/venv/bin/activate && pip install scipy && ./install-python.sh" \
    && /srv/apps/card/venv/bin/python -c "import xlearn;"
# 提前安装 依赖, 使用 docker cache
COPY ./pyproject.toml ./poetry.lock /srv/apps/card/
RUN poetry install

COPY . .
RUN poetry update gm-types

RUN mkdir -p /data/log/card/app/
ENV GM_RPCD_MODE "deploy"
ENV RPCD_SETTINGS_MODULE "card.settings.settings"

CMD poetry run gunicorn fastapi_rpcd.asgi:application -w 1 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 --worker-tmp-dir /dev/shm
