name: taskingai
services:
  frontend:
    image: taskingai/taskingai-console:v0.3.0
    depends_on:
      - backend-web
      - backend-api
    networks:
      - taskingai_network
  backend-inference:
    image: taskingai/taskingai-inference:v0.3.6
    environment:
      AES_ENCRYPTION_KEY: b90e4648ad699c3bdf62c0860e09eb9efc098ee75f215bf750847ae19d41e4b0
      ICON_URL_PREFIX: http://nginx:3080
      PROJECT_ID: taskingai
    healthcheck:
      test:
        - CMD
        - curl
        - "-f"
        - http://localhost:8000/v1/health_check
      interval: 15s
      timeout: 10s
      retries: 5
    networks:
      - taskingai_network
  backend-plugin:
    image: taskingai/taskingai-plugin:v0.3.5-1
    environment:
      AES_ENCRYPTION_KEY: b90e4648ad699c3bdf62c0860e09eb9efc098ee75f215bf750847ae19d41e4b0
      ICON_URL_PREFIX: http://nginx:3080
      OBJECT_STORAGE_TYPE: local
      HOST_URL: http://nginx:3080
      PATH_TO_VOLUME: /var/lib/data
      PROJECT_ID: taskingai
    volumes:
      - /DATA/AppData/$AppID/data/object_storage:/var/lib/data
    healthcheck:
      test:
        - CMD
        - curl
        - "-f"
        - http://localhost:8000/v1/health_check
      interval: 15s
      timeout: 10s
      retries: 5
    networks:
      - taskingai_network
  backend-api:
    image: taskingai/taskingai-server:v0.3.0
    environment:
      POSTGRES_URL: postgres://postgres:TaskingAI321@db:5432/taskingai
      REDIS_URL: redis://:TaskingAI321@cache:6379/0
      TASKINGAI_INFERENCE_URL: http://backend-inference:8000
      TASKINGAI_PLUGIN_URL: http://backend-plugin:8000
      AES_ENCRYPTION_KEY: b90e4648ad699c3bdf62c0860e09eb9efc098ee75f215bf750847ae19d41e4b0
      OBJECT_STORAGE_TYPE: local
      HOST_URL: http://nginx:3080
      PATH_TO_VOLUME: /var/lib/data
      PROJECT_ID: taskingai
    volumes:
      - /DATA/AppData/$AppID/data/object_storage:/var/lib/data
    depends_on:
      - db
      - cache
      - backend-inference
      - backend-plugin
    healthcheck:
      test:
        - CMD
        - curl
        - "-f"
        - http://localhost:8000/v1/health_check
      interval: 15s
      timeout: 10s
      retries: 5
    networks:
      - taskingai_network
  backend-web:
    image: taskingai/taskingai-server:v0.3.0
    environment:
      POSTGRES_URL: postgres://postgres:TaskingAI321@db:5432/taskingai
      REDIS_URL: redis://:TaskingAI321@cache:6379/0
      TASKINGAI_INFERENCE_URL: http://backend-inference:8000
      TASKINGAI_PLUGIN_URL: http://backend-plugin:8000
      AES_ENCRYPTION_KEY: b90e4648ad699c3bdf62c0860e09eb9efc098ee75f215bf750847ae19d41e4b0
      JWT_SECRET_KEY: dbefe42f34473990a3fa903a6a3283acdc3a910beb1ae271a6463ffa5a926bfb
      PURPOSE: WEB
      DEFAULT_ADMIN_USERNAME: admin
      DEFAULT_ADMIN_PASSWORD: TaskingAI321
      OBJECT_STORAGE_TYPE: local
      HOST_URL: http://nginx:3080
      PATH_TO_VOLUME: /var/lib/data
      PROJECT_ID: taskingai
    volumes:
      - /DATA/AppData/$AppID/data/object_storage:/var/lib/data
    depends_on:
      - db
      - cache
      - backend-inference
      - backend-plugin
    healthcheck:
      test:
        - CMD
        - curl
        - "-f"
        - http://localhost:8000/v1/health_check
      interval: 15s
      timeout: 10s
      retries: 5
    networks:
      - taskingai_network
  db:
    image: ankane/pgvector:v0.5.1
    environment:
      POSTGRES_DB: taskingai
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: TaskingAI321
    volumes:
      - /DATA/AppData/$AppID/data/postgres:/var/lib/postgresql/data
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready -U postgres
      interval: 5s
      timeout: 5s
      retries: 10
    restart: always
    networks:
      - taskingai_network
  cache:
    image: redis:7-alpine
    command:
      - redis-server
      - "--requirepass"
      - TaskingAI321
    volumes:
      - /DATA/AppData/$AppID/data/redis:/data
    healthcheck:
      test:
        - CMD
        - redis-cli
        - auth
        - TaskingAI321
        - ping
      interval: 5s
      timeout: 5s
      retries: 10
    restart: always
    networks:
      - taskingai_network
  nginx:
    image: nginx:1.27.3
    ports:
      - "3080:80"
    volumes:
      - /DATA/AppData/$AppID/data/nginx_cache:/var/cache/nginx
    depends_on:
      - frontend
      - backend-web
      - backend-api
    networks:
      - taskingai_network
    configs:
      - source: nginx_config
        target: /etc/nginx/conf.d/default.conf
networks:
  taskingai_network:
    driver: bridge
x-casaos:
  architectures:
    - amd64
    - arm64
  main: frontend
  author: CasaOS Team
  category: Chat
  description:
    en_us: The developer-friendly cloud platform for building and running LLM agents for AI-native applications.
    zh_cn: 开发人员友好的云平台，用于构建和运行AI原生应用程序的LLM代理。
  developer: TaskingAI Team
  icon: https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/TaskingAI/icon.png
  screenshot_link:
    - https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/TaskingAI/screenshot-1.png
    - https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/TaskingAI/screenshot-2.png
    - https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/TaskingAI/screenshot-3.png
    - https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/TaskingAI/screenshot-4.png
  tagline:
    en_us: The developer-friendly cloud platform for building and running LLM agents for AI-native applications.
    zh_cn: 开发人员友好的云平台，用于构建和运行AI原生应用程序的LLM代理。
  thumbnail: https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/TaskingAI/thumbnail.png
  tips:
    before_install:
      en_us: |
        | Username | Password   |
        | -------- | ---------- |
        | admin    | TaskingAI321 |
  title:
    en_us: TaskingAI
  port_map: "3080"
configs:
  nginx_config:
    content: |
      server {
        listen 80;

        client_max_body_size 20M;

        location /images/providers/icons/ {
            proxy_pass http://backend-inference:8000;
        }

        location /images/plugins/bundles/icons/ {
            proxy_pass http://backend-plugin:8000;
        }

        location /api/v1/ {
            proxy_pass http://backend-web:8000;
            proxy_http_version 1.1;
            proxy_set_header Connection '';
            proxy_buffering off;
            proxy_cache off;
            proxy_read_timeout 24h;
        }

        location /v1/ {
            proxy_pass http://backend-api:8000;
            proxy_http_version 1.1;
            proxy_set_header Connection '';
            proxy_buffering off;
            proxy_cache off;
            proxy_read_timeout 24h;
        }

        location /imgs/ {
            proxy_pass http://backend-web:8000;
        }

        location / {
            proxy_pass http://frontend:80;
        }
      }
