new-api Docker & Self-Hosted Deployment

GitHub

A unified AI model hub for aggregation & distribution. It supports cross-converting various LLMs into OpenAI-compatible, Claude-compatible, or...

50,238 stars Go Go 19 files ยท ~113,834 tokens #ai-gateway#claude#deepseek#gemini#newapi#openai#rerank
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/new-api-dev
2. Docker Run (1-Click Launch) docker run -d --name new-api -p 3000:3000 --restart always new-api-dev:local
3. Podman Run podman run -d --name new-api -p 3000:3000 --restart always new-api-dev:local
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/new-api-dev:local
5. ORAS Pull (OCI Artifact) oras pull new-api-dev:local
6. Compose Deployment docker compose up -d
docker-compose.dev.yml
Download .yml
# Frontend Development - Backend built from local source
#
# Usage:
#   1. docker compose -f docker-compose.dev.yml up -d
#   2. make dev-web
#   3. Open http://localhost:5173 (Rsbuild dev server, API auto-proxied to :3000)
#
# Rebuild backend after Go code changes:
#   docker compose -f docker-compose.dev.yml up -d --build new-api
#
# Stop:
#   docker compose -f docker-compose.dev.yml down
#
# Reset data:
#   docker compose -f docker-compose.dev.yml down -v

services:
  new-api:
    build:
      context: .
      dockerfile: Dockerfile.dev
    image: new-api-dev:local
    container_name: new-api-dev
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - dev_data:/data
    environment:
      - SQL_DSN=postgresql://root:123456@postgres:5432/new-api
      - REDIS_CONN_STRING=redis://redis
      - TZ=Asia/Shanghai
      - BATCH_UPDATE_ENABLED=true
      # Local HTTP dev mode: keep Secure=false and leave TRUSTED_URL unset. This disables the refresh/logout OriginGuard so the :5173 -> :3000 dev proxy works.
      - SESSION_COOKIE_SECURE=false
      # For HTTPS only: set Secure=true and list every exact trusted HTTPS browser Origin. This does not configure relay CORS.
      # - SESSION_COOKIE_SECURE=true
      # - SESSION_COOKIE_TRUSTED_URL=https://example.com,https://admin.example.com
    depends_on:
      redis:
        condition: service_started
      postgres:
        condition: service_healthy
    networks:
      - dev-network

  redis:
    image: redis:7-alpine
    container_name: new-api-dev-redis
    restart: unless-stopped
    networks:
      - dev-network

  postgres:
    image: postgres:15-alpine
    container_name: new-api-dev-pg
    restart: unless-stopped
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: 123456
      POSTGRES_DB: new-api
    volumes:
      - dev_pg_data:/var/lib/postgresql/data
    networks:
      - dev-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U root -d new-api"]
      interval: 5s
      timeout: 3s
      retries: 5

volumes:
  dev_data:
  dev_pg_data:

networks:
  dev-network:
    driver: bridge