Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A simple, easy-to-use api server that sits in front of your local πŸ¦™ ollama instance to add additional security when making requests to ollama.

License

gitmotion/ollama-api-server

Repository files navigation

πŸ¦™ Ollama API Server

Docker

A simple, easy-to-use api server that sits in front of your local ollama instance to add additional security when making requests to ollama.

Buy me a coffee

πŸ“‘ Table of Contents

⭐ Features

  • πŸ”‘ API Key Authentication
  • πŸ”„ CORS Support
  • πŸš€ Connection Pooling
  • 🌊 Streaming Support
  • 🐳 Easy Docker Setup
  • πŸ”Œ All Ollama API Endpoints Supported

πŸŽ›οΈ Example Flow

  • Example of connecting a local ollama instance to an open-webui docker container on the same docker network
flowchart TD
 user([External User]) --> webui[Open WebUI]
 
 webui -->|Request with API Key| api[Ollama API Server]
 
 api --> auth{API Key Valid?}
 auth -->|No| reject[Reject Connection]
 auth -->|Yes| ollama[Ollama LLM Service]
 
 ollama -->|Response| api
 api -->|Response| webui
 webui -->|Response| user
 
 subgraph "Docker: ollama-network"
 webui
 api
 auth
 ollama
 end
 
 classDef green fill:#d1e7dd,stroke:#0f5132,stroke-width:1px,color:#0f5132;
 classDef blue fill:#cfe2ff,stroke:#084298,stroke-width:1px,color:#084298;
 classDef red fill:#f8d7da,stroke:#842029,stroke-width:1px,color:#842029;
 classDef yellow fill:#fff3cd,stroke:#664d03,stroke-width:1px,color:#664d03;
 classDef gray fill:#f8f9fa,stroke:#343a40,stroke-width:1px,color:#343a40;
 
 class user gray
 class webui blue
 class api blue
 class auth yellow
 class ollama green
 class reject red
Loading

πŸš€ Quick Start

🐳 Docker Setup (Recommended)

πŸ“‚ Docker Image

The official Docker image is available on Docker Hub and GitHub Container Registry:

# Docker Hub
docker pull gitmotion/ollama-api-server:latest
# GitHub Container Registry
docker pull ghcr.io/gitmotion/ollama-api-server:latest

πŸš€ Docker Run

docker run -d \
 --name ollama-api-server \
 --restart unless-stopped \
 -p 7777:7777 \
 -e PORT=7777 \
 -e OLLAMA_BASE_URL=http://internal-ip-where-ollama-installed:11434 \
 -e CORS_ORIGIN=* \
 -e API_KEYS=default-key-1,default-key-2 \
 gitmotion/ollama-api-server:latest

πŸ“„ Docker Compose Configuration

The server uses the following docker-compose.yml configuration:

services:
 api:
 image: gitmotion/ollama-api-server:latest
 container_name: ollama-api-server
 restart: unless-stopped
 ports:
 - "${PORT_EXTERNAL:-7777}:7777"
 environment:
 - PORT=7777
 - OLLAMA_BASE_URL=http://internal-ip-where-ollama-installed:11434 # must serve your ollama server with 0.0.0.0
 - CORS_ORIGIN=*
 - API_KEYS=${API_KEYS:-default-key-1,default-key-2}

Example of ollama-api-server with your open-webui stack:

services:
 ollama-api-server:
 image: gitmotion/ollama-api-server:latest
 container_name: ollama-api-server
 restart: unless-stopped
 ports:
 - "${PORT_EXTERNAL:-7777}:7777"
 environment:
 - PORT=7777
 - OLLAMA_BASE_URL=http://internal-ip-where-ollama-installed:11434 # must serve your ollama server with 0.0.0.0
 - CORS_ORIGIN=*
 - API_KEYS=${API_KEYS:-secure-api-key-1,secure-api-key-2} # UPDATE THESE KEYS - comma separated
 networks:
 - ollama-network
 open-webui:
 image: openwebui/open-webui:latest
 container_name: open-webui
 restart: unless-stopped
 depends_on:
 - ollama-api-server
 ports:
 - "3000:3000"
 environment:
 - OLLAMA_BASE_URL=http://ollama-api-server:7777 # Configure the api key via UI
 - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
 volumes:
 - ./open-webui-data:/app/backend/data
 networks:
 - ollama-network
 - your-external-reverse-proxy
networks:
 ollama-network:
 driver: bridge
 your-external-reverse-proxy:
 external: true

This configuration:

  • Uses the official Docker image
  • Maps the container's port 7777 to your host's port (configurable via PORT_EXTERNAL)
  • Sets up the required environment variables
  • Provides default API keys if none are specified

You can customize the configuration by:

  1. Changing the external port (PORT_EXTERNAL in .env)
  2. Setting your API keys (API_KEYS in .env)
  3. Modifying the Ollama base URL if needed
  4. Adjusting CORS settings for your environment

πŸ’» Local Setup

  1. Clone the repository:

    git clone https://github.com/gitmotion/ollama-api-server.git
    cd ollama-api-server
  2. Install dependencies:

    npm install
  3. Create and configure .env file:

    cp .env.example .env
    # Edit .env with your settings
  4. Build and start the server:

    npm run build
    npm start

βš™οΈ Configuration

The server can be configured using environment variables:

Variable Description Default
PORT Server port 7777
OLLAMA_BASE_URL URL of your Ollama instance http://localhost:11434
CORS_ORIGIN CORS origin setting *
API_KEYS Comma-separated list of valid API keys default-key-1,default-key-2

πŸ”Œ API Endpoints

All Ollama API endpoints are supported with authentication:

  • POST /api/chat - Chat completion
  • POST /api/generate - Text generation
  • POST /api/embeddings - Generate embeddings
  • GET /api/tags - List available models
  • POST /api/show - Show model details
  • POST /api/pull - Pull a model
  • DELETE /api/delete - Delete a model
  • POST /api/copy - Copy a model
  • GET /api/version - Get Ollama version
  • GET /health - Health check endpoint

πŸ” Authentication

Include your API key in requests using one of these methods:

  1. X-API-Key header:

    curl -H "x-api-key: your-api-key" http://localhost:7777/api/tags
  2. Authorization header:

    curl -H "Authorization: Bearer your-api-key" http://localhost:7777/api/tags
  3. Request body:

    curl -X POST -H "Content-Type: application/json" \
     -d '{"apiKey": "your-api-key"}' \
     http://localhost:7777/api/tags

Made with ❀️ by gitmotion

About

A simple, easy-to-use api server that sits in front of your local πŸ¦™ ollama instance to add additional security when making requests to ollama.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /