import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import Image from '@theme/IdealImage'; # Docker, Deployment You can find the Dockerfile to build litellm proxy [here](https://github.com/BerriAI/litellm/blob/main/Dockerfile) ## Quick Start To start using Litellm, run the following commands in a shell: ```bash # Get the code git clone https://github.com/BerriAI/litellm # Go to folder cd litellm # Add the master key - you can change this after setup echo 'LITELLM_MASTER_KEY="sk-1234"' > .env # Add the litellm salt key - you cannot change this after adding a model # It is used to encrypt / decrypt your LLM API Key credentials # We recommend - https://1password.com/password-generator/ # password generator to get a random hash for litellm salt key echo 'LITELLM_SALT_KEY="sk-1234"' >> .env source .env # Start docker-compose up ``` ### Docker Run #### Step 1. CREATE config.yaml Example `litellm_config.yaml` ```yaml model_list: - model_name: azure-gpt-3.5 litellm_params: model: azure/ api_base: os.environ/AZURE_API_BASE # runs os.getenv("AZURE_API_BASE") api_key: os.environ/AZURE_API_KEY # runs os.getenv("AZURE_API_KEY") api_version: "2023-07-01-preview" ``` #### Step 2. RUN Docker Image ```shell docker run \ -v $(pwd)/litellm_config.yaml:/app/config.yaml \ -e AZURE_API_KEY=d6*********** \ -e AZURE_API_BASE=https://openai-***********/ \ -p 4000:4000 \ ghcr.io/berriai/litellm:main-latest \ --config /app/config.yaml --detailed_debug ``` Get Latest Image πŸ‘‰ [here](https://github.com/berriai/litellm/pkgs/container/litellm) #### Step 3. TEST Request Pass `model=azure-gpt-3.5` this was set on step 1 ```shell curl --location 'http://0.0.0.0:4000/chat/completions' \ --header 'Content-Type: application/json' \ --data '{ "model": "azure-gpt-3.5", "messages": [ { "role": "user", "content": "what llm are you" } ] }' ``` ### Docker Run - CLI Args See all supported CLI args [here](https://docs.litellm.ai/docs/proxy/cli): Here's how you can run the docker image and pass your config to `litellm` ```shell docker run ghcr.io/berriai/litellm:main-latest --config your_config.yaml ``` Here's how you can run the docker image and start litellm on port 8002 with `num_workers=8` ```shell docker run ghcr.io/berriai/litellm:main-latest --port 8002 --num_workers 8 ``` ### Use litellm as a base image ```shell # Use the provided base image FROM ghcr.io/berriai/litellm:main-latest # Set the working directory to /app WORKDIR /app # Copy the configuration file into the container at /app COPY config.yaml . # Make sure your docker/entrypoint.sh is executable RUN chmod +x ./docker/entrypoint.sh # Expose the necessary port EXPOSE 4000/tcp # Override the CMD instruction with your desired command and arguments # WARNING: FOR PROD DO NOT USE `--detailed_debug` it slows down response times, instead use the following CMD # CMD ["--port", "4000", "--config", "config.yaml"] CMD ["--port", "4000", "--config", "config.yaml", "--detailed_debug"] ``` ### Build from litellm `pip` package Follow these instructions to build a docker container from the litellm pip package. If your company has a strict requirement around security / building images you can follow these steps. Dockerfile ```shell FROM cgr.dev/chainguard/python:latest-dev USER root WORKDIR /app ENV HOME=/home/litellm ENV PATH="${HOME}/venv/bin:$PATH" # Install runtime dependencies RUN apk update && \ apk add --no-cache gcc python3-dev openssl openssl-dev RUN python -m venv ${HOME}/venv RUN ${HOME}/venv/bin/pip install --no-cache-dir --upgrade pip COPY requirements.txt . RUN --mount=type=cache,target=${HOME}/.cache/pip \ ${HOME}/venv/bin/pip install -r requirements.txt EXPOSE 4000/tcp ENTRYPOINT ["litellm"] CMD ["--port", "4000"] ``` Example `requirements.txt` ```shell litellm[proxy]==1.57.3 # Specify the litellm version you want to use prometheus_client langfuse prisma ``` Build the docker image ```shell docker build \ -f Dockerfile.build_from_pip \ -t litellm-proxy-with-pip-5 . ``` Run the docker image ```shell docker run \ -v $(pwd)/litellm_config.yaml:/app/config.yaml \ -e OPENAI_API_KEY="sk-1222" \ -e DATABASE_URL="postgresql://xxxxxxxxx \ -p 4000:4000 \ litellm-proxy-with-pip-5 \ --config /app/config.yaml --detailed_debug ``` ### Terraform s/o [Nicholas Cecere](https://www.linkedin.com/in/nicholas-cecere-24243549/) for hisΒ LiteLLM User Management Terraform πŸ‘‰ [Go here for Terraform](https://github.com/ncecere/terraform-litellm-user-mgmt) ### Kubernetes Deploying a config file based litellm instance just requires a simple deployment that loads the config.yaml file via a config map. Also it would be a good practice to use the env var declaration for api keys, and attach the env vars with the api key values as an opaque secret. ```yaml apiVersion: v1 kind: ConfigMap metadata: name: litellm-config-file data: config.yaml: | model_list: - model_name: gpt-3.5-turbo litellm_params: model: azure/gpt-turbo-small-ca api_base: https://my-endpoint-canada-berri992.openai.azure.com/ api_key: os.environ/CA_AZURE_OPENAI_API_KEY --- apiVersion: v1 kind: Secret type: Opaque metadata: name: litellm-secrets data: CA_AZURE_OPENAI_API_KEY: bWVvd19pbV9hX2NhdA== # your api key in base64 --- apiVersion: apps/v1 kind: Deployment metadata: name: litellm-deployment labels: app: litellm spec: selector: matchLabels: app: litellm template: metadata: labels: app: litellm spec: containers: - name: litellm image: ghcr.io/berriai/litellm:main-latest # it is recommended to fix a version generally ports: - containerPort: 4000 volumeMounts: - name: config-volume mountPath: /app/proxy_server_config.yaml subPath: config.yaml envFrom: - secretRef: name: litellm-secrets volumes: - name: config-volume configMap: name: litellm-config-file ``` :::info To avoid issues with predictability, difficulties in rollback, and inconsistent environments, use versioning or SHA digests (for example, `litellm:main-v1.30.3` or `litellm@sha256:12345abcdef...`) instead of `litellm:main-latest`. ::: ### Helm Chart :::info [BETA] Helm Chart is BETA. If you run into an issues/have feedback please let us know [https://github.com/BerriAI/litellm/issues](https://github.com/BerriAI/litellm/issues) ::: Use this when you want to use litellm helm chart as a dependency for other charts. The `litellm-helm` OCI is hosted here [https://github.com/BerriAI/litellm/pkgs/container/litellm-helm](https://github.com/BerriAI/litellm/pkgs/container/litellm-helm) #### Step 1. Pull the litellm helm chart ```bash helm pull oci://ghcr.io/berriai/litellm-helm # Pulled: ghcr.io/berriai/litellm-helm:0.1.2 # Digest: sha256:7d3ded1c99c1597f9ad4dc49d84327cf1db6e0faa0eeea0c614be5526ae94e2a ``` #### Step 2. Unzip litellm helm Unzip the specific version that was pulled in Step 1 ```bash tar -zxvf litellm-helm-0.1.2.tgz ``` #### Step 3. Install litellm helm ```bash helm install lite-helm ./litellm-helm ``` #### Step 4. Expose the service to localhost ```bash kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT ``` Your LiteLLM Proxy Server is now running on `http://127.0.0.1:4000`. **That's it ! That's the quick start to deploy litellm** #### Make LLM API Requests :::info πŸ’‘ Go here πŸ‘‰ [to make your first LLM API Request](user_keys) LiteLLM is compatible with several SDKs - including OpenAI SDK, Anthropic SDK, Mistral SDK, LLamaIndex, Langchain (Js, Python) ::: ## Deployment Options | Docs | When to Use | | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | [Quick Start](#quick-start) | call 100+ LLMs + Load Balancing | | [Deploy with Database](#deploy-with-database) | + use Virtual Keys + Track Spend (Note: When deploying with a database providing a `DATABASE_URL` and `LITELLM_MASTER_KEY` are required in your env ) | | [LiteLLM container + Redis](#litellm-container--redis) | + load balance across multiple litellm containers | | [LiteLLM Database container + PostgresDB + Redis](#litellm-database-container--postgresdb--redis) | + use Virtual Keys + Track Spend + load balance across multiple litellm containers | ### Deploy with Database ##### Docker, Kubernetes, Helm Chart Requirements: - Need a postgres database (e.g. [Supabase](https://supabase.com/), [Neon](https://neon.tech/), etc) Set `DATABASE_URL=postgresql://:@:/` in your env - Set a `LITELLM_MASTER_KEY`, this is your Proxy Admin key - you can use this to create other keys (🚨 must start with `sk-`) We maintain a [separate Dockerfile](https://github.com/BerriAI/litellm/pkgs/container/litellm-database) for reducing build time when running LiteLLM proxy with a connected Postgres Database ```shell docker pull ghcr.io/berriai/litellm-database:main-latest ``` ```shell docker run \ -v $(pwd)/litellm_config.yaml:/app/config.yaml \ -e LITELLM_MASTER_KEY=sk-1234 \ -e DATABASE_URL=postgresql://:@:/ \ -e AZURE_API_KEY=d6*********** \ -e AZURE_API_BASE=https://openai-***********/ \ -p 4000:4000 \ ghcr.io/berriai/litellm-database:main-latest \ --config /app/config.yaml --detailed_debug ``` Your LiteLLM Proxy Server is now running on `http://0.0.0.0:4000`. #### Step 1. Create deployment.yaml ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: litellm-deployment spec: replicas: 3 selector: matchLabels: app: litellm template: metadata: labels: app: litellm spec: containers: - name: litellm-container image: ghcr.io/berriai/litellm:main-latest imagePullPolicy: Always env: - name: AZURE_API_KEY value: "d6******" - name: AZURE_API_BASE value: "https://ope******" - name: LITELLM_MASTER_KEY value: "sk-1234" - name: DATABASE_URL value: "po**********" args: - "--config" - "/app/proxy_config.yaml" # Update the path to mount the config file volumeMounts: # Define volume mount for proxy_config.yaml - name: config-volume mountPath: /app readOnly: true livenessProbe: httpGet: path: /health/liveliness port: 4000 initialDelaySeconds: 120 periodSeconds: 15 successThreshold: 1 failureThreshold: 3 timeoutSeconds: 10 readinessProbe: httpGet: path: /health/readiness port: 4000 initialDelaySeconds: 120 periodSeconds: 15 successThreshold: 1 failureThreshold: 3 timeoutSeconds: 10 volumes: # Define volume to mount proxy_config.yaml - name: config-volume configMap: name: litellm-config ``` ```bash kubectl apply -f /path/to/deployment.yaml ``` #### Step 2. Create service.yaml ```yaml apiVersion: v1 kind: Service metadata: name: litellm-service spec: selector: app: litellm ports: - protocol: TCP port: 4000 targetPort: 4000 type: NodePort ``` ```bash kubectl apply -f /path/to/service.yaml ``` #### Step 3. Start server ``` kubectl port-forward service/litellm-service 4000:4000 ``` Your LiteLLM Proxy Server is now running on `http://0.0.0.0:4000`. :::info [BETA] Helm Chart is BETA. If you run into an issues/have feedback please let us know [https://github.com/BerriAI/litellm/issues](https://github.com/BerriAI/litellm/issues) ::: Use this to deploy litellm using a helm chart. Link to [the LiteLLM Helm Chart](https://github.com/BerriAI/litellm/tree/main/deploy/charts/litellm-helm) #### Step 1. Clone the repository ```bash git clone https://github.com/BerriAI/litellm.git ``` #### Step 2. Deploy with Helm Run the following command in the root of your `litellm` repo. This will set the litellm proxy master key as `sk-1234` ```bash helm install \ --set masterkey=sk-1234 \ mydeploy \ deploy/charts/litellm-helm ``` #### Step 3. Expose the service to localhost ```bash kubectl \ port-forward \ service/mydeploy-litellm-helm \ 4000:4000 ``` Your LiteLLM Proxy Server is now running on `http://127.0.0.1:4000`. If you need to set your litellm proxy config.yaml, you can find this in [values.yaml](https://github.com/BerriAI/litellm/blob/main/deploy/charts/litellm-helm/values.yaml) :::info [BETA] Helm Chart is BETA. If you run into an issues/have feedback please let us know [https://github.com/BerriAI/litellm/issues](https://github.com/BerriAI/litellm/issues) ::: Use this when you want to use litellm helm chart as a dependency for other charts. The `litellm-helm` OCI is hosted here [https://github.com/BerriAI/litellm/pkgs/container/litellm-helm](https://github.com/BerriAI/litellm/pkgs/container/litellm-helm) #### Step 1. Pull the litellm helm chart ```bash helm pull oci://ghcr.io/berriai/litellm-helm # Pulled: ghcr.io/berriai/litellm-helm:0.1.2 # Digest: sha256:7d3ded1c99c1597f9ad4dc49d84327cf1db6e0faa0eeea0c614be5526ae94e2a ``` #### Step 2. Unzip litellm helm Unzip the specific version that was pulled in Step 1 ```bash tar -zxvf litellm-helm-0.1.2.tgz ``` #### Step 3. Install litellm helm ```bash helm install lite-helm ./litellm-helm ``` #### Step 4. Expose the service to localhost ```bash kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT ``` Your LiteLLM Proxy Server is now running on `http://127.0.0.1:4000`. ### Deploy with Redis Use Redis when you need litellm to load balance across multiple litellm containers The only change required is setting Redis on your `config.yaml` LiteLLM Proxy supports sharing rpm/tpm shared across multiple litellm instances, pass `redis_host`, `redis_password` and `redis_port` to enable this. (LiteLLM will use Redis to track rpm/tpm usage ) ```yaml model_list: - model_name: gpt-3.5-turbo litellm_params: model: azure/ api_base: api_key: rpm: 6 # Rate limit for this deployment: in requests per minute (rpm) - model_name: gpt-3.5-turbo litellm_params: model: azure/gpt-turbo-small-ca api_base: https://my-endpoint-canada-berri992.openai.azure.com/ api_key: rpm: 6 router_settings: redis_host: redis_password: redis_port: 1992 ``` Start docker container with config ```shell docker run ghcr.io/berriai/litellm:main-latest --config your_config.yaml ``` ### Deploy with Database + Redis The only change required is setting Redis on your `config.yaml` LiteLLM Proxy supports sharing rpm/tpm shared across multiple litellm instances, pass `redis_host`, `redis_password` and `redis_port` to enable this. (LiteLLM will use Redis to track rpm/tpm usage ) ```yaml model_list: - model_name: gpt-3.5-turbo litellm_params: model: azure/ api_base: api_key: rpm: 6 # Rate limit for this deployment: in requests per minute (rpm) - model_name: gpt-3.5-turbo litellm_params: model: azure/gpt-turbo-small-ca api_base: https://my-endpoint-canada-berri992.openai.azure.com/ api_key: rpm: 6 router_settings: redis_host: redis_password: redis_port: 1992 ``` Start `litellm-database`docker container with config ```shell docker run --name litellm-proxy \ -e DATABASE_URL=postgresql://:@:/ \ -p 4000:4000 \ ghcr.io/berriai/litellm-database:main-latest --config your_config.yaml ``` ### (Non Root) - without Internet Connection By default `prisma generate` downloads [prisma's engine binaries](https://www.prisma.io/docs/orm/reference/environment-variables-reference#custom-engine-file-locations). This might cause errors when running without internet connection. Use this docker image to deploy litellm with pre-generated prisma binaries. ```bash docker pull ghcr.io/berriai/litellm-non_root:main-stable ``` [Published Docker Image link](https://github.com/BerriAI/litellm/pkgs/container/litellm-non_root) ## Advanced Deployment Settings ### 1. Custom server root path (Proxy base url) πŸ’₯ Use this when you want to serve LiteLLM on a custom base url path like `https://localhost:4000/api/v1` :::info In a Kubernetes deployment, it's possible to utilize a shared DNS to host multiple applications by modifying the virtual service ::: Customize the root path to eliminate the need for employing multiple DNS configurations during deployment. Step 1. πŸ‘‰ Set `SERVER_ROOT_PATH` in your .env and this will be set as your server root path ``` export SERVER_ROOT_PATH="/api/v1" ``` **Step 2** (If you want the Proxy Admin UI to work with your root path you need to use this dockerfile) - Use the dockerfile below (it uses litellm as a base image) - πŸ‘‰ Set `UI_BASE_PATH=$SERVER_ROOT_PATH/ui` in the Dockerfile, example `UI_BASE_PATH=/api/v1/ui` Dockerfile ```shell # Use the provided base image FROM ghcr.io/berriai/litellm:main-latest # Set the working directory to /app WORKDIR /app # Install Node.js and npm (adjust version as needed) RUN apt-get update && apt-get install -y nodejs npm # Copy the UI source into the container COPY ./ui/litellm-dashboard /app/ui/litellm-dashboard # Set an environment variable for UI_BASE_PATH # This can be overridden at build time # set UI_BASE_PATH to "/ui" # πŸ‘‡πŸ‘‡ Enter your UI_BASE_PATH here ENV UI_BASE_PATH="/api/v1/ui" # Build the UI with the specified UI_BASE_PATH WORKDIR /app/ui/litellm-dashboard RUN npm install RUN UI_BASE_PATH=$UI_BASE_PATH npm run build # Create the destination directory RUN mkdir -p /app/litellm/proxy/_experimental/out # Move the built files to the appropriate location # Assuming the build output is in ./out directory RUN rm -rf /app/litellm/proxy/_experimental/out/* && \ mv ./out/* /app/litellm/proxy/_experimental/out/ # Switch back to the main app directory WORKDIR /app # Make sure your entrypoint.sh is executable RUN chmod +x ./docker/entrypoint.sh # Expose the necessary port EXPOSE 4000/tcp # Override the CMD instruction with your desired command and arguments # only use --detailed_debug for debugging CMD ["--port", "4000", "--config", "config.yaml"] ``` **Step 3** build this Dockerfile ```shell docker build -f Dockerfile -t litellm-prod-build . --progress=plain ``` **Step 4. Run Proxy with `SERVER_ROOT_PATH` set in your env ** ```shell docker run \ -v $(pwd)/proxy_config.yaml:/app/config.yaml \ -p 4000:4000 \ -e LITELLM_LOG="DEBUG"\ -e SERVER_ROOT_PATH="/api/v1"\ -e DATABASE_URL=postgresql://:@:/ \ -e LITELLM_MASTER_KEY="sk-1234"\ litellm-prod-build \ --config /app/config.yaml ``` After running the proxy you can access it on `http://0.0.0.0:4000/api/v1/` (since we set `SERVER_ROOT_PATH="/api/v1"`) **Step 5. Verify Running on correct path** **That's it**, that's all you need to run the proxy on a custom root path ### 2. SSL Certification Use this, If you need to set ssl certificates for your on prem litellm proxy Pass `ssl_keyfile_path` (Path to the SSL keyfile) and `ssl_certfile_path` (Path to the SSL certfile) when starting litellm proxy ```shell docker run ghcr.io/berriai/litellm:main-latest \ --ssl_keyfile_path ssl_test/keyfile.key \ --ssl_certfile_path ssl_test/certfile.crt ``` Provide an ssl certificate when starting litellm proxy server ### 3. Http/2 with Hypercorn Use this if you want to run the proxy with hypercorn to support http/2 Step 1. Build your custom docker image with hypercorn ```shell # Use the provided base image FROM ghcr.io/berriai/litellm:main-latest # Set the working directory to /app WORKDIR /app # Copy the configuration file into the container at /app COPY config.yaml . # Make sure your docker/entrypoint.sh is executable RUN chmod +x ./docker/entrypoint.sh # Expose the necessary port EXPOSE 4000/tcp # πŸ‘‰ Key Change: Install hypercorn RUN pip install hypercorn # Override the CMD instruction with your desired command and arguments # WARNING: FOR PROD DO NOT USE `--detailed_debug` it slows down response times, instead use the following CMD # CMD ["--port", "4000", "--config", "config.yaml"] CMD ["--port", "4000", "--config", "config.yaml", "--detailed_debug"] ``` Step 2. Pass the `--run_hypercorn` flag when starting the proxy ```shell docker run \ -v $(pwd)/proxy_config.yaml:/app/config.yaml \ -p 4000:4000 \ -e LITELLM_LOG="DEBUG"\ -e SERVER_ROOT_PATH="/api/v1"\ -e DATABASE_URL=postgresql://:@:/ \ -e LITELLM_MASTER_KEY="sk-1234"\ your_custom_docker_image \ --config /app/config.yaml --run_hypercorn ``` ### 4. config.yaml file on s3, GCS Bucket Object/url Use this if you cannot mount a config file on your deployment service (example - AWS Fargate, Railway etc) LiteLLM Proxy will read your config.yaml from an s3 Bucket or GCS Bucket Set the following .env vars ```shell LITELLM_CONFIG_BUCKET_TYPE = "gcs" # set this to "gcs" LITELLM_CONFIG_BUCKET_NAME = "litellm-proxy" # your bucket name on GCS LITELLM_CONFIG_BUCKET_OBJECT_KEY = "proxy_config.yaml" # object key on GCS ``` Start litellm proxy with these env vars - litellm will read your config from GCS ```shell docker run --name litellm-proxy \ -e DATABASE_URL= \ -e LITELLM_CONFIG_BUCKET_NAME= \ -e LITELLM_CONFIG_BUCKET_OBJECT_KEY="> \ -e LITELLM_CONFIG_BUCKET_TYPE="gcs" \ -p 4000:4000 \ ghcr.io/berriai/litellm-database:main-latest --detailed_debug ``` Set the following .env vars ```shell LITELLM_CONFIG_BUCKET_NAME = "litellm-proxy" # your bucket name on s3 LITELLM_CONFIG_BUCKET_OBJECT_KEY = "litellm_proxy_config.yaml" # object key on s3 ``` Start litellm proxy with these env vars - litellm will read your config from s3 ```shell docker run --name litellm-proxy \ -e DATABASE_URL= \ -e LITELLM_CONFIG_BUCKET_NAME= \ -e LITELLM_CONFIG_BUCKET_OBJECT_KEY="> \ -p 4000:4000 \ ghcr.io/berriai/litellm-database:main-latest ``` ## Platform-specific Guide ### Kubernetes (AWS EKS) Step1. Create an EKS Cluster with the following spec ```shell eksctl create cluster --name=litellm-cluster --region=us-west-2 --node-type=t2.small ``` Step 2. Mount litellm proxy config on kub cluster This will mount your local file called `proxy_config.yaml` on kubernetes cluster ```shell kubectl create configmap litellm-config --from-file=proxy_config.yaml ``` Step 3. Apply `kub.yaml` and `service.yaml` Clone the following `kub.yaml` and `service.yaml` files and apply locally - Use this `kub.yaml` file - [litellm kub.yaml](https://github.com/BerriAI/litellm/blob/main/deploy/kubernetes/kub.yaml) - Use this `service.yaml` file - [litellm service.yaml](https://github.com/BerriAI/litellm/blob/main/deploy/kubernetes/service.yaml) Apply `kub.yaml` ``` kubectl apply -f kub.yaml ``` Apply `service.yaml` - creates an AWS load balancer to expose the proxy ``` kubectl apply -f service.yaml # service/litellm-service created ``` Step 4. Get Proxy Base URL ```shell kubectl get services # litellm-service LoadBalancer 10.100.6.31 a472dc7c273fd47fd******.us-west-2.elb.amazonaws.com 4000:30374/TCP 63m ``` Proxy Base URL = `a472dc7c273fd47fd******.us-west-2.elb.amazonaws.com:4000` That's it, now you can start using LiteLLM Proxy ### AWS Cloud Formation Stack LiteLLM AWS Cloudformation Stack - **Get the best LiteLLM AutoScaling Policy and Provision the DB for LiteLLM Proxy** This will provision: - LiteLLMServer - EC2 Instance - LiteLLMServerAutoScalingGroup - LiteLLMServerScalingPolicy (autoscaling policy) - LiteLLMDB - RDS::DBInstance #### Using AWS Cloud Formation Stack **LiteLLM Cloudformation stack is located [here - litellm.yaml](https://github.com/BerriAI/litellm/blob/main/enterprise/cloudformation_stack/litellm.yaml)** #### 1. Create the CloudFormation Stack: In the AWS Management Console, navigate to the CloudFormation service, and click on "Create Stack." On the "Create Stack" page, select "Upload a template file" and choose the litellm.yaml file Now monitor the stack was created successfully. #### 2. Get the Database URL: Once the stack is created, get the DatabaseURL of the Database resource, copy this value #### 3. Connect to the EC2 Instance and deploy litellm on the EC2 container From the EC2 console, connect to the instance created by the stack (e.g., using SSH). Run the following command, replacing `` with the value you copied in step 2 ```shell docker run --name litellm-proxy \ -e DATABASE_URL= \ -p 4000:4000 \ ghcr.io/berriai/litellm-database:main-latest ``` #### 4. Access the Application: Once the container is running, you can access the application by going to `http://:4000` in your browser. ### Google Cloud Run 1. Fork this repo - [github.com/BerriAI/example_litellm_gcp_cloud_run](https://github.com/BerriAI/example_litellm_gcp_cloud_run) 2. Edit the `litellm_config.yaml` file in the repo to include your model settings 3. Deploy your forked github repo on Google Cloud Run #### Testing your deployed proxy **Assuming the required keys are set as Environment Variables** https://litellm-7yjrj3ha2q-uc.a.run.app is our example proxy, substitute it with your deployed cloud run app ```shell curl https://litellm-7yjrj3ha2q-uc.a.run.app/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Say this is a test!"}], "temperature": 0.7 }' ``` ### Render https://render.com/ ### Railway https://railway.app **Step 1: Click the button** to deploy to Railway [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/S7P9sn?referralCode=t3ukrU) **Step 2:** Set `PORT` = 4000 on Railway Environment Variables ## Extras ### Docker compose **Step 1** - (Recommended) Use the example file `docker-compose.yml` given in the project root. e.g. https://github.com/BerriAI/litellm/blob/main/docker-compose.yml Here's an example `docker-compose.yml` file ```yaml version: "3.9" services: litellm: build: context: . args: target: runtime image: ghcr.io/berriai/litellm:main-latest ports: - "4000:4000" # Map the container port to the host, change the host port if necessary volumes: - ./litellm-config.yaml:/app/config.yaml # Mount the local configuration file # You can change the port or number of workers as per your requirements or pass any new supported CLI argument. Make sure the port passed here matches with the container port defined above in `ports` value command: [ "--config", "/app/config.yaml", "--port", "4000", "--num_workers", "8" ] # ...rest of your docker-compose config if any ``` **Step 2** Create a `litellm-config.yaml` file with your LiteLLM config relative to your `docker-compose.yml` file. Check the config doc [here](https://docs.litellm.ai/docs/proxy/configs) **Step 3** Run the command `docker-compose up` or `docker compose up` as per your docker installation. > Use `-d` flag to run the container in detached mode (background) e.g. `docker compose up -d` Your LiteLLM container should be running now on the defined port e.g. `4000`. ### IAM-based Auth for RDS DB 1. Set AWS env var ```bash export AWS_WEB_IDENTITY_TOKEN='/path/to/token' export AWS_ROLE_NAME='arn:aws:iam::123456789012:role/MyRole' export AWS_SESSION_NAME='MySession' ``` [**See all Auth options**](https://github.com/BerriAI/litellm/blob/089a4f279ad61b7b3e213d8039fb9b75204a7abc/litellm/proxy/auth/rds_iam_token.py#L165) 2. Add RDS credentials to env ```bash export DATABASE_USER="db-user" export DATABASE_PORT="5432" export DATABASE_HOST="database-1-instance-1.cs1ksmwz2xt3.us-west-2.rds.amazonaws.com" export DATABASE_NAME="database-1-instance-1" export DATABASE_SCHEMA="schema-name" # skip to use the default "public" schema ``` 3. Run proxy with iam+rds ```bash litellm --config /path/to/config.yaml --iam_token_db_auth ``` ### ✨ Blocking web crawlers Note: This is an [enterprise only feature](https://docs.litellm.ai/docs/enterprise). To block web crawlers from indexing the proxy server endpoints, set the `block_robots` setting to `true` in your `litellm_config.yaml` file. ```yaml showLineNumbers title="litellm_config.yaml" general_settings: block_robots: true ``` #### How it works When this is enabled, the `/robots.txt` endpoint will return a 200 status code with the following content: ```shell showLineNumbers title="robots.txt" User-agent: * Disallow: / ```