aci Docker & Self-Hosted Deployment

GitHub

ACI.dev is the open source tool-calling platform that hooks up 600+ tools into any agentic IDE or custom AI agent through direct function calling or a...

4,764 stars Python Python 1 file ยท ~8,801 tokens #agents#ai#ai-agents#api#developer-tools#function-calling#integration#llm
RAW Compose
1. Pull Image (DOCKERHUB) docker pull pgvector/pgvector
2. Docker Run (1-Click Launch) docker run -d --name aci -p 5432:5432 --restart always pgvector/pgvector:pg17
3. Podman Run podman run -d --name aci -p 5432:5432 --restart always pgvector/pgvector:pg17
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/pgvector/pgvector:pg17
5. ORAS Pull (OCI Artifact) oras pull pgvector/pgvector:pg17
6. Compose Deployment docker compose up -d
backend/compose.yml
Download .yml
name: aci

services:
  db:
    # Note: we need to use the pgvector/pgvector:pg17 image to use the pgvector extension, instead of the official postgres image
    image: pgvector/pgvector:pg17
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d local_db"]
      interval: 1s
      retries: 5
      start_period: 1s
      timeout: 10s
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: local_db
    ports:
      - "5432:5432"
    restart: no

  test-db:
    image: pgvector/pgvector:pg17
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d local_db"]
      interval: 1s
      retries: 5
      start_period: 1s
      timeout: 10s
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: local_db
    restart: no

  aws:
    image: localstack/localstack
    ports:
      - "4566:4566"
    environment:
      - DEBUG=1
      - DATA_DIR=/var/lib/localstack/data
      - SERVICES=kms
      - LS_LOG=warn
    volumes:
      - ./scripts/create-kms-encryption-key.sh:/etc/localstack/init/ready.d/create-kms-encryption-key.sh

  propelauth_mock:
    build:
      context: .
      dockerfile: Dockerfile.runner
    ports:
      - "12800:12800"
    working_dir: /workdir
    volumes:
      - ./mock/propelauth_mock_server.py:/workdir/propelauth_mock_server.py
    command: uvicorn propelauth_mock_server:app --proxy-headers --forwarded-allow-ips=* --host 0.0.0.0 --port 12800 --reload

  server:
    build:
      context: .
      dockerfile: Dockerfile.server
    healthcheck:
      test: ["CMD-SHELL", "curl localhost:8000/v1/health"]
      interval: 10s
      retries: 5
      start_period: 3s
      timeout: 10s
    env_file:
      - .env.local
    # useful for development, changes take effect in the container without needing to rebuild the image.
    volumes:
      - ./aci/server:/workdir/aci/server
      - ./aci/common:/workdir/aci/common
      # Mocks out the propelauth_fastapi module in server container to bypass token validation in local development
      - ./mock/propelauth_fastapi_mock.py:/workdir/.venv/lib/python3.12/site-packages/propelauth_fastapi/__init__.py
    ports:
      - "8000:8000"
    # this overrides the default CMD specified in the Dockerfile, use this for local development
    command: uvicorn aci.server.main:app --proxy-headers --forwarded-allow-ips=* --host 0.0.0.0 --port 8000 --reload --no-access-log
    depends_on:
      db:
        condition: service_healthy
      aws:
        condition: service_healthy
    restart: no

  # can think of runner as an staging host for executing any commands
  # e.g., run cli commands and scripts such as seed db etc.
  runner:
    build:
      context: .
      dockerfile: Dockerfile.runner
    env_file:
      - .env.local
    # Mount the local code into the container so you can run scripts / Alembic
    volumes:
      - ./aci:/workdir/aci
      - ./apps:/workdir/apps
      - ./scripts:/workdir/scripts
      - ./evals:/workdir/evals
      - ./alembic.ini:/workdir/alembic.ini
      # Mocks out the propelauth_fastapi module in server container to bypass token validation in local development
      - ./mock/propelauth_fastapi_mock.py:/workdir/.venv/lib/python3.12/site-packages/propelauth_fastapi/__init__.py
    command: >
      /bin/sh -c "alembic upgrade head && tail -f /dev/null"
    depends_on:
      db:
        condition: service_healthy
      server:
        condition: service_healthy

  test-runner:
    build:
      context: .
      dockerfile: Dockerfile.runner
    env_file:
      - .env.local
    environment:
      # override the db host to use the test-db service
      - SERVER_DB_HOST=test-db
      - ALEMBIC_DB_HOST=test-db
      - CLI_DB_HOST=test-db
    # Mount the local code into the container so you can run scripts / Alembic
    volumes:
      - ./aci:/workdir/aci
      - ./apps:/workdir/apps
      - ./scripts:/workdir/scripts
      - ./evals:/workdir/evals
      - ./alembic.ini:/workdir/alembic.ini
      # Mocks out the propelauth_fastapi module in server container to bypass token validation in local development
      - ./mock/propelauth_fastapi_mock.py:/workdir/.venv/lib/python3.12/site-packages/propelauth_fastapi/__init__.py
    command: >
      /bin/sh -c "alembic upgrade head && tail -f /dev/null"
    depends_on:
      test-db:
        condition: service_healthy
      aws:
        condition: service_healthy