diff --git a/.github/workflows/ghcr_deploy.yml b/.github/workflows/ghcr_deploy.yml index bffb3bb8a8..e34bb3845d 100644 --- a/.github/workflows/ghcr_deploy.yml +++ b/.github/workflows/ghcr_deploy.yml @@ -76,6 +76,36 @@ jobs: push: true tags: ${{ steps.meta-alpine.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }} labels: ${{ steps.meta-alpine.outputs.labels }} + build-and-push-image-database: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for database Dockerfile + id: meta-database + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-database + + - name: Build and push Database Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + dockerfile: Dockerfile.database + push: true + tags: ${{ steps.meta-database.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }} + labels: ${{ steps.meta-database.outputs.labels }} release: name: "New LiteLLM Release" diff --git a/Dockerfile.database b/Dockerfile.database new file mode 100644 index 0000000000..9eed2baf97 --- /dev/null +++ b/Dockerfile.database @@ -0,0 +1,64 @@ +# Base image for building +ARG LITELLM_BUILD_IMAGE=python:3.9 + +# Runtime image +ARG LITELLM_RUNTIME_IMAGE=python:3.9-slim +# Builder stage +FROM $LITELLM_BUILD_IMAGE as builder + +# Set the working directory to /app +WORKDIR /app + +# Install build dependencies +RUN apt-get clean && apt-get update && \ + apt-get install -y gcc python3-dev && \ + rm -rf /var/lib/apt/lists/* + +RUN pip install --upgrade pip && \ + pip install build + +# Copy the current directory contents into the container at /app +COPY . . + +# Build the package +RUN rm -rf dist/* && python -m build + +# There should be only one wheel file now, assume the build only creates one +RUN ls -1 dist/*.whl | head -1 + +# Install the package +RUN pip install dist/*.whl + +# install dependencies as wheels +RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt + +# Runtime stage +FROM $LITELLM_RUNTIME_IMAGE as runtime + +WORKDIR /app +# Copy the current directory contents into the container at /app +COPY . . +RUN ls -la /app + +# Copy the built wheel from the builder stage to the runtime stage; assumes only one wheel file is present +COPY --from=builder /app/dist/*.whl . +COPY --from=builder /wheels/ /wheels/ + +# Install the built wheel using pip; again using a wildcard if it's the only file +RUN pip install --no-cache-dir --find-links=/wheels/ -r requirements.txt \ + && pip install *.whl \ + && rm -f *.whl + + +# If true, execute the following instructions +RUN prisma generate + +RUN chmod +x /app/retry_push.sh + +RUN /app/retry_push.sh + +EXPOSE 4000/tcp + +# Set your entrypoint and command +ENTRYPOINT ["litellm"] +CMD ["--num_workers", "8", "--port", "4000"] \ No newline at end of file