Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ models/
plugins/
pilot/data
pilot/message
pilot/meta_data/alembic/versions
pilot/meta_data/dbgpt.db
logs/
venv/
.venv/
Expand Down
48 changes: 48 additions & 0 deletions .github/workflows/docker-image-publish-openai.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@

name: Build and Push OpenAI Docker Image

on:
release:
types: [published]
workflow_dispatch:

permissions:
contents: read

jobs:
build-image:
runs-on: ubuntu-latest
# run unless event type is pull_request
if: github.event_name != 'pull_request'
steps:
- uses: actions/checkout@v3
- name: free disk space
run: |
sudo swapoff -a
sudo rm -f /swapfile
sudo apt clean
# Only delete Docker images when they exist
if [ ! -z "$(docker image ls -aq)" ]; then
docker rmi $(docker image ls -aq)
fi
df -h
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: ./docker/base/Dockerfile
build-args: |
BASE_IMAGE=ubuntu:22.04
EXTRAS=base,proxy_openai,rag,graph_rag,storage_chromadb,dbgpts,proxy_ollama,proxy_zhipuai,proxy_anthropic,proxy_qianfan,proxy_tongyi
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true
tags: eosphorosai/dbgpt-openai:${{ github.ref_name }},eosphorosai/dbgpt-openai:latest
45 changes: 45 additions & 0 deletions configs/dbgpt-proxy-siliconflow-mysql.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
[system]
# Load language from environment variable(It is set by the hook)
language = "${env:DBGPT_LANG:-zh}"
api_keys = []
encrypt_key = "your_secret_key"

# Server Configurations
[service.web]
host = "0.0.0.0"
port = 5670

[service.web.database]
type = "mysql"
host = "${env:MYSQL_HOST:-127.0.0.1}"
port = "${env:MYSQL_PORT:-3306}"
database = "${env:MYSQL_DATABASE:-dbgpt}"
user = "${env:MYSQL_USER:-root}"
password ="${env:MYSQL_PASSWORD:-aa123456}"

[service.model.worker]
host = "127.0.0.1"

[rag.storage]
[rag.storage.vector]
type = "Chroma"
persist_path = "pilot/data"

# Model Configurations
[models]
[[models.llms]]
name = "Qwen/Qwen2.5-Coder-32B-Instruct"
provider = "proxy/siliconflow"
api_key = "${env:SILICONFLOW_API_KEY}"

[[models.embeddings]]
name = "BAAI/bge-large-zh-v1.5"
provider = "proxy/openai"
api_url = "https://api.siliconflow.cn/v1/embeddings"
api_key = "${env:SILICONFLOW_API_KEY}"

[[models.rerankers]]
type = "reranker"
name = "BAAI/bge-reranker-v2-m3"
provider = "proxy/siliconflow"
api_key = "${env:SILICONFLOW_API_KEY}"
File renamed without changes.
34 changes: 15 additions & 19 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
version: '3.10'

# To run current docker compose file, you should prepare the silliconflow api key in your environment.
# SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY} docker compose up -d
services:
db:
image: mysql/mysql-server
Expand All @@ -18,40 +18,36 @@ services:
networks:
- dbgptnet
webserver:
image: eosphorosai/dbgpt:latest
command: python3 dbgpt/app/dbgpt_server.py
image: eosphorosai/dbgpt-openai:latest
command: dbgpt start webserver --config /app/configs/dbgpt-proxy-siliconflow-mysql.toml
environment:
- LOCAL_DB_HOST=db
- LOCAL_DB_PASSWORD=aa123456
- ALLOWLISTED_PLUGINS=db_dashboard
- LLM_MODEL=glm-4-9b-chat
depends_on:
- db
- SILICONFLOW_API_KEY=${SILICONFLOW_API_KEY}
- MYSQL_PASSWORD=aa123456
- MYSQL_HOST=db
- MYSQL_PORT=3306
- MYSQL_DATABASE=dbgpt
- MYSQL_USER=root
volumes:
- ./configs:/app/configs
- /data:/data
# Please modify it to your own model directory
# May be you can mount your models to container
- /data/models:/app/models
- dbgpt-data:/app/pilot/data
- dbgpt-message:/app/pilot/message
env_file:
- .env.template
depends_on:
- db
ports:
- 5670:5670/tcp
# webserver may be failed, it must wait all sqls in /docker-entrypoint-initdb.d execute finish.
restart: unless-stopped
networks:
- dbgptnet
ipc: host
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: [gpu]
volumes:
dbgpt-myql-db:
dbgpt-data:
dbgpt-message:
dbgpt-alembic-versions:
networks:
dbgptnet:
driver: bridge
Expand Down
78 changes: 42 additions & 36 deletions docker/base/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,19 +1,34 @@
ARG BASE_IMAGE="nvidia/cuda:12.1.0-devel-ubuntu22.04"
ARG BASE_IMAGE="nvidia/cuda:12.4.0-devel-ubuntu22.04"
# Add parameter to control whether to use Tsinghua Ubuntu mirror
ARG USE_TSINGHUA_UBUNTU="false"

FROM ${BASE_IMAGE} as builder
ARG BASE_IMAGE
ARG PYTHON_VERSION=3.10
ARG PYPI_MIRROR=https://pypi.org/simple
ARG EXTRAS="proxy_openai,rag,storage_chromadb,quant_bnb"
ARG PYTHON_VERSION=3.11
# Use Tsinghua PyPI mirror, It's faster in most countries
ARG PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"
ARG EXTRAS="base,proxy_openai,rag,storage_chromadb,cuda121,hf,quant_bnb,dbgpts"
ARG VERSION=latest

ARG USE_TSINGHUA_UBUNTU
ARG CMAKE_ARGS
ENV PYTHONUNBUFFERED=1 \
DEBIAN_FRONTEND=noninteractive \
LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
PIP_INDEX_URL=${PYPI_MIRROR}

RUN apt-get update && apt-get install -y \
PIP_INDEX_URL=${PIP_INDEX_URL} \
CMAKE_ARGS=${CMAKE_ARGS}

# Configure apt sources based on the USE_TSINGHUA_UBUNTU parameter
RUN if [ "$USE_TSINGHUA_UBUNTU" = "true" ]; then \
sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list; \
fi && \
apt-get update && apt-get install -y --no-install-recommends gnupg ca-certificates apt-transport-https && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
apt-get update && apt-get install -y \
python${PYTHON_VERSION} \
python${PYTHON_VERSION}-dev \
python${PYTHON_VERSION}-venv \
python3-pip \
python3-dev \
Expand All @@ -25,81 +40,72 @@ RUN apt-get update && apt-get install -y \
sqlite3 \
libpq-dev \
default-libmysqlclient-dev \
build-essential \
pkg-config \
&& rm -rf /var/lib/apt/lists/* \
&& python${PYTHON_VERSION} -m pip install --upgrade pip \
&& python${PYTHON_VERSION} -m pip install --upgrade pipx \
&& python${PYTHON_VERSION} -m pipx ensurepath \
&& pipx ensurepath --global \
&& pipx install uv --global

WORKDIR /app
# Install Rust toolchain for building lyric-py
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

WORKDIR /app
# Create a virtual environment
ENV VIRTUAL_ENV=/app/.venv
RUN python${PYTHON_VERSION} -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

COPY pyproject.toml README.md uv.lock ./
COPY packages /app/packages

# Install dependencies with uv and install all local packages
RUN --mount=type=cache,target=/root/.cache/uv \
extras=$(echo $EXTRAS | tr ',' '\n' | while read extra; do echo "--extra $extra"; done | tr '\n' ' ') && \
uv sync --frozen --all-packages --no-dev $extras && \
# Install local packages, pay attention to the installation order
cd /app/packages/dbgpt-accelerator && pip install -e . && \
cd /app/packages/dbgpt-core && pip install -e . && \
cd /app/packages/dbgpt-ext && pip install -e . && \
cd /app/packages/dbgpt-client && pip install -e . && \
cd /app/packages/dbgpt-serve && pip install -e . && \
cd /app/packages/dbgpt-app && pip install -e . && \
# Verify installation
python -c "import dbgpt; print(dbgpt.__version__)"

ARG BUILD_LOCAL_CODE="false"
ARG LANGUAGE="en"
ARG PIP_INDEX_URL="https://pypi.org/simple"
ARG PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple"
ENV PIP_INDEX_URL=$PIP_INDEX_URL
ARG DB_GPT_INSTALL_MODEL="default"
ENV DB_GPT_INSTALL_MODEL=$DB_GPT_INSTALL_MODEL


FROM ${BASE_IMAGE}

ARG PYTHON_VERSION=3.10
ARG PYTHON_VERSION=3.11
ARG VERSION=latest

ARG USE_TSINGHUA_UBUNTU
# Set environment variables
ENV PYTHONUNBUFFERED=1 \
DEBIAN_FRONTEND=noninteractive \
LANG=C.UTF-8 \
LC_ALL=C.UTF-8
# Set PYTHONPATH

# Version label
LABEL version=${VERSION}

# Install runtime dependencies
RUN apt-get update && apt-get install -y \
# Configure apt sources based on the USE_TSINGHUA_UBUNTU parameter
RUN if [ "$USE_TSINGHUA_UBUNTU" = "true" ]; then \
sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list; \
fi && \
apt-get update && apt-get install -y --no-install-recommends gnupg ca-certificates apt-transport-https && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
apt-get update && apt-get install -y \
python${PYTHON_VERSION} \
python${PYTHON_VERSION}-venv \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy the virtual environment from the previous stage
# Use antoher name to avoid conflict when mounting user's local .venv
ENV FINAL_VENV_NAME="/opt/.uv.venv"
COPY --from=builder /app/.venv ${FINAL_VENV_NAME}
COPY . .

# Fix the shebang of the dbgpt script
RUN sed -i "s|^#\!/app/\.venv/bin/python[0-9.]*|#!/${FINAL_VENV_NAME}/bin/python${PYTHON_VERSION}|" /${FINAL_VENV_NAME}/bin/dbgpt
RUN sed -i "s|^#\!/app/\.venv/bin/python[0-9.]*|#!/${FINAL_VENV_NAME}/bin/python${PYTHON_VERSION}|" /${FINAL_VENV_NAME}/bin/pip

ENV PATH="${FINAL_VENV_NAME}/bin:$PATH" \
VIRTUAL_ENV="${FINAL_VENV_NAME}"
# PYTHONPATH="/app/packages/dbgpt/src:/app/packages/dbgpt-core/src:/app/packages/dbgpt-app/src:/app/packages/dbgpt-serve/src:/app/packages/dbgpt-client/src:/app/packages/dbgpt-ext/src:/app/packages/dbgpt-accelerator/src"

# Default command
CMD ["dbgpt", "start", "webserver", "--config", "configs/dbgpt-siliconflow.toml"]
CMD ["dbgpt", "start", "webserver", "--config", "configs/dbgpt-proxy-siliconflow.toml"]
Loading